90 lines
6.4 KiB
Markdown
90 lines
6.4 KiB
Markdown
# Журнал ревью
|
||
|
||
Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md).
|
||
|
||
## Перепроверка среза 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.
|