Files

125 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Журнал ревью
Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md).
## Срез 7. Этап A — данные и гардероб
- **Фазы:** 2931
- **Проверен на:** `5468852`, 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 — климат, жизнь одежды и правила (перепроверка)
- **Фазы:** 3237
- **Проверен на:** `549634b`, 2026-08-20 — **перепроверка** после `5dcdee6`
- **Пути:** `src/HSchool.Simulation/{WeatherSampler,WarmthDecay,PlaceClimate,ApparelDresser,ApparelWear,MorningDress,PersonLogBrowser,School}.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.Tick}.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 после дрейфа (сессия, разговоры, сплит воркера и карточки, протокол v9)
в целом держатся; дописан тест «куртка не телепортируется»; три PE-теста прошлого прохода
красные на текущем main — открыто
Что подтверждено:
- **32:** тот же пресет+сид+время → та же улица; январь холоднее июля; ниже нуля снег;
skip ставит утро понедельника, не субботу; naked на морозе теряет `Warmth`, дома возвращает;
кадр часов 27 байт (tenths + precipitation) в `ProtocolCodec` / `protocol.ts` / `docs/protocol.md`;
клиент рисует кадр, не считает месяц (`weather.test.ts`); Hello со старой версией отваливается.
Версия протокола сейчас 9 (круги разговоров), раскладка часов не менялась.
- **33:** кабинет без техника теплее улицы и холоднее, чем с техником; в июле техник держит
ниже улицы; две раздевалки, граф связен; 10 шкафчиков — старшие девочки; мальчик не в
девичьей; выпускник слот не держит; `ChangingSpot` (4) отдельно от шкафчиков.
- **34:** час на теле снижает прочность на `ApparelWearPerHour`; сумка и шкафчик нет;
skip через ночь = прожитая ночь; подпись порогов с сервера, клиент не считает.
- **35:** «без яркого» утром; короткая форма и возраст; PE: доходят до своей раздевалки
(`PeBreak_PupilReachesOwnChangingRoom`); мальчик не в женской; без шкафчика снятое в сумку;
мороз — `Outer`, в июле шубы нет; pending правило с завтра. Куртка при смене погоды не
телепортируется (урок держит, длинная перемена — ходьба и смена).
- **36:** лог не в карточке; страницы не пересекаются; 404 unknown-person; после 6:00 вчера
пусто; вкладка «Одежда» без таблицы лога; «Сейчас» вне школы — «дома».
- **37:** GET дефолт обычная/без яркого; POST unknown-form/color → 400; вкладка не ломает штат
и сетку; четыре комбобокса одежды на месте (речь среза 9 рядом, не вместо).
Дописано:
- `AppropriatenessSimulationTests.WeatherDrop_WalksToChangingRoom_DoesNotTeleportJacket`
- `personCard.test.ts``hasLocker: true` показывает «есть шкафчик»
Исправлено:
- (кода симуляции PE не меняли: попытка починить звонок/очередь в раздевалке не закрыла
красные PE-тесты; правки откатили)
Открыто:
- `PeBreak_CompletesChangeBeforeLesson`, `PeLesson_WearsPeThenReturnsToEveryday`,
`AfterPeBreak_ModeExpectsEveryday` красные уже на `505bcc6` без правок этого прохода.
В 9:24 ученик в своей раздевалке, к 9:30 — в зале в футболке: 4 `ChangingSpot`, звонок
(duty 10 > одежда 6) уводит до `ChangeClothes`; праздные в комнате не перерешаются, когда
место освобождается. Это дрейф после разговоров/конфликта, не чинили молча в срезе 9.
- Короткая уместность на вкладке «Одежда» по-прежнему прочерк: сервер не шлёт подпись
(`«к уроку»` / `«холодно»` / `«не по форме»`). Молча расширять HTTP ревью не стало.
- Короткой перемены (10 мин) с дальнего кабинета не хватает дойти и переодеться; тест погоды
идёт через длинную после 3 урока.
Замечено рядом:
- `dressRulesPanel` рисует ещё комбобоксы речи (срез 9) — четыре комбобокса одежды на месте.
- Кадр часов остался 27 байт при PROTOCOL_VERSION 9.
- AppHost `PersonLogApiTests` / `DressRulesApiTests` в этом проходе не гонялись (хост).