Add SwarmUI settings management and portrait generation enhancements

- Introduced new API endpoints for managing SwarmUI settings, including fetching and saving presets and age rules.
- Updated the portrait generation logic to utilize the new settings structure, allowing for dynamic preset selection based on age.
- Enhanced UI components to support SwarmUI settings, including localization for new strings and improved styling for settings sections.
- Added tests to verify the functionality of new settings endpoints and portrait generation behavior.

This commit lays the groundwork for more flexible and user-friendly portrait generation options.
This commit is contained in:
Leonid Pershin
2026-08-20 06:06:45 +03:00
parent e0b7122f3b
commit 5a400be792
32 changed files with 2178 additions and 184 deletions
+42
View File
@@ -0,0 +1,42 @@
# Фаза 41. Мнения и вкладка «Связи»
## Зависимости
- [Фаза 8](08-people-browser.md)
- [Фаза 36](36-person-card-tabs.md)
## Зачем
У пары появляется число. Семья больше не «просто родственники». Карточка умеет это показать,
даже пока кружков ещё нет.
## Задачи
- [ ] Мнение A→B: −100…100, несимметрично, ноль не хранить
- [ ] Пороги и подписи в `BehaviorDef`; клиент рисует присланную подпись, не считает сам
- [ ] Генератор ставит семейные старты (родители, сиблинги, партнёры семьи) из данных
- [ ] Каждое рабочее утро (и skip) ненулевые мнения слегка дрейфуют к семейному базису или к нулю;
дошли до нуля — запись выкинуть
- [ ] `people.json` пишет мнение при сдвиге; старый сейв без поля — все нули кроме семьи
после первой загрузки-переписи
- [ ] Вкладка карточки **Связи**: семья с числами, топ друзей/врагов, поиск по ненулевым
- [ ] Игрок с вкладки ничего не меняет
- [ ] `docs/protocol.md` — HTTP карточки
## Тесты, без которых фаза не закрыта
- [ ] Родитель и ребёнок после генерации имеют плюс в обе стороны; чужие одноклассники — нет записи
- [ ] A→B и B→A могут различаться
- [ ] После нескольких утренних дрейфов без разговоров мнение одноклассников (если появилось)
ближе к нулю, семейное — к старту, не к нулю
- [ ] Карточка без отдельного запроса «всех пар школы»: только этот человек
- [ ] Клиентский тест: вкладка «Связи» не монтирует лог
## Критерий готовности
- Открыть ученика, на «Связях» родители с подписью «близкие» или соседней, одноклассник без строки
- `dotnet test` и `npm test` / `build` проходят
## Стоп
Не собирать кружки. Не бампить сокет. Не заводить романтику.