125 lines
10 KiB
Markdown
125 lines
10 KiB
Markdown
# Журнал ревью
|
||
|
||
Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md).
|
||
|
||
## Срез 7. Этап A — данные и гардероб
|
||
|
||
- **Фазы:** 29–31
|
||
- **Проверен на:** `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 — климат, жизнь одежды и правила (перепроверка)
|
||
|
||
- **Фазы:** 32–37
|
||
- **Проверен на:** `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` в этом проходе не гонялись (хост).
|