Register slice 12 and mark phase 68 in progress.
EOF Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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`.
|
||||
@@ -0,0 +1,36 @@
|
||||
# Фаза 69. Память проступков
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 44](../09-social/44-quarrel-fight.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
Вызов и карточка опираются на короткий список недавних событий, не на шкалу дисциплины.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [ ] На человеке разреженный список проступков: вид, игровое время (или день+слот), опционально
|
||||
второй участник
|
||||
- [ ] Потолок длины и какие факты пишут — поля `BehaviorDef` / данные `core`, не константы в UI
|
||||
- [ ] Писать при ссоре, драке, выговоре (обрыв драки сотрудником); старые вытесняются
|
||||
- [ ] Сейв вместе с человеком; ноль записей не хранить раздуто
|
||||
- [ ] Карточка ученика показывает несколько последних (HTTP через мейлбокс)
|
||||
- [ ] Строки видов через локаль мода / `t(...)` по договорённости фазы; обе локали клиента для UI
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [ ] Драка с выговором добавляет запись жертве и/или задире по правилам фазы
|
||||
- [ ] Сверх потолка старая запись исчезает
|
||||
- [ ] Список переживает сейв
|
||||
- [ ] Карточка отдает тот же порядок, что в мире (не клиентская фантазия)
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- После драки с сотрудником в узле на карточке ученика виден проступок; перезагрузка школы не
|
||||
стирает
|
||||
- Отфильтрованные тесты по Testing policy проходят
|
||||
|
||||
## Стоп
|
||||
|
||||
Не шкала 0…100. Не авто-вызов (фаза 70). Не журнал оценок. Не кнопка игрока.
|
||||
@@ -0,0 +1,46 @@
|
||||
# Фаза 70. Вызов к директору и очередь
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 69](69-offense-memory.md)
|
||||
- [Фаза 21](../05-ai/21-decisions.md)
|
||||
- [Фаза 18](../05-ai/18-presence-walking.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
Проступок гонит ученика к директору сам: ходьба, ожидание в коридоре, один в кабинете.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [ ] Авто-триггер вызова из фактов (обрыв драки / выговор и пороги в `BehaviorDef`); кнопки
|
||||
игрока нет
|
||||
- [ ] Временное состояние «вызван» — сильная обязанность дойти до `PrincipalsOffice`, пройти
|
||||
приём, сняться
|
||||
- [ ] Нет директора в штате или нет узла кабинета — вызов не стартует / гаснет по правилу в данных
|
||||
- [ ] Кабинет занят приёмом → ждут в коридорном узле у ребра к кабинету, не внутри
|
||||
- [ ] В кабинете один на приём; очередь FIFO с детерминированным порядком
|
||||
- [ ] Приём — короткое действие; мнение о директоре падает; при необходимости допись в список
|
||||
проступков (69)
|
||||
- [ ] Обычная ходьба и `travelMinutes`; телепорта нет
|
||||
- [ ] Skip / утро не оставляют вечный «вызван» без разрешения (явное правило в коде фазы)
|
||||
- [ ] Очередь и вызовы только на потоке школы (инвариант 3)
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [ ] После qualifying-проступка ученик получает обязанность к кабинету (при живом директоре)
|
||||
- [ ] Двое вызванных: один в кабинете, второй в коридоре у входа, не оба внутри
|
||||
- [ ] Освобождение кабинета впускает следующего из очереди
|
||||
- [ ] Тот же сид и те же события → тот же порядок очереди
|
||||
- [ ] Без директора вызов не зависает навечно
|
||||
- [ ] Игрок не может послать вызов по HTTP/сокету (нет такого намерения)
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- Драка с обрывом → ученик идёт к директору; второй вызванный ждёт в коридоре; после приёма
|
||||
оба снова живут обычным днём
|
||||
- Отфильтрованные тесты по Testing policy проходят
|
||||
|
||||
## Стоп
|
||||
|
||||
Не собрания. Не тосты (если нужны — фаза 71). Не присутствие-протокол без нужды — только если
|
||||
без нового статуса UI врёт; бамп версии тогда в этом коммите.
|
||||
@@ -0,0 +1,38 @@
|
||||
# Фаза 71. Тосты вызова и очередь на экране
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 70](70-director-summons.md)
|
||||
- [Фаза 64](../11-events/64-event-defs.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
Игрок видит, что кого-то вызвали, не вычисляя очередь глазами по всему дереву.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [ ] `EventDef` info на авто-вызов (ваниль в `core`); факт из симуляции → доска уведомлений
|
||||
среза 11
|
||||
- [ ] Тост не паузит часы; не в сейве sticky
|
||||
- [ ] В панели локации / присутствии понятно «идёт к директору» / «ждёт у кабинета» / «на приёме»
|
||||
— через действие и узел; новый байт в кадре присутствия — только если иначе нельзя; тогда
|
||||
протокол +1 в этом коммите (`ProtocolCodec`, `protocol.ts`, `docs/protocol.md`)
|
||||
- [ ] Гость видит те же info; ничего не назначает
|
||||
- [ ] Локали RU/EN
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [ ] Qualifying-вызов эмитит notice с ожидаемым `EventDef`
|
||||
- [ ] Info не пишет sticky в сейв
|
||||
- [ ] Если бамп протокола — round-trip и byte-layout на C# и TS
|
||||
- [ ] Без открытого клиента очередь в мире всё равно двигается (подписка не обязательна для сима)
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- Вызов → тост; в коридоре у кабинета видно ожидающих; старый клиент при бампе отваливается на
|
||||
Hello
|
||||
- Отфильтрованные тесты по Testing policy проходят
|
||||
|
||||
## Стоп
|
||||
|
||||
Не собрания. Не warning-пауза на каждый вызов.
|
||||
@@ -0,0 +1,44 @@
|
||||
# Фаза 72. Родительские собрания
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 68](68-class-teacher.md)
|
||||
- [Фаза 71](71-summons-notices.md)
|
||||
- [Фаза 18](../05-ai/18-presence-walking.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
Классный редко оставляет класс после уроков; родители впервые ходят по карте.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [ ] Только ИИ: редкий бросок от сида класса и дня; кнопки игрока нет
|
||||
- [ ] Условия: есть классный, рабочий день, после последнего урока **этого** класса, классный в
|
||||
школе; пороги в `BehaviorDef`
|
||||
- [ ] Классный остаётся в homeroom класса
|
||||
- [ ] Доля родителей класса приходит: получают узел (двор → путь → кабинет), обычная ходьба
|
||||
- [ ] Учитель-родитель ученика класса, уже в школе, может участвовать без второго инстанса
|
||||
- [ ] Собрание — ограниченное по времени действие/занятость узла; лёгкий сдвиг мнений
|
||||
семья↔классный
|
||||
- [ ] После — родители снова «вне школы»; классный свободен
|
||||
- [ ] `EventDef` info «собрание»; локали
|
||||
- [ ] Нет классного — собрание не планируется
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [ ] Без `classTeacherId` собрание не стартует при том же сиде дня
|
||||
- [ ] С классным и прохождением редкости родители появляются на карте и уходят после
|
||||
- [ ] Собрание не раньше последнего урока класса
|
||||
- [ ] Тот же сид класса/дня → те же «кто пришёл» (детерминизм доли)
|
||||
- [ ] Игрок не назначает собрание по API
|
||||
- [ ] Skip ночи не оставляет родителей вечно в кабинете
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- Назначить классного, дождаться редкого собрания: родители в кабинете класса, тост, потом
|
||||
снова вне школы
|
||||
- Отфильтрованные тесты по Testing policy проходят
|
||||
|
||||
## Стоп
|
||||
|
||||
Не вызов одного родителя к директору. Не календарь на четверть. Не явка 100%. Не оценки.
|
||||
@@ -0,0 +1,34 @@
|
||||
Индекс срезов: [`../README.md`](../README.md).
|
||||
|
||||
## Срез 12. Кабинет директора и классный
|
||||
|
||||
Дизайн: [`office.md`](../../design/12-office/office.md).
|
||||
|
||||
Проступок помнится коротко, ученика самих гонят к директору (очередь, коридор). Классный —
|
||||
учитель из Управления; редко собирает родителей после уроков, и они ходят по карте. Игрок
|
||||
назначает классных и смотрит. Срез можно остановить после этапа A — классные стоят, даже если
|
||||
кабинета ещё нет.
|
||||
|
||||
**Этап A — классный.** Слот на классе.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [68. Классный руководитель](68-class-teacher.md) | 🔄 | Назначение в Управлении, только учителя |
|
||||
|
||||
**Этап B — проступки и кабинет.** Память, авто-вызов, экран.
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [69. Память проступков](69-offense-memory.md) | ⬜ | Короткий список на человеке и карточке |
|
||||
| [70. Вызов и очередь](70-director-summons.md) | ⬜ | Авто, ходьба, коридор, один в кабинете |
|
||||
| [71. Тосты вызова](71-summons-notices.md) | ⬜ | `EventDef` info; очередь видна |
|
||||
|
||||
69 стоит на 44; 70 — на 69 и ходьбу/решения; 71 — на 70 и 64.
|
||||
|
||||
**Этап C — собрания.**
|
||||
|
||||
| Фаза | Статус | Зачем |
|
||||
| --- | --- | --- |
|
||||
| [72. Родительские собрания](72-parent-meetings.md) | ⬜ | ИИ классного, родители на карте |
|
||||
|
||||
72 стоит на 68 и 71.
|
||||
Reference in New Issue
Block a user