Files
h-school/docs/design/12-office/office.md
T
Leonid PershinandCursor 362244fcbd
ci / server (push) Failing after 3m43s
ci / client (push) Successful in 21s
Register slice 15 fallout and clarify manager role in office design.
EOF

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-21 11:55:09 +03:00

15 KiB
Raw Blame History

Кабинет директора и классный

Договорённость на срез после событий и общения, не текущий код. Люди: people.md. Штат: staffing.md. ИИ: ai.md. Общение: social.md. События: events.md. Урок: lesson-consequences.md.

У школы появляется власть на карте: проступок помнится коротко, ученика сами гонят к директору — с очередью у кабинета и ожиданием в коридоре. У класса появляется классный (учитель из Управления); он редко оставляет класс после уроков на родительское собрание, и родители реально входят на карту.

Игрок назначает классных и смотрит. Кнопки «вызвать к директору» и «назначить собрание» нет: авто и ИИ классного.

Роль игрока: менеджер / симулятор бога

Экран школы — менеджер, не контроллер юнитов. Игрок задаёт рамку (штат, расписание, правила, классные) и смотрит, как мир сам ходит, ссорится и вызывается к директору. Приказов «этому ученику — сюда» нет и в соседних срезах учёбы и здоровья не появляется.

Что увидит игрок

  • В Управлении — у каждого класса слот «классный»: только из нанятых учителей; снять / переназначить.
  • На карточке ученика — небольшой список недавних проступков (несколько последних), не шкала дисциплины и не журнал оценок.
  • После драки / выговора система может отправить ученика к директору: он идёт, если кабинет занят — ждёт в коридоре у входа, внутри — очередь по одному.
  • Редко после последнего урока класса: классный и часть родителей в кабинете класса; тост, что собрание идёт.

На какие вопросы отвечает

  • Как приказ «к директору» живёт в том же ИИ, что урок (сильная обязанность), без телепорта.
  • Как очередь у PrincipalsOffice не ломает присутствие и детерминизм.
  • Кто такой классный без нового PositionDef.
  • Как родитель впервые получает узел на карте и уходит после собрания.
  • Что видит игрок без кнопки вмешательства.

Чего нет

  • Кнопки игрока «вызвать» / «на собрание».
  • Шкалы дисциплины 0…100 и дневника оценок.
  • Травм, медкабинета как больницы, выговора в отдельной вкладке «Правила».
  • Еженедельного календаря собраний и явки 100%.
  • Завуча как отдельной роли в этом срезе.
  • Оценок и приказов «отправить домой».

Что меняется в уже принятом

Было Стало Почему
Игрок только наблюдает; приказов нет (ai.md) Наблюдает вызовы; назначает классного Классный — единственное решение игрока в срезе
Драка → выговор на месте; кабинет директора не заводим (social.md) Часть проступков → авто-вызов, очередь Иначе выговор пустой
Родители без места на карте (people.md) На собрании получают узел и цель Задел с ростера наконец используется
SchoolClass — id, год, литера, кабинет, ученики Плюс classTeacherId (учитель или пусто) Не должность, слот на классе
EventDef: утро, звонок, сбой генерации Плюс вызов / собрание (info) Игрок видит факт, не только строку в локации
«Родителя вызвать — отдельный сюжет» Собрание классного; не вызов одного родителя к директору Узкий scope

Этап A — классный

У SchoolClass опциональный id учителя. Назначить / снять — HTTP через мейлбокс школы (как предметы), только хозяин. Кандидаты: нанятые с должностью Teacher. Один учитель — классный у нескольких классов (ваниль не запрещает). Пустой слот: собраний нет, класс живёт как сейчас.

Карточка класса / строка в Управлении показывает имя. Сейв — в people.json / ростере рядом с классами.

После этапа школа целая: классных можно расставить, вызовов ещё нет.

Этап B — проступки и кабинет

Память

На человеке короткий список недавних проступков (ваниль: несколько последних, потолок в BehaviorDef, старые вытесняются). Запись: вид (ссора / драка / выговор / …), когда (игровые часы или день+слот), опционально id второго участника. Не шкала. Писать при содержательном событии (тот же шов, что мнения), не каждый тик.

Карточка ученика (вкладка «Сейчас» или рядом) показывает список. HTTP через мейлбокс.

Вызов — только авто

Игрок не жмёт. Триггер из уже живых фактов: обрыв драки сотрудником, выговор учителя, при необходимости грубый срыв с политикой речи — веса и пороги в BehaviorDef, не if по фамилии.

Состояние «вызван» — временное (флаг / обязанность), пока не дошёл, не отбыл приём и не Sorвался день. Без долгой шкалы «дисциплина».

Путь и очередь

Кабинет — PrincipalsOffice (уже в core). Вызванный идёт обычной ходьбой.

  • Директор занят приёмом или отсутствует → очередь: ждут в коридоре у связанного узла (ребро карты к кабинету), не толпятся внутри.
  • В кабинете — один на приём. Очередь FIFO по id вызова (детерминизм: стабильный порядок).
  • Приём — короткое действие (выговор / разговор), мнение о директоре падает, проступок может дописаться; затем ученик свободен (обязанность урока снова тянет).
  • Skip пустого времени не оставляет вечный «вызван» без разрешения: утро сбрасывает зависшее или доигрывает по правилу в фазе.

Директор без найма: вызов не стартует (или гаснет) — порог в данных, не паника.

Тост info: кого вызвали (через EventDef). Протокол присутствия: действие / узел достаточно; отдельное поле «очередь» в кадре — только если без него UI врёт. Версию сокета бампит коммит фазы, не этот документ.

После этапа школа целая без собраний: драки гонят к директору, очередь видна в коридоре.

Этап C — родительские собрания

Только ИИ классного, редко. Условия (числа в BehaviorDef):

  • у класса есть классный;
  • рабочий день, после последнего урока этого класса;
  • классный сегодня в школе;
  • бросок редкости от сида класса и дня.

Классный остаётся в кабинете класса (homeroom). Часть родителей учеников класса приходит: получают место (двор → путь → кабинет), как обычная ходьба. Не 100% семей — доля и «кто» из сида. Учитель-родитель этого класса, если уже в школе, может войти в собрание без второго человека.

Собрание — действие/кружок ограниченной длины; мнения семья↔классный слегка двигаются; тост info. После — родители уходят с карты (снова «вне школы»), классный свободен.

Игрок собрание не назначает и не отменяет.

После этапа школа целая целиком по срезу.

Поток данных

Что Где
classTeacherId ростер / сейв; HTTP Управление
Список проступков на человеке; сейв; карточка HTTP
Очередь вызовов состояние школы на потоке воркера; не клиент
Выбор «вызвать» / «собрание» HSchool.Ai + адаптер симуляции
Ходьба родителей те же узлы и travelMinutes, что у всех
Тосты EventDef + доска уведомлений среза 11
Назначение классного намерение HTTP → мейлбокс (инвариант 3, 7)

Инвариант 1: клиент не решает, кого вызвать. Инвариант 4: симуляция не знает тосты и ASP.NET.

Где живёт код

Нового проекта нет.

Что Куда
Поля BehaviorDef, триггеры, потолки списка HSchool.Content + JSONC core
SchoolClass + классный HSchool.People + сейв
Обязанность вызова, очередь, собрание HSchool.Ai + адаптер в HSchool.Simulation
HTTP назначение, карточка проступков HSchool.Server + клиент Управление / карточка
EventDef вызова и собрания core + шов среза 11
Присутствие уже есть; бамп протокола только если нужен новый статус

Советы, которые стоит принять сразу

  • Не заводить PositionDef «классный» — слот на классе, как предметы у учителя.
  • Не телепортировать к директору и не пихать очередь внутрь кабинета.
  • Не давать игроку кнопку вызова: согласие на «только авто».
  • Не шкалу дисциплины рядом со списком — два представления одной идеи путают.
  • Родитель на карте только на время собрания (этот срез), не «живёт в школе».
  • Очередь и вызовы считает поток школы; HTTP их не трогает.
  • Редкость собраний — данные, не магическая константа в UI.

Заведомо не сейчас

  • Кнопка «вызвать к директору» / «назначить собрание».
  • Оценки и журнал — grades.md; болезни — health.md.
  • Вызов одного родителя, травмы драки — fallout.md.
  • Завуч, рассадка, настроение-нужда.
  • Календарь собраний на четверть.

Зафиксировано этим разговором

Тема Решение
Форма Именованный срез 12, не off-queue
Вызов Только авто; игрок не жмёт
Поведение Временный «вызван» + короткий список недавних проступков
Классный Только из учителей; Управление
Собрание Только ИИ классного, редко, после последнего урока класса
Родители / вызов Реально ходят по карте; у директора очередь, ждут в коридоре
Ваниль core, не отдельный пак
Стоп После A — классные; после B — кабинет без собраний
Протокол Бамп только если фазе нужен новый статус присутствия
Оценки / шкала дисциплины Не в срезе
Роль игрока Менеджер / симулятор бога: рамка школы, не приказы юнитам