2.6 KiB
2.6 KiB
Фаза 58. SchoolWorker и карточка
Зависимости
Нет. Поведение уже покрыто хостом и клиентскими тестами карточки. Этап A (56, 57) не обязан
быть зелёным, но резать удобнее после tsc в npm test.
Зачем
Три файла держат слишком много швов: почта работника, тик, запись; сборка карточки; вкладки DOM. Разрезать по существующим границам, не меняя поток и JSON.
Задачи
SchoolWorker—partial(почта / тик / запись или эквивалент по швам). Один тип, тот жеLongRunning-поток, тот же mailbox. БезlockвокругSchool/WorldPersonCardReader: публичный вход по-прежнемуRead(School, personId, locale); сборка вкладок — соседниеinternalhelper илиpartial, не второй публичный APIpersonCard.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 «заодно».