Files
h-school/docs/phases/01-shell/reviewed.md
T
2026-08-20 14:43:15 +03:00

6.4 KiB
Raw Blame History

Журнал ревью

Сводка: ../reviewed.md. Индекс среза: README.md.

Перепроверка среза 1 (после одежды / сессии / общения)

  • Фазы: 04
  • Проверен на: d087486, 2026-08-20
  • Пути: src/HSchool.Client, src/HSchool.Protocol, src/HSchool.Content, src/HSchool.Server/Game, src/HSchool.Server/Api/ModEndpoints.cs, src/HSchool.Server/Api/SchoolEndpoints.cs, src/HSchool.Server/Net, tests/HSchool.Content.Tests, tests/HSchool.Protocol.Tests, tests/HSchool.AppHost.Tests/SchoolApiTests.cs, tests/HSchool.AppHost.Tests/GameSocketTests.cs, tests/HSchool.AppHost.Tests/ServiceabilityTests.cs
  • Итог: перепроверка; git log 418a4ea..HEAD по путям среза непустой (одежда, сессия, общение, ремесло). Обещания фаз 0–4 целы. Дописаны 3 теста. Код не чинился. Фазы 60 и 61 не закрывались.

Что подтверждено (после дрейфа):

  • PixiJS нет в package.json и в клиентском коде. Дерево карты, пять секций локации, клиентский фильтр, localize(). Оболочка — вкладки Карта/Люди; отказ от ленты событий в фазе 1 и design/near-term.md.
  • SchoolWorkerLongRunning, свой World, аккумулятор MaxCatchUpSteps = 5. Супервизор таблицу держит и World не трогает (фаза 58 разрезала файл, не поток). Сейв на create/shutdown/SaveInterval; ReloadFromDisk_RestoresAPausedClock, PausingOneSchool_DoesNotStopAnother.
  • Каталог/карта: JSONC, last-wins, parent/abstract, патчи, связность, пустая комната, отказ без двора, ванильная раскладка. Нет папки мода — школу не стартовать, файл не трогать (SchoolContentUnavailableException, persist: false, RememberIncompatible).
  • GET /api/mods, каталог ?lang=, create с картой и модами, снимок при OpenSchool. core в диалоге нельзя снять. Кодек, protocol.ts и docs/protocol.md — один MapSnapshot (протокол v9, бамп поздних срезов, раскладка снимка та же).
  • modal.ts резолвит промис явно; .dialog--screenheight: fit-content; DefaultStartDate UTC; MapSnapshotSize от сообщения; outbox DropOldest; WaitToReadAsync переносится между итерациями; меню патчит card.update.

Дописано на этом проходе:

  • gameScreen.test.ts — клик по дереву фильтрует панель локации на клиенте
  • gameScreen.test.tslocalize() обновляет пустые секции локации
  • ServiceabilityTests.MissingModFolder_LeavesTheSchoolUnstartedAndTheFileUntouched

Исправлено:

  • ничего: расхождений с дизайном среза 1, которые надо было чинить кодом, не нашлось.

Открытое:

  • срезы 2–6 в сводке всё ещё на старых коммитах — дрейф после одежды/сессии/общения; не этот проход.
  • фазы 60 и 61 (портреты) в работе; ревью их не закрывало.

Срез 1. Оболочка и карта

  • Фазы: 04
  • Проверен на: 418a4ea, 2026-08-20
  • Пути: src/HSchool.Client, src/HSchool.Protocol, src/HSchool.Content, src/HSchool.Server/Game, src/HSchool.Server/Api/ModEndpoints.cs, src/HSchool.Server/Api/SchoolEndpoints.cs, src/HSchool.Server/Net, tests/HSchool.Content.Tests, tests/HSchool.Protocol.Tests, tests/HSchool.AppHost.Tests/SchoolApiTests.cs, tests/HSchool.AppHost.Tests/GameSocketTests.cs
  • Итог: обещания фаз 0–4 целы; дописаны 3 теста; протокол v7 в трёх местах

Что подтверждено:

  • PixiJS нет; дерево карты, пять секций локации, клиентский фильтр, localize(). Оболочка — вкладки Карта/Люди, не три панели; отказ от ленты событий записан в фазе 1 и в design/near-term.md.
  • SchoolWorkerLongRunning, свой World, аккумулятор с потолком 5. Супервизор таблицу держит и World не трогает. Сейв на create/shutdown/SaveIntervalSeconds; ReloadFromDisk_RestoresAPausedClock, PausingOneSchool_DoesNotStopAnother.
  • Восемь тестов каталога/карты в HSchool.Content.Tests. Ванильная раскладка валидна. Пропавшая папка мода не стартует школу и файл не трогает.
  • GET /api/mods, каталог, create с картой и модами, снимок при OpenSchool. core в диалоге создания нельзя снять. Кодек, protocol.ts и docs/protocol.md описывают один MapSnapshot.
  • modal.ts резолвит промис явно; .dialog--screenheight: fit-content; DefaultStartDate UTC; MapSnapshotSize от сообщения; outbox DropOldest; WaitToReadAsync переносится между итерациями; меню патчит card.update.
  • Родной язык — HTTP/JSON без бампа протокола. Старый сейв без поля берёт первый язык набора, не бросает кубик (ReloadWithoutASavedPick_TakesTheFirstLanguageInsteadOfRolling).

Дописано:

  • SchoolApiTests.Catalog_WithAnUnknownMod_IsRejected
  • SchoolApiTests.ModId_ThatEscapesTheModsFolder_IsRejectedOnBothEndpoints
  • SkillGrantTests.ReloadWithoutASavedPick_TakesTheFirstLanguageInsteadOfRolling

Исправлено:

  • Два поля speedIndex в клиентском School (api.ts) — артефакт мержа фазы 26; vitest не ловил, npm run build падал с TS2300.