# Журнал ревью Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md). ## Перепроверка среза 1 (после notices / portraits / Krea) - **Фазы:** 0–4 - **Проверен на:** `PENDING`, 2026-08-21 - **Пути:** `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 d087486..HEAD` по путям среза непустой (портреты, notices, Krea, сцена). Обещания фаз 0–4 целы. Усилен тест `localize()` под два `.manager`. Код не чинился. AppHost socket/API не гонялись (не трогали). Фазы 🔄/⬜ не закрывались. Что подтверждено (после дрейфа): - PixiJS нет в `package.json` и в клиентском коде. Overview: вкладки Карта/Люди, дерево, локация с четырьмя секциями, клиентский фильтр, `localize()`. Панель общих событий по-прежнему снята (фаза 8 / `near-term.md`); notices — модалки/тосты, не возврат ленты. - `SchoolWorker` — `LongRunning`, `MaxCatchUpSteps = 5`. Супервизор `World` не трогает. `SchoolContentUnavailableException` + `persist: false` + `RememberIncompatible`. Outbox `DropOldest`; `WaitToReadAsync` переносится. `modal.ts` резолвит явно; `.dialog--screen` — `height: fit-content`; `DefaultStartDate` UTC; меню патчит `card.update`. - Каталог/карта: last-wins, parent/abstract, патчи, связность, пустая комната, отказ без двора (15 зелёных в `MapValidation`/`ExamplePack`/`Inheritance`). `MapSnapshot` round-trip + size (4 зелёных в Protocol). Кодек / `protocol.ts` / `docs/protocol.md` — один снимок (протокол v10). - `core` в create заблокирован (`createSchoolDialog.test.ts`). Клиентский filter дерева и пустые секции локации — `gameScreen.test.ts`. Дописано на этом проходе: - `gameScreen.test.ts` — `localize()` смотрит overview (не manage): вкладки + четыре секции и empty-строки до/после смены языка Исправлено: - ничего в прод-коде: расхождений с дизайном среза 1, которые надо чинить, не нашлось. Открытое: - ветка не слита: основное дерево на `main`, но грязное (untracked срез 12 + dirty README/AGENTS) — без stash, ждёт чистый main. - соседний `review/slice-2-recheck` тоже ждёт чистый main — не сливать чужое. ## Перепроверка среза 1 (после одежды / сессии / общения) - **Фазы:** 0–4 - **Проверен на:** `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`. - `SchoolWorker` — `LongRunning`, свой `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--screen` — `height: fit-content`; `DefaultStartDate` UTC; `MapSnapshotSize` от сообщения; outbox `DropOldest`; `WaitToReadAsync` переносится между итерациями; меню патчит `card.update`. Дописано на этом проходе: - `gameScreen.test.ts` — клик по дереву фильтрует панель локации на клиенте - `gameScreen.test.ts` — `localize()` обновляет пустые секции локации - `ServiceabilityTests.MissingModFolder_LeavesTheSchoolUnstartedAndTheFileUntouched` Исправлено: - ничего: расхождений с дизайном среза 1, которые надо было чинить кодом, не нашлось. Открытое: - срезы 2–6 в сводке всё ещё на старых коммитах — дрейф после одежды/сессии/общения; не этот проход. - фазы 60 и 61 (портреты) в работе; ревью их не закрывало. ## Срез 1. Оболочка и карта - **Фазы:** 0–4 - **Проверен на:** `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`. - `SchoolWorker` — `LongRunning`, свой `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--screen` — `height: 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.