Files
h-school/docs/phases/07-inventory/reviewed.md
T
Leonid PershinandCursor 118d1815d8 Record slice 7 B-C recheck after later slices drifted climate and dress paths.
Adds a weather-drop walk test so a jacket is not teleported onto the body; PE change regressions already red on main stay open.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 16:17:45 +03:00

10 KiB
Raw Blame History

Журнал ревью

Сводка: ../reviewed.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
  • Проверен на: 505bcc6, 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.tshasLocker: 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 в этом проходе не гонялись (хост).