Merge branch 'phase/46-speech-home'

Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	docs/phases/09-social/README.md
#	src/HSchool.Server/Game/SchoolWorker.cs
#	tests/HSchool.Ai.Tests/TalkCirclesTests.cs
#	tests/HSchool.Simulation.Tests/MorningOpinionsTests.cs
#	tests/HSchool.Simulation.Tests/TalkCircleTests.cs
This commit is contained in:
Leonid Pershin
2026-08-20 14:06:29 +03:00
35 changed files with 910 additions and 36 deletions
+10 -10
View File
@@ -13,20 +13,20 @@
## Задачи
- [ ] В «Правилах» два комбобокса речи: ученики / сотрудники × свободно / без грубого / только учёба
- [ ] В силу с завтра; API сегодня не переодевает темы текущих кружков
- [ ] Система не стартует кружок с темой вне политики; начатый вчера доигрывает
- [ ] Одно семейное событие на человека за рабочее утро; skip ночи применяет
- [ ] Семейные темы из `TopicDef`; сдвиг меньше школьного разговора
- [ ] `docs/protocol.md` — HTTP правил речи
- [x] В «Правилах» два комбобокса речи: ученики / сотрудники × свободно / без грубого / только учёба
- [x] В силу с завтра; API сегодня не переодевает темы текущих кружков
- [x] Система не стартует кружок с темой вне политики; начатый вчера доигрывает
- [x] Одно семейное событие на человека за рабочее утро; skip ночи применяет
- [x] Семейные темы из `TopicDef`; сдвиг меньше школьного разговора
- [x] `docs/protocol.md` — HTTP правил речи
## Тесты, без которых фаза не закрыта
- [ ] POST «только учёба» сегодня не мешает текущему кружку «игры»
- [ ] На следующее рабочее утро грубая тема у учеников не стартует
- [ ] Skip с пятницы на понедельник применяет домашнее событие и дрейф мнений; мнение с
- [x] POST «только учёба» сегодня не мешает текущему кружку «игры»
- [x] На следующее рабочее утро грубая тема у учеников не стартует
- [x] Skip с пятницы на понедельник применяет домашнее событие и дрейф мнений; мнение с
родителем сдвинуто, брошенная дружба ближе к нулю
- [ ] Клиентский тест: комбобоксы речи рядом с одеждой, подпись «с завтра»
- [x] Клиентский тест: комбобоксы речи рядом с одеждой, подпись «с завтра»
## Критерий готовности
+1 -1
View File
@@ -35,7 +35,7 @@
| Фаза | Статус | Зачем |
| --- | --- | --- |
| [46. Политика речи и дом](46-speech-home.md) | 🔄 | Комбобоксы речи с завтра; утреннее семейное событие |
| [46. Политика речи и дом](46-speech-home.md) | | Комбобоксы речи с завтра; утреннее семейное событие |
| [47. Пак romance](47-romance-pack.md) | ✅ | Ориентация, симпатия, пара 18+, патч тем |
46 стоит на 37 и 42; 47 — на 42 и 23. `example` не трогать.
+30
View File
@@ -572,6 +572,36 @@ omitted sides keep their current rule. Unknown `{id}` is `404` `unknown-school`.
{ "students": { "form": "strict", "color": "noBright" } }
```
### `GET /api/schools/{id}/speech-rules`
Student and staff speech-topic policy for the school. Only the owner may read this (`403`
`not-owner`). Unknown `{id}` is `404` `unknown-school`.
Policy is one of `free`, `noRude`, `studyOnly`. When a `POST` has been accepted but not yet
applied, `pendingStudents` and/or `pendingStaff` show what takes effect on the **next work
morning** — the same morning as dress rules. Today's live circles keep their topic; the system
does not start a new circle whose topic is outside the live policy.
```json
{
"students": "free",
"staff": "free",
"pendingStudents": null,
"pendingStaff": null
}
```
### `POST /api/schools/{id}/speech-rules`
Queues a change for the next work morning. Only the owner may post (`403` `not-owner`). Either or
both of `students` and `staff` may be sent; omitted sides keep their current pending/live rule.
Unknown `{id}` is `404` `unknown-school`. Unknown policy is `400` `unknown-speech`. Response body
matches `GET`.
```json
{ "students": "studyOnly" }
```
### `GET /api/schools/{id}/staffing`
Money, uncovered subjects, the applicant pool and current staff. Only the owner may read this