# Журнал ревью Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md). ## Срез 7. Этап A — данные и гардероб - **Фазы:** 29–31 - **Проверен на:** `d5547b7`, 2026-08-20 - **Пути:** `src/HSchool.Content/{CountryDef,ApparelDefs,CatalogLoader}.cs`, `src/HSchool.People/{DressGenerator,CountryClimate,RosterJson}.cs`, `src/HSchool.Server/{Game/SchoolStore.cs,Api/{ModEndpoints,SchoolEndpoints}.cs,Api/PeopleModels.cs}`, `src/HSchool.Client/src/ui/{createSchoolDialog.ts,personCard.ts}`, `tests/HSchool.Content.Tests/{CountryDefTests,ApparelDefTests,VanillaCoreTests}.cs`, `tests/HSchool.People.Tests/{DressGeneratorTests,GoldenRosterTests}.cs`, `tests/HSchool.AppHost.Tests/{SchoolApiTests,InventoryApiTests,GoldenSaveTests,ServiceabilityTests}.cs`, `src/HSchool.Client/src/ui/createSchoolDialog.test.ts` - **Итог:** все 17 тестов из списков фаз на месте; исправлен дубликат `peopleTabOverview` в `strings.ts` (ломал `npm run build`); одно замечание рядом про вкладки карточки Что подтверждено: - **29:** `CountryDef`/`ClimatePresetDef`; `namesets/` убран; ваниль `Russia` с двумя пресетами; каталог отдаёт `countries`; create принимает `countryId`, `unknown-country` на чужую страну; пресет от сида (`CreateSchool_WithTheSameSeed_GetsTheSameClimatePreset`); `nameSetId: Slavic` поднимается через `UpgradeOlderSave` (`GoldenSaveTests`, `legacy-no-native/`); формат без страны не стартует (`ServiceabilityTests`); диалог — страны и языки (`createSchoolDialog.test.ts`); золотой ростер обновлён (`GoldenRosterTests`). - **30:** поля `ThingDef`/`ColorDef`, слои как роли, мебель без `layers`; ванильная палитра и одежда в `VanillaCoreTests`; локали ru/en (`EveryVanillaLabel_ExistsInBothLocales`); учебник один def без `subject` на def. - **31:** `InventoryItem` с `def`/`color`/`condition`/`location`/`subject`; `DressGenerator` детерминирован (`DressGeneratorTests`, `InventoryApiTests.SameSeed_YieldsTheSameShirt`); слои без пересечения, платье на два слоя; пол/яркость/учебник/родители/соискатели/масса/Hauling; карточка отдаёт worn+carried, список — нет (`InventoryApiTests`); старый `people.json` без items одевается на reload (`PeopleJsonWithoutInventory_IsDressedOnReloadAndRewritten`); `HSchool.People`/`HSchool.Content` без ASP.NET; протокол не тронут. Дописано: - (нет новых тестов — списки фаз закрыты существующими) Исправлено: - Дубликат ключа `peopleTabOverview` в `strings.ts` (ru/en): vitest не ловит TS2300/TS1117, `npm run build` падал; ключ перенесён, `peopleTabPortrait` рядом с остальными вкладками. - Повтор `using HSchool.Content` в `SchoolStore.cs` (CS0105). Замечено рядом: - Карточка уже с вкладками (`personCard.ts`, фаза 31 обещала один свиток — позже по `../../design/07-inventory/inventory.md`); портрет/SwarmUI-строки в `strings.ts` — не этап A. - `ResolveClimatePreset` в `SchoolWorker` при reload без сохранённого пресета берёт первый пресет страны (`schoolSeed: 0`, `rollIfOmitted: false`) — по дизайну для legacy; create кидает пресет из `GameLoopService` до spawn. ## Срез 7. Этап B–C — климат, жизнь одежды и правила - **Фазы:** 32–37 - **Проверен на:** `5dcdee6`, 2026-08-20 - **Пути:** `src/HSchool.Simulation/{WeatherSampler,WarmthDecay,PlaceClimate,ApparelDresser,ApparelWear,MorningDress,PersonLogBrowser}.cs`, `src/HSchool.People/LockerAssigner.cs`, `src/HSchool.Content/{Appropriateness,ClimatePreset,DressRules}.cs`, `src/HSchool.Ai/ApparelGoals.cs`, `src/HSchool.Protocol`, `src/HSchool.Server/Api/{SchoolEndpoints,DressRulesModels}.cs`, `src/HSchool.Server/Game/{PersonCardReader,SchoolWorker}.cs`, `src/HSchool.Client/src/{ui/dressRulesPanel.ts,ui/managementPanel.ts,format/weather.ts,net/api.ts}`, `docs/protocol.md`, `tests/HSchool.Simulation.Tests`, `tests/HSchool.People.Tests/LockerAssignerTests.cs`, `tests/HSchool.Content.Tests/{ClimatePresetTests,AppropriatenessTests,ChangingRoomMapTests}.cs`, `tests/HSchool.AppHost.Tests/{PersonLogApiTests,DressRulesApiTests}.cs`, `tests/HSchool.Protocol.Tests`, `src/HSchool.Client/src/ui/{personCard,dressRulesPanel,managementPanel}.test.ts` - **Итог:** фазы 32–37 подтверждены; дописано 5 тестов симуляции; исправлены 2 бага переодевания и 2 регрессии тестов (не протокол) Что подтверждено: - **32–36:** погода детерминирована; skip выставляет утро; кадр часов v8 (27 байт) в трёх местах; `Warmth` и техник; шкафчики; износ и утренняя замена; уместность и PE; вкладки карточки и HTTP-лог. - **37:** вкладка «Правила» в «Управлении»; четыре комбобокса; GET/POST `dress-rules` с pending; `unknown-form`/`unknown-color` → `400`; правило с завтра; `ColorAllowed` для `whiteTopBlackBottom`; `dressRulesPanel.test.ts` — combobox без API до Apply, ошибка текстом; `ManagementPanel` не ломает штат и сетку. Дописано (32–36, прошлый проход): - `AppropriatenessSimulationTests.MorningDress_StagesPeKitForTodaysLesson` - `AppropriatenessSimulationTests.PeBreak_CompletesChangeBeforeLesson` - `AppropriatenessSimulationTests.PeLesson_WearsPeThenReturnsToEveryday` - `AppropriatenessSimulationTests.AfterPeBreak_ModeExpectsEveryday` - `PresenceTests.PhysicalEducationBeforeLesson_GoesToChangingRoomOnTheBreak` Исправлено: - `PresenceSystem`: ходьба по duty не обрывает активный `ChangeClothes`. - `ApparelPresence.ModeAt`: после перемены following PE — режим everyday. - `managementPanel.test.ts`: панель штата скрывается через `hidden`, не удаляется из DOM. - `PortraitApiTests.GetSwarmUiSettings_ReturnsPresets`: URL `/api/settings/swarmui` (CS1503). - `dressRulesPanel.ts`: неиспользуемый импорт `clear` — TS6133 на `npm run build`. Замечено рядом: - `PhysicalEducationBeforeLesson_…` не гоняет полный цикл «зал с формой» — это в `AppropriatenessSimulationTests.PeLesson_…`. - Портреты/SwarmUI — вне среза 7, но `PortraitApiTests` чинился, чтобы AppHost-сборка не падала.