Files
h-school/docs/phases/10-craft/reviewed.md
T
2026-08-20 17:24:39 +03:00

84 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Журнал ревью — срез 10
Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md).
## Срез 10. Этап A — страховка (перепроверка)
- **Фазы:** 5657
- **Проверен на:** `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 — работник, карточка и дамп
- **Фазы:** 5859
- **Проверен на:** `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 чужие 🔄.