# Журнал ревью — срез 10 Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md). ## Срез 10. Этап A — страховка (перепроверка) - **Фазы:** 56–57 - **Проверен на:** `68179de`, 2026-08-20 - **Пути:** `tests/HSchool.Architecture.Tests`, `src/HSchool.Client/package.json`, `src/HSchool.Client/scripts`, `AGENTS.md`, `README.md`, `docs/design/01-shell/projects.md` - **Итог:** перепроверка после `e2e7d30`: `git log e2e7d30..HEAD` по путям этапа A был пуст — код 56–57 не дрейфовал. Обещания на месте. Дописаны запреты People↛Schedule/Ai, Schedule↛People/Ai, Simulation↛Protocol; в `projects.md` у Simulation добавлен прямой `Schedule` (как в csproj). Этап B–C в этот проход не входил. - **Первая проверка:** `e2e7d30`, 2026-08-20. ### 56. Слои одной пачкой Все шесть пунктов «тестов, без которых фаза не закрыта» есть в `LayerBoundaryTests`. Копипасты `Assembly_DoesNotReference*` / `Sources_DoNotUseWallClock` из People/Ai/Schedule/Simulation.Tests по-прежнему отсутствуют. NetArchTest в solution нет; csproj не ссылается на Server/AppHost. README не называет школу пустой, `MaxSchools` — слоты игрока. Testing policy в `AGENTS.md` указывает на `HSchool.Architecture.Tests`. `dotnet test tests/HSchool.Architecture.Tests --filter FullyQualifiedName~LayerBoundaryTests`: 11 зелёных (было 9; плюс People↛Schedule/Ai и Schedule↛People/Ai; Simulation дополнительно без Protocol). Инвариант 4 и запрет `DateTime.Now` / `UtcNow` в шести библиотеках держатся; исходники ловят неиспользованный `using System.Net.Http`. `DateTime.UtcNow` есть в `HSchool.Server` (SwarmUI health) — хост, не слой. Дописано на перепроверке: - People не ссылается на Schedule и Ai - Schedule не ссылается на People и Ai - Simulation не ссылается на Protocol - `projects.md`: `Simulation → Ai, People, Content, Schedule` — граф отставал от csproj; запрет Simulation↛Schedule был бы красным и ложным ### 57. tsc в npm test `package.json` → `"test": "node ./scripts/run-test.mjs"` по-прежнему гоняет `tsc -b`, потом vitest, и не глотает код выхода typecheck на Windows. `"hschool-client": "file:"` в зависимостях нет. `test:watch` — только vitest. `AGENTS.md` это описывает. Скрипт `build` = `tsc -b && vite build`. Клиентские пути с `e2e7d30` не менялись; `src/HSchool.Client` в этом проходе не правился, `npm test` по Testing policy не гонялся. ### Открытое - `README.md` «What is deliberately missing» всё ещё пишет «No authentication» и что диалог создания не выбирает моды — ложь срезов 8 и 1, не этого этапа. - Дубликат ключа проверяется изолированным `tsc -p`, не `tsc -b` живого клиента; проводка `run-test.mjs` покрыта отдельно. - Этап B–C (58–59) — соседний проход, здесь не перепроверялся. ## Срез 10. Этапы B–C — работник, карточка и дамп - **Фазы:** 58–59 - **Проверен на:** `f4f726a`, 2026-08-20 - **Пути:** `src/HSchool.Server/Game/SchoolWorker.cs`, `src/HSchool.Server/Game/SchoolWorker.Mailbox.cs`, `src/HSchool.Server/Game/SchoolWorker.Tick.cs`, `src/HSchool.Server/Game/SchoolWorker.Persist.cs`, `src/HSchool.Server/Game/PersonCardReader.cs`, `src/HSchool.Server/Game/PersonCardReader.Overview.cs`, `src/HSchool.Server/Game/PersonCardReader.Inventory.cs`, `src/HSchool.Server/Game/PersonCardReader.Connections.cs`, `src/HSchool.Server/Game/SchoolDumpReader.cs`, `src/HSchool.Server/Api/DevEndpoints.cs`, `src/HSchool.Client/src/ui/personCard.ts`, `src/HSchool.Client/src/ui/personCardHost.ts`, `src/HSchool.Client/src/ui/personCardOverview.ts`, `src/HSchool.Client/src/ui/personCardApparel.ts`, `src/HSchool.Client/src/ui/personCardCarry.ts`, `src/HSchool.Client/src/ui/personCardNow.ts`, `src/HSchool.Client/src/ui/personCardConnections.ts`, `src/HSchool.Client/src/ui/personCardPortrait.ts`, `src/HSchool.Client/src/ui/personCardDom.ts`, `tests/HSchool.Server.Tests/SchoolWorkerShapeTests.cs`, `tests/HSchool.AppHost.Tests/ServiceabilityTests.cs` - **Итог:** обещания 58–59 на месте; тесты из списков фаз есть; код не чинился. Этап A (56–57) в этот проход не входил. 46 и 60 — **в работе на момент проверки**, как готовые не закрывались. ### Что проверено **58.** `SchoolWorker` — один `internal sealed partial` (почта / тик / запись), тот же `LongRunning`-поток и тот же mailbox; `lock` вокруг `School`/`World` нет. `PersonCardReader.Read(School, personId, locale)` — единственный публичный вход; вкладки в `partial`. Клиент: вкладки в модулях, `personCardHost.ts` по-прежнему `fetchPerson` / `fetchPersonLog`. `GameLoopService` не резался. Протокол и сейв не тронуты. Карточка: `PeopleApiTests.Card_IncludesFamilyAndLiveNeeds`, `InventoryApiTests.Card_IncludesWornAndCarried_ListDoesNot`, `Card_ConnectionsCarryOnlyThisPersonsOpinions`. UI: `personCard.test.ts` (вкладки, портрет, связи). Пауза: `PausingOneSchool_DoesNotStopAnother`. Форма воркера: `SchoolWorkerShapeTests` (прогнан, 1/1). **59.** `Dump_ReturnsPeopleNodesAndTimetable` нанимает математику, требует идущие часы, ждёт непустой `NodeId`, отдельно нужды и `Lessons` Mathematics. На паузе wait сразу красный, не висит. Неизвестный id — 404 `unknown-school`. JSON дампа и `SchoolDumpReader` не расширялись; ручка по-прежнему за `HSchool:AllowSaveReload`; HTTP кладёт `DumpSchool` в mailbox, `World` читает только работник. ### Что дописано - (нет — списки фаз закрыты существующими тестами) ### Что исправлено - (нет) ### Открытое - Нет. Этап A (56–57) проверяет соседний проход. 46 и 60 чужие 🔄.