Add opinions storage, morning drift, and Connections card tab.

This commit is contained in:
Leonid Pershin
2026-08-20 07:34:57 +03:00
parent b9d91d387e
commit b1b4f18b40
24 changed files with 1020 additions and 27 deletions
+13 -13
View File
@@ -12,25 +12,25 @@
## Задачи
- [ ] Мнение A→B: −100…100, несимметрично, ноль не хранить
- [ ] Пороги и подписи в `BehaviorDef`; клиент рисует присланную подпись, не считает сам
- [ ] Генератор ставит семейные старты (родители, сиблинги, партнёры семьи) из данных
- [ ] Каждое рабочее утро (и skip) ненулевые мнения слегка дрейфуют к семейному базису или к нулю;
- [x] Мнение A→B: −100…100, несимметрично, ноль не хранить
- [x] Пороги и подписи в `BehaviorDef`; клиент рисует присланную подпись, не считает сам
- [x] Генератор ставит семейные старты (родители, сиблинги, партнёры семьи) из данных
- [x] Каждое рабочее утро (и skip) ненулевые мнения слегка дрейфуют к семейному базису или к нулю;
дошли до нуля — запись выкинуть
- [ ] `people.json` пишет мнение при сдвиге; старый сейв без поля — все нули кроме семьи
- [x] `people.json` пишет мнение при сдвиге; старый сейв без поля — все нули кроме семьи
после первой загрузки-переписи
- [ ] Вкладка карточки **Связи**: семья с числами, топ друзей/врагов, поиск по ненулевым
- [ ] Игрок с вкладки ничего не меняет
- [ ] `docs/protocol.md` — HTTP карточки
- [x] Вкладка карточки **Связи**: семья с числами, топ друзей/врагов, поиск по ненулевым
- [x] Игрок с вкладки ничего не меняет
- [x] `docs/protocol.md` — HTTP карточки
## Тесты, без которых фаза не закрыта
- [ ] Родитель и ребёнок после генерации имеют плюс в обе стороны; чужие одноклассники — нет записи
- [ ] A→B и B→A могут различаться
- [ ] После нескольких утренних дрейфов без разговоров мнение одноклассников (если появилось)
- [x] Родитель и ребёнок после генерации имеют плюс в обе стороны; чужие одноклассники — нет записи
- [x] A→B и B→A могут различаться
- [x] После нескольких утренних дрейфов без разговоров мнение одноклассников (если появилось)
ближе к нулю, семейное — к старту, не к нулю
- [ ] Карточка без отдельного запроса «всех пар школы»: только этот человек
- [ ] Клиентский тест: вкладка «Связи» не монтирует лог
- [x] Карточка без отдельного запроса «всех пар школы»: только этот человек
- [x] Клиентский тест: вкладка «Связи» не монтирует лог
## Критерий готовности
+32 -1
View File
@@ -269,6 +269,10 @@ person. `customPortraitPrompt` is the last saved user prompt for the custom vari
They are filled on the HTTP thread after the worker returns the card; generation does
not happen on this request.
`connections` is the **Связи** tab: family links with `opinion` / `opinionLabel` from catalog bands,
plus `friends`, `enemies` and `others` (every non-family non-zero pair for this person only).
The client does not compute thresholds. There is no school-wide opinions endpoint.
```json
{
"id": "f0.c0",
@@ -321,7 +325,34 @@ not happen on this request.
"hasAvatar": false,
"hasCustom": false,
"hasFullBody": false,
"customPortraitPrompt": null
"customPortraitPrompt": null,
"connections": {
"family": {
"parents": [
{
"id": "f0.p1",
"fullName": "Иванова Ольга Михайловна",
"female": true,
"opinion": 75,
"opinionLabel": "близкие друзья"
}
],
"children": [],
"siblings": [
{
"id": "f0.c1",
"fullName": "Иванов Кирилл Петрович",
"female": false,
"opinion": 45,
"opinionLabel": "друзья"
}
],
"partners": []
},
"friends": [],
"enemies": [],
"others": []
}
}
```