Merge main into review/slice-7bc-climate-wear; journal 32-37.
Integrate stage A review from main; resolve reviewed.md; fix dressRulesPanel unused import, managementPanel test, PortraitApiTests URL.
This commit is contained in:
+78
-28
@@ -256,50 +256,100 @@
|
||||
|
||||
- `Dump_ReturnsPeopleNodesAndTimetable` принимает `NodeId is not null || Needs.Count > 0`.
|
||||
Нужды есть у всех, так что узлы на кампусе не проверяются. Усиливать до явки — срез 5.
|
||||
- Срез 7, фаза 37 — в работе на момент проверки B–C; этап A проверяет соседний ревьюер.
|
||||
|
||||
## Срез 7. Этап B–C — климат и жизнь одежды (без 37)
|
||||
## Срез 7. Этап A — данные и гардероб
|
||||
|
||||
- **Фазы:** 32–36
|
||||
- **Проверен на:** `e461a9f`, 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,PeopleModels}.cs`,
|
||||
`src/HSchool.Server/Game/PersonCardReader.cs`, `src/HSchool.Client/src/{ui/personCard.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.test.ts`
|
||||
- **Итог:** фазы 32–36 подтверждены; дописано 5 тестов; исправлены 2 бага переодевания; фаза 37 в работе
|
||||
- **Фазы:** 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`); одно замечание рядом про вкладки карточки
|
||||
|
||||
Что подтверждено:
|
||||
|
||||
- Погода детерминирована от пресета, сида и времени; skip выставляет утро; кадр часов v8 (27 байт) в
|
||||
`ProtocolCodec`, `protocol.ts`, `docs/protocol.md`; клиент рисует температуру с wire, не из месяца.
|
||||
- `Warmth` декейит на морозе, дома восстанавливается; черты `HeatLoving`/`ColdLoving` несовместимы.
|
||||
- Техник держит комфорт; двор = улица, кабинет теплее двора без техника; две раздевалки на ванили;
|
||||
шкафчики по полу/старшинству, пересчёт на 1 сентября.
|
||||
- Износ только на кампусе, skip/утро заменяют ветхое; утренняя выдача пишет `apparel-replaced`.
|
||||
- Уместность: утро, PE, погода, правила «с завтра» через API; карточка — вкладки и HTTP-лог с 6:00.
|
||||
- `HSchool.Simulation` без ASP.NET; `dotnet test` и Vitest (`personCard`, `weather`, `protocol`) зелёные.
|
||||
- **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/inventory.md`); портрет/SwarmUI-строки в `strings.ts` — не этап A.
|
||||
- `ResolveClimatePreset` в `SchoolWorker` при reload без сохранённого пресета берёт первый
|
||||
пресет страны (`schoolSeed: 0`, `rollIfOmitted: false`) — по дизайну для legacy; create
|
||||
кидает пресет из `GameLoopService` до spawn.
|
||||
|
||||
## Срез 7. Этап B–C — климат, жизнь одежды и правила
|
||||
|
||||
- **Фазы:** 32–37
|
||||
- **Проверен на:** `<commit>`, 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` (переименован с ожидания зала на перемене)
|
||||
- `PresenceTests.PhysicalEducationBeforeLesson_GoesToChangingRoomOnTheBreak`
|
||||
|
||||
Исправлено:
|
||||
|
||||
- `PresenceSystem`: ходьба по duty больше не обрывает активный `ChangeClothes` — форма успевает надеться до
|
||||
звонка.
|
||||
- `ApparelPresence.ModeAt`: после перемены following PE режим «everyday», иначе `PeForbidden` не
|
||||
поднимался и форму не снимали.
|
||||
- `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`.
|
||||
|
||||
Замечено рядом:
|
||||
|
||||
- Фаза 37 (вкладка «Правила», UI смены дресс-кода) — в работе, не проверялась.
|
||||
- `PhysicalEducationBeforeLesson_…` в `PresenceTests` не гоняет полный цикл «зал с формой» — это в
|
||||
- `PhysicalEducationBeforeLesson_…` не гоняет полный цикл «зал с формой» — это в
|
||||
`AppropriatenessSimulationTests.PeLesson_…`.
|
||||
- Портреты/SwarmUI — вне среза 7, но `PortraitApiTests` чинился, чтобы AppHost-сборка не падала.
|
||||
|
||||
Reference in New Issue
Block a user