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

6.9 KiB
Raw Blame History

Журнал ревью — срез 10

Сводка: ../reviewed.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 чужие 🔄.