87 lines
6.9 KiB
Markdown
87 lines
6.9 KiB
Markdown
# Журнал ревью — срез 10
|
||
|
||
Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md).
|
||
|
||
## Срез 10. Этап A — страховка
|
||
|
||
- **Фазы:** 56–57
|
||
- **Проверен на:** `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 — работник, карточка и дамп
|
||
|
||
- **Фазы:** 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 чужие 🔄.
|