# Учёба и журнал Договорённость на срез после кабинета и классного, не текущий код. Урок: [`lesson-consequences.md`](../off-queue/lesson-consequences.md). Расписание: [`schedule.md`](../04-schedule/schedule.md). ИИ: [`ai.md`](../05-ai/ai.md). Кабинет: [`office.md`](../12-office/office.md). Общение: [`social.md`](../09-social/social.md). Одежда: [`inventory.md`](../07-inventory/inventory.md). Здоровье (следующий): [`health.md`](../14-health/health.md). Урок перестаёт быть только ростом навыка: появляется **оценка 2–5** и **посещаемость**. Игрок их **не ставит** — считает мир. Карточка и класс показывают журнал. Плохой след сам тянет внимание классного / авто-вызов из среза 12. ## Роль игрока: менеджер / симулятор бога Тот же жест, что в [`office.md`](../12-office/office.md): рамка школы (учителя, расписание, классный, правила), не ручной журнал и не «поставь пятёрку». Оценок от игрока нет. ## Что увидит игрок - На карточке ученика — журнал: недавние оценки по предметам (2–5) и отметки явки. - У класса — сводка (средний след / кто часто отсутствует), без таблицы на весь год в одной простыне. - Тост или авто-следствие, когда след совсем плохой (данные `BehaviorDef`), без кнопки «поставить двойку». ## На какие вопросы отвечает - Как из уже живого роста навыка на уроке получить школьную оценку 2–5. - Как посещаемость берётся из присутствия (узел = кабинет урока), а не из отдельного чекбокса. - Как журнал пишется в сейв и отдаётся по HTTP, не по сокету 20 Гц. - Какие уже существующие множители (учитель, тепло, учебник, шёпот, голод) входят в оценку. - Как плохой журнал стыкуется с классным и кабинетом директора **без** приказов игрока. ## Чего нет - Ручных оценок и правок журнала игроком. - Приказов «вызови Иванова» / «исправь оценку». - Электронного дневника родителя и облачной выгрузки. - Четвертных/годовых аттестаций как отдельной кампании (можно средний след, не «аттестация»). - Болезней — срез 14; здесь только шов «отсутствие → прогул», который 14 заполнит причиной. ## Что меняется в уже принятом | Было | Стало | Почему | | --- | --- | --- | | Урок пишет рост навыка и лог | Плюс оценка 2–5 по правилам | Иначе учёба не видна как школа | | «Кто в кабинете» видно | Плюс явка/прогул/опоздание в журнале | Присутствие уже есть | | Оценок нет ([`lesson-consequences`](../off-queue/lesson-consequences.md)) | Журнал есть | Этот срез | | Классный только для собраний (12) | Плюс реакция на плохой след (авто) | Связность систем | | Уместность одежды → тема разговора (9) | Может слегка двигать оценку / лог, если урок «на виду» — по данным | Связность без отдельного среза weave | ## Этап A — оценка с урока После осмысленного куска урока (не каждый тик): из тех же входов, что `LessonLearning.Gain`, мир пишет **одну** оценку 2–5 за урок (или за день-предмет — правило в `BehaviorDef`, ваниль: за слот урока, если ученик хотя бы частично присутствовал и рост мог бы идти). Шкала классическая: 2, 3, 4, 5. Пороги от нормализованного «качества урока» — данные, не UI. Нет учителя в кабинете → ваниль пишет **2** (`BehaviorDef.lessonMarkWhenNoTeacher`; `null` — пропуск оценки). Множитель 0 (например учебник) → качество 0 → оценка 2 по порогам. Сейв — на ученике, разреженно (последние N по предмету / общий потолок). После этапа школа целая: оценки пишутся, журнала на карточке может ещё не быть. ## Этап B — посещаемость На каждый слот урока класса: **присутствовал** (в узле кабинета, не идёт), **опоздал** (пришёл после начала — порог минут в данных), **отсутствовал**. Источник — присутствие и обязанность, не чекбокс. Пишется рядом с журналом оценок. Прогул без уважительной причины (здоровье — срез 14) может добавлять проступок / вес к авто-вызову, если 12 уже в мире — пороги в данных. После этапа явка есть даже без красивой сводки класса. ## Этап C — экран журнала Вкладка или блок на карточке: оценки и явка. Сводка класса в Управлении или у классного — коротко. HTTP через мейлбокс. Список людей журнал не раздувает. Локали RU/EN. ## Этап D — связность и реакция Явно в этом срезе, не «потом»: | Уже есть | Влияние на журнал | | --- | --- | | Учитель в кабинете, навык, тепло, учебник, голод, шёпот | Качество → оценка | | Уместность формы (7/9) | Лёгкий модификатор или только лог — число в `BehaviorDef` | | Плохие оценки / прогулы | Info-тост; вес к авто-вызову (12); классный «замечает» в логе | Игрок по-прежнему не ставит отметок. После этапа срез 13 закрыт; болезни подключат причину отсутствия в 14. ## Поток данных Оценки и явка — состояние человека / класса, считает симуляция + `HSchool.Ai` (качество урока). Карточка — HTTP. Тосты — `EventDef` (срез 11). Сокет присутствия не несёт весь журнал. Инварианты 1, 3, 4, 7: клиент не считает пятёрки; воркер пишет; симуляция без ASP.NET. ## Где живёт код Нового проекта нет. | Что | Куда | | --- | --- | | Пороги 2–5, потолки журнала | `BehaviorDef` / JSONC `core` | | Качество урока → оценка | `HSchool.Ai` (+ уже существующий `LessonLearning`) | | Явка из присутствия | `HSchool.Simulation` адаптер | | Сейв журнала | ростер / people рядом с человеком | | Карточка, сводка | Server + Client | | Тосты / стык с вызовом | EventDef + хуки среза 12 | ## Советы, которые стоит принять сразу - Не давать игроку редактировать оценку. - Не слать журнал по WS 20 Гц. - Одна оценка за урок (или явное правило), не спам каждую минуту. - Связность — таблица в этапе D, не размазанные «заодно» по фазам без тестов. - Уважительный пропуск (болезнь) — контракт для 14: вид явки или флаг причины. ## Заведомо не сейчас - Приказы игрока, ручной журнал. - ЕГЭ, олимпиады, переводные экзамены, родительский дневник онлайн. - Больной учитель как дыра в дне, точечный вызов родителя — [`fallout.md`](../15-fallout/fallout.md). - Болезни как система — [`health.md`](../14-health/health.md) (уже соседний срез). ## Зафиксировано этим разговором | Тема | Решение | | --- | --- | | Шкала | Классические **2–5** | | Приказы | Нет; менеджер / симулятор бога | | Weave | Отдельного среза нет; этап D внутри 13 | | Болезнь | Срез 14 | | Стоп | После A/B/C школа целая | | Ваниль | `core` |