# Журнал ревью Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md). ## Срез 7. Этап A — данные и гардероб - **Фазы:** 29–31 - **Проверен на:** `5df341f`, 2026-08-20 — **перепроверка** после `d5547b7` - **Пути:** `src/HSchool.Content/{ApparelDefs,CatalogLoader}.cs`, `src/HSchool.People/{DressGenerator,CountryClimate,RosterJson}.cs`, `src/HSchool.Server/{Game/SchoolStore.cs,Game/SchoolWorker.Tick.cs,Api/{ModEndpoints,SchoolEndpoints}.cs,Api/PeopleModels.cs}`, `src/HSchool.Client/src/ui/{createSchoolDialog.ts,personCard.ts,personCardApparel.ts,personCardCarry.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` - **Итог:** обещания 29–31 после дрейфа (сессия, владельцы, UpperUnderwear, сплит карточки) в целом держатся; снятый в `660340c` подъём `nameSetId: Slavic` возвращён; золотой сейв с абстрактным `Underwear` снова одевается. B–C не трогался. Что подтверждено: - **29:** `CountryDef`/`ClimatePresetDef`; `namesets/` нет; ваниль `Russia` с двумя пресетами; каталог отдаёт `countries`, не `nameSets`; create — `countryId`, `unknown-country`; пресет от сида (`CreateSchool_WithTheSameSeed_GetsTheSameClimatePreset`); формат 3 без `countryId` не стартует (`ServiceabilityTests`); диалог — страны и языки; золотой ростер (`GoldenRosterTests`). `UpgradeOlderSave` снова в `SchoolStore`: format 2 `nameSetId: Slavic` поднимается как `Russia` + первый пресет в памяти, файл не переписывается, пока школа сама не сохранится (`GoldenSaveTests`, `legacy-no-native/`). - **30:** поля `ThingDef`/`ColorDef`, слои включая `UpperUnderwear`; мебель без `layers`; каталог редактора без футболки/учебника; ваниль и локали (`VanillaCoreTests`); учебник — один def без предмета на def. - **31:** `InventoryItem`; `DressGenerator` от `ApparelSalt`; слои без пересечения, платье, пол/яркость/учебник/родители/соискатели/масса/`Hauling`; карточка worn+carried, список — нет; пустой `people.json` одевается на reload. Протокол этапа A не тронут; `HSchool.People`/`Content` без ASP.NET. Дописано: - `GoldenSaveTests.CurrentFormatSave_LoadsTheSamePeopleAndTime` — возвращён (снят в фазе 39) - `GoldenSaveTests.SaveWithoutNativeLanguage_LoadsWithoutReshuffling` — Slavic-сейв стартует, одежда дописывается - `DressGeneratorTests.AbstractUnderwearInASave_IsRedressedOnEnsure` Исправлено: - `660340c` выкинул `NameSetId`/`UpgradeOlderSave` и сузил `CanStart` до format == 3: старые сейвы с `nameSetId: Slavic` не стартовали. Подъём возвращён; `CanStart` — format ≤ 3 и непустой `countryId`. - После `UpperUnderwear` золотой `people.json` носил абстрактный `Underwear`, и `RequireKnownApparel` не пускал школу. `NeedsDressing`/`EnsureDressed` переодевают неизвестный или абстрактный def тем же сидом. Замечено рядом: - Карточка с вкладками — этап C (фаза 36); сплит в `personCardApparel.ts` / `personCardCarry.ts`. - `ResolveClimatePreset` на reload без сохранённого пресета берёт первый пресет страны. - POST `nameSetId` по-прежнему игнорируется (поля нет на create); пустой `countryId` на create берёт первую страну каталога — это create, не сейв. - Этап B–C в этом проходе не проверялся. ## Срез 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-сборка не падала.