Register slice 12 and mark phase 68 in progress.

EOF

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-21 09:26:06 +03:00
co-authored by Cursor
parent c3d17cafc6
commit 99eca80d6d
10 changed files with 426 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
# Фаза 68. Классный руководитель
## Зависимости
- [Фаза 13](../03-staffing/13-management-tab.md)
- [Фаза 7](../02-people/07-people-in-school.md)
## Зачем
У класса появляется учитель-классный. Без него собраниям некого инициировать; игрок впервые
в этом срезе что-то решает.
## Задачи
- [ ] У `SchoolClass` опциональный `classTeacherId` (или эквивалент); сейв в ростере
- [ ] Назначить / снять — HTTP через мейлбокс школы; только хозяин; гость `403`
- [ ] Кандидат — нанятый с должностью `Teacher`; иначе отказ с текстом, не молчание
- [ ] Один учитель может быть классным у нескольких классов
- [ ] UI в «Управлении»: список классов со слотом классного (выбор / снять)
- [ ] Имя классного видно там, где уже показывают класс (карточка ученика / управление)
- [ ] Строки через `t(...)`, обе локали
- [ ] Пустой слот — школа живёт как сейчас; собраний ещё нет
## Тесты, без которых фаза не закрыта
- [ ] Назначение учителя класса пишет id в ростер и переживает сейв / reload
- [ ] Не-учитель и чужой id отклоняются
- [ ] Гость не назначает (API)
- [ ] Снятие очищает слот; класс без классного валиден
- [ ] Два класса могут указать одного и того же учителя
## Критерий готовности
- В Управлении назначить классного 5А, открыть карточку ученика / список — имя видно; F5 / reload
сохраняет
- Отфильтрованные тесты проекта по Testing policy проходят
## Стоп
Не вызов к директору. Не проступки. Не собрания. Не новый `PositionDef`.