Files
h-school/docs/phases/10-craft/reviewed.md
T
Leonid Pershin 820aea53fe Merge branch 'review/slice-10-a'
# Conflicts:
#	docs/phases/10-craft/reviewed.md
#	docs/phases/reviewed.md
2026-08-20 14:21:18 +03:00

87 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
- **Проверен на:** `e2e7d30`, 2026-08-20
- **Пути:** `tests/HSchool.Architecture.Tests`, `src/HSchool.Client/package.json`, `src/HSchool.Client/scripts`, `AGENTS.md`, `README.md`
- **Итог:** обещания 56–57 на месте; дописаны проверки графа из `projects.md` и запрет AppHost/NetArchTest в csproj; README приведён к `tsc`+vitest. Этап B (58) в работе на момент проверки; 59 в этот проход не входила.
- **В работе на момент проверки:** фаза 58 (этап B).
### 56. Слои одной пачкой
Все шесть пунктов «тестов, без которых фаза не закрыта» есть в `LayerBoundaryTests` и проходят (`dotnet test tests/HSchool.Architecture.Tests --filter FullyQualifiedName~LayerBoundaryTests`: 9 зелёных). Копипасты `Assembly_DoesNotReference*` / `Sources_DoNotUseWallClock` из People/Ai/Schedule/Simulation.Tests уехали. NetArchTest в solution нет; проект не ссылается на Server/AppHost. README больше не называет школу пустой, `MaxSchools` — слоты игрока. Testing policy в `AGENTS.md` указывает на `HSchool.Architecture.Tests`.
Дописано:
- Content не ссылается на People, Schedule, Ai (таблица `craft.md` их не требовала; граф `projects.md` — да)
- People/Schedule/Ai не ссылаются на Protocol и Simulation
- csproj Architecture.Tests не содержит Server, AppHost, NetArchTest
Инвариант 4 (Simulation без ASP.NET/сокетов) и запрет `DateTime.Now` / `UtcNow` в шести библиотеках держатся; исходники дополнительно ловят неиспользованный `using System.Net.Http`.
### 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` это описывает.
`npm --prefix src/HSchool.Client test -- scripts/npm-test.test.ts` на текущем дереве: tsc молча зелёный, 5 vitest зелёных (включая дубликат ключа в копии `strings.ts` → TS1117/TS2300 без `vite build`).
Дописано:
- скрипт `build` по-прежнему `tsc -b && vite build` (сам `vite build` не гонялся)
README теперь говорит, что `npm test` = tsc + Vitest. Оговорка в сводке «vitest зелёный при красном tsc» снята: её закрыла эта фаза.
### Открытое
- `README.md` «What is deliberately missing» всё ещё пишет «No authentication» и что диалог создания не выбирает моды — ложь срезов 8 и 1, не этого этапа.
- Дубликат ключа проверяется изолированным `tsc -p`, не `tsc -b` живого клиента; проводка `run-test.mjs` покрыта отдельно.
- Фаза 58 (этап B) в работе — не проверялась. Фаза 59 (этап C) в этот проход не входила.
## Срез 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 чужие 🔄.