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>
10 KiB
10 KiB
Журнал ревью
Сводка: ../reviewed.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 2nameSetId: 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
- Проверен на:
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_DoesNotTeleportJacketpersonCard.test.ts—hasLocker: trueпоказывает «есть шкафчик»
Исправлено:
- (кода симуляции PE не меняли: попытка починить звонок/очередь в раздевалке не закрыла красные PE-тесты; правки откатили)
Открыто:
PeBreak_CompletesChangeBeforeLesson,PeLesson_WearsPeThenReturnsToEveryday,AfterPeBreak_ModeExpectsEverydayкрасные уже на505bcc6без правок этого прохода. В 9:24 ученик в своей раздевалке, к 9:30 — в зале в футболке: 4ChangingSpot, звонок (duty 10 > одежда 6) уводит доChangeClothes; праздные в комнате не перерешаются, когда место освобождается. Это дрейф после разговоров/конфликта, не чинили молча в срезе 9.- Короткая уместность на вкладке «Одежда» по-прежнему прочерк: сервер не шлёт подпись
(
«к уроку»/«холодно»/«не по форме»). Молча расширять HTTP ревью не стало. - Короткой перемены (10 мин) с дальнего кабинета не хватает дойти и переодеться; тест погоды идёт через длинную после 3 урока.
Замечено рядом:
dressRulesPanelрисует ещё комбобоксы речи (срез 9) — четыре комбобокса одежды на месте.- Кадр часов остался 27 байт при PROTOCOL_VERSION 9.
- AppHost
PersonLogApiTests/DressRulesApiTestsв этом проходе не гонялись (хост).