Add speech-topic policy from tomorrow and a morning family talk.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 13:53:12 +03:00
co-authored by Cursor
parent 5e147a8e47
commit 92c2143329
31 changed files with 909 additions and 35 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] Клиентский тест: комбобоксы речи рядом с одеждой, подпись «с завтра»
## Критерий готовности
+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