Mark phase 73 in progress; register slice 13.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-21 11:30:32 +03:00
co-authored by Cursor
parent f76201cd35
commit 4c8d91c6f3
9 changed files with 325 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
# Фаза 73. Оценка с урока
## Зависимости
- [Фаза 48](../off-queue/48-lesson-teacher-present.md)
- [Фаза 50](../off-queue/50-teacher-skill-gain.md)
- [Фаза 51](../off-queue/51-warmth-lesson.md)
- [Фаза 52](../off-queue/52-textbook-lesson.md)
## Зачем
Рост навыка получает школьный смысл: оценка 2–5 за урок.
## Задачи
- [ ] Из качества урока (те же входы, что `LessonLearning.Gain`) писать оценку **2, 3, 4 или 5**
- [ ] Пороги и «когда писать» (раз за слот урока) — в `BehaviorDef` / данных `core`
- [ ] Нет учителя / множитель 0 — явное правило (нет оценки или 2), зафиксировать в данных и тесте
- [ ] Хранение на ученике, потолок недавних; сейв
- [ ] Детерминизм: тот же сид и те же входы → та же оценка
- [ ] Игрок оценку не ставит и не правит (нет API правки)
## Тесты, без которых фаза не закрыта
- [ ] Урок с сильным учителем и полными множителями даёт не ниже урока с пустым кабинетом учителя
при тех же прочих
- [ ] За один слот не пишется пачка оценок каждую минуту
- [ ] Сейв сохраняет последние оценки
- [ ] HTTP/сокет не принимает «поставить оценку»
## Критерий готовности
- После урока у ученика в данных есть 2–5; перезагрузка школы не стирает
- Отфильтрованные тесты по Testing policy проходят
## Стоп
Не явка. Не UI журнала. Не тосты. Не болезни.
+36
View File
@@ -0,0 +1,36 @@
# Фаза 74. Посещаемость
## Зависимости
- [Фаза 18](../05-ai/18-presence-walking.md)
- [Фаза 73](73-lesson-marks.md)
## Зачем
Журнал знает, был ли ученик на уроке, без ручной галочки.
## Задачи
- [ ] На слот урока класса: присутствовал (узел = кабинет, не идёт), опоздал (порог минут в
данных), отсутствовал
- [ ] Писать в сейв рядом с журналом оценок
- [ ] Источник — присутствие и расписание, не клиент
- [ ] Заготовка причины отсутствия (прогул по умолчанию); «болезнь» заполнит срез 14
- [ ] Опоздание не отменяет оценку целиком, если правило этапа A иначе — согласовать с 73 в данных
## Тесты, без которых фаза не закрыта
- [ ] Ученик в кабинете к началу → присутствовал
- [ ] Пришёл после порога → опоздал
- [ ] Вне школы / другой узел весь слот → отсутствовал
- [ ] Тот же день и сид → та же явка
- [ ] Сейв переживает reload
## Критерий готовности
- Прогульщик и сидящий на уроке отличаются в данных явки после одного и того же слота
- Отфильтрованные тесты по Testing policy проходят
## Стоп
Не UI. Не уважительная болезнь (14). Не авто-вызов за прогул (76).
+35
View File
@@ -0,0 +1,35 @@
# Фаза 75. Журнал на карточке
## Зависимости
- [Фаза 73](73-lesson-marks.md)
- [Фаза 74](74-attendance.md)
- [Фаза 8](../02-people/08-people-browser.md)
## Зачем
Игрок видит оценки и явку, не открывая сейв.
## Задачи
- [ ] Блок/вкладка на карточке ученика: недавние оценки по предметам и явка
- [ ] Короткая сводка класса (средний след / частые отсутствия) в Управлении или у класса —
без простыни на год
- [ ] HTTP через мейлбокс; гость читает, не пишет
- [ ] Строки `t(...)`, обе локали
- [ ] Список людей в панели журнал не раздувает
## Тесты, без которых фаза не закрыта
- [ ] Карточка отдаёт те же оценки/явку, что в мире
- [ ] Нет права править оценку через API
- [ ] Клиентский тест панели/вкладки (vitest) на пустое и заполненное состояние
## Критерий готовности
- Открыть ученика после урока — видны 2–5 и явка; F5 не чинит данные с клиента
- Отфильтрованные тесты по Testing policy проходят
## Стоп
Не тосты и авто-вызов (76). Не болезни.
@@ -0,0 +1,37 @@
# Фаза 76. След и реакция
## Зависимости
- [Фаза 75](75-gradebook-ui.md)
- [Фаза 43](../09-social/43-whisper.md)
- [Фаза 35](../07-inventory/35-appropriateness.md)
## Зачем
Журнал стыкуется с уже живыми системами и сам поднимает шум — без приказов игрока.
## Задачи
- [ ] Явно учесть в качестве/оценке уже существующие множители (учитель, тепло, учебник, голод,
шёпот) — тесты на каждый вклад
- [ ] Уместность формы: лёгкий модификатор оценки или только лог — число в `BehaviorDef`
- [ ] Плохой средний след / прогулы → `EventDef` info; веса к авто-вызову (12), если срез 12 в мире
- [ ] Классный (если назначен) пишет заметку в лог / учитывается в пороге — без кнопки игрока
- [ ] Контракт для 14: причина явки «болезнь» не зовёт вызов как прогул
## Тесты, без которых фаза не закрыта
- [ ] Шёпот на уроке ухудшает оценку относительно контроля при тех же прочих
- [ ] Нет учебника ухудшает относительно контроля
- [ ] Порог плохого следа эмитит notice
- [ ] Прогул с причиной «болезнь» (заглушка/флаг) не добавляет проступок вызова
- [ ] Нет API «вызови за двойку» от игрока
## Критерий готовности
- Слабый урок и прогулы видны в журнале и дают тост/вес к системе 12 без клика игрока
- Отфильтрованные тесты по Testing policy проходят
## Стоп
Не болезни и заражение. Не ручной журнал. Не отдельный срез weave.
+35
View File
@@ -0,0 +1,35 @@
Индекс срезов: [`../README.md`](../README.md).
## Срез 13. Учёба и журнал
Дизайн: [`grades.md`](../../design/13-grades/grades.md).
Оценка 2–5 и явка из живого урока и присутствия. Игрок журнал не правит (менеджер / симулятор
бога). Срез можно остановить после этапа A — оценки пишутся, даже если сводки класса ещё нет.
**Этап A — оценка.**
| Фаза | Статус | Зачем |
| --- | --- | --- |
| [73. Оценка с урока](73-lesson-marks.md) | 🔄 | 2–5 из качества урока, сейв |
**Этап B — явка.**
| Фаза | Статус | Зачем |
| --- | --- | --- |
| [74. Посещаемость](74-attendance.md) | ⬜ | Присутствовал / опоздал / отсутствовал |
**Этап C — экран.**
| Фаза | Статус | Зачем |
| --- | --- | --- |
| [75. Журнал на карточке](75-gradebook-ui.md) | ⬜ | HTTP, сводка класса |
**Этап D — связность.**
| Фаза | Статус | Зачем |
| --- | --- | --- |
| [76. След и реакция](76-grades-coupling.md) | ⬜ | Множители, тост, стык с вызовом/классным |
73 независима от 12 по записи оценок; 76 стыкуется с 12, если тот уже в мире. 74 стоит на 18;
75 — на 73 и 74; 76 — на 75.