Files
h-school/docs/phases/10-craft/58-worker-card-split.md
T

2.6 KiB
Raw Blame History

Фаза 58. SchoolWorker и карточка

Зависимости

Нет. Поведение уже покрыто хостом и клиентскими тестами карточки. Этап A (56, 57) не обязан быть зелёным, но резать удобнее после tsc в npm test.

Зачем

Три файла держат слишком много швов: почта работника, тик, запись; сборка карточки; вкладки DOM. Разрезать по существующим границам, не меняя поток и JSON.

Задачи

  • SchoolWorkerpartial (почта / тик / запись или эквивалент по швам). Один тип, тот же LongRunning-поток, тот же mailbox. Без lock вокруг School/World
  • PersonCardReader: публичный вход по-прежнему Read(School, personId, locale); сборка вкладок — соседние internal helper или partial, не второй публичный API
  • personCard.ts: вкладки в отдельных модулях; personCardHost.ts по-прежнему fetch
  • Инверсия Game → типы из HSchool.Server.Api не входит: using можно оставить

Тесты, без которых фаза не закрыта

  • Карточка: нужды, одежда/ноша, связи — как сейчас (PeopleApiTests, InventoryApiTests, Card_ConnectionsCarryOnlyThisPersonsOpinions)
  • personCard.test.ts (вкладки, портрет-кнопки, связи) проходит
  • Пауза одной школы не останавливает другую (существующий хостовый факт)
  • Дамп школы по-прежнему 200 на известный id (Dump_ReturnsPeopleNodesAndTimetable — текущий оракул, ужесточение — фаза 59)
  • SchoolWorker остаётся одним internal sealed типом (рефлексия или исходник: нет второго worker-класса с mailbox)

Критерий готовности

  • Открыть школу, карточку, паузу — как вчера
  • Нет нового публичного фасада карточки и нет второго потока на школу

Стоп

Не менять инвариант 3. Не инвертировать DTO. Не трогать протокол, сейв, SwarmUI. Не резать GameLoopService «заодно».