Files

12 KiB
Raw Permalink Blame History

Журнал ревью

Сводка: ../reviewed.md. Индекс среза: README.md.

Срез 2. Люди

  • Фазы: 59
  • Проверен на: bdb1253, 2026-08-20
  • Пути: src/HSchool.People, src/HSchool.Content/PeopleDefs.cs, src/HSchool.Simulation/RosterSpawner.cs, src/HSchool.Simulation/School.cs, src/HSchool.Server/Api/SchoolEndpoints.cs, src/HSchool.Server/Game/PersonCardReader.cs, src/HSchool.Server/Game/SchoolWorker.cs, src/HSchool.Client/src/ui/peoplePanel.ts, src/HSchool.Client/src/ui/personCard.ts, tests/HSchool.People.Tests, tests/HSchool.Content.Tests/PeopleDefTests.cs, tests/HSchool.Simulation.Tests/PeopleInSchoolTests.cs, tests/HSchool.AppHost.Tests/PeopleApiTests.cs, tests/HSchool.AppHost.Tests/SchoolSeedTests.cs
  • Итог: обещания фаз 5–9 целы; починены два API-теста, дописан один на reload после набора

Что подтверждено:

  • Дефы человека: разбор, наследование, патч, неизвестная ссылка, склонение, мод со своим набором.
  • Генератор: шесть тестов списка фазы, без Arch/ASP.NET/DateTime.Now. Неполные семьи 5–10%. Сид — поле школы, не school.Id; хостовые тесты, которым нужен состав, передают сид явно.
  • Одиннадцать кабинетов, сущности в World, PersistPeople только при смене состава. Штат при создании пуст — это фаза 11.
  • Список с опубликованного снимка, карточка через TaskCompletionSource. Фильтры, пейджер, семейные ссылки, всё через t(...). Вкладка рядом с картой, не нижний ряд — так записано в фазе 8 и в ../../design/02-people/people.md.
  • Выпуск старшей имеющейся, вместимость, семьи через поколения, reload после набора.

Дописано:

  • PeopleApiTests.ReloadAfterTheYearlyIntake_RestoresTheNewComposition — ждёт 1 сентября и требует состав после набора, отличный от исходного (детерминизм от сида иначе скрыл бы потерянный файл).

Исправлено:

  • Card_IncludesFamilyAndLiveNeeds брал People[0] и требовал двух родителей. Состав зависит от сида; на чистом клоне первый ученик иногда из неполной семьи. Теперь ищет ученика с матерью и проверяет диапазон.
  • List_SortsBySurname требовал ordinal-порядок, сервер ставит Ё на место Е. Совпадали, пока в core не было фамилий на Ё.

Срез 2. Люди — перепроверка

  • Фазы: 59
  • Проверен на: 8108508, 2026-08-20
  • Пути: src/HSchool.People, src/HSchool.Content/PeopleDefs.cs, src/HSchool.Simulation/RosterSpawner.cs, src/HSchool.Simulation/School.cs, src/HSchool.Server/Api/SchoolEndpoints.cs, src/HSchool.Server/Game/PersonCardReader.cs, src/HSchool.Server/Game/SchoolWorker.cs, src/HSchool.Client/src/ui/peoplePanel.ts, src/HSchool.Client/src/ui/personCard.ts, tests/HSchool.People.Tests, tests/HSchool.Content.Tests/PeopleDefTests.cs, tests/HSchool.Simulation.Tests/PeopleInSchoolTests.cs, tests/HSchool.AppHost.Tests/PeopleApiTests.cs, tests/HSchool.AppHost.Tests/SchoolSeedTests.cs
  • Итог: перепроверка после дрейфа с bdb1253 (страна, одежда, вкладки карточки, мнения, речь). Обещания фаз 5–9 целы; код не чинился; дописаны тесты фильтров списка и работающего родителя на наборе

Что подтверждено:

  • Дефы, наследование, патч, неизвестная ссылка, склонение, мод со своей страной и чертами. GET /api/catalog отдаёт страны, не наборы имён — так решила фаза 29, не регрессия среза 2.
  • Генератор: тот же сид → тот же ростер; 13-я семья не двигает первые двенадцать; отчества отцовские; полное телосложение зажимает ловкость; 1 и 11 кабинетов собираются; неполные семьи 5–10% и не все материнские. Arch / ASP.NET / DateTime.Now в HSchool.People нет.
  • Одиннадцать кабинетов-номеров, Homeroom не компьютерный класс, сущности в World, PersistPeople не с таймера часов. Штат при создании пуст — фаза 11. Нужды в core уже с ненулевым decayPerHour — срез 5.
  • Список читает опубликованный снимок (FindPeople), карточка идёт в мейлбокс с TaskCompletionSource. Фильтры роли/параллели/литеры/должности/пола/возраста живут в RosterBrowser; панель — вкладка рядом с картой, строки через t(...).
  • Выпуск старшей имеющейся, вместимость, младший брат в том же роде, reload после набора (тест прошлого прохода на месте).

Дописано:

  • RosterBrowserTests.FilterBySex_KeepsOnlyThatSex
  • RosterBrowserTests.FilterByLetter_KeepsOnlyThatClassLetter
  • RosterBrowserTests.FilterByAgeRange_KeepsAgesInside
  • RosterBrowserTests.FilterByPosition_KeepsThatJob — фаза 8 обещает эти фильтры; после дрейфа их гонял только клиентский «отправил query».
  • YearlyIntakeTests.StaffParentOfOnlyGraduates_StaysAfterIntake — ветка «родитель выпускников остаётся, если работает здесь» после фазы 11 была пустой: генератор больше не ставит штат, и старый тест её не касался.

Исправлено: ничего в коде среза.

Открытое:

  • Хостовые PeopleApiTests / SchoolSeedTests в этом проходе не гонялись (Testing policy: HTTP не менялся). Симуляционный переход 1 сентября и библиотечный набор зелёные.
  • people.json теперь ещё пишется после разговора и ссоры — это срез 9, не состав среза 2.

Срез 2. Люди — перепроверка после notices и портретов

  • Фазы: 59
  • Проверен на: c3d17ca, 2026-08-21
  • Пути: src/HSchool.People, src/HSchool.Content/PeopleDefs.cs, src/HSchool.Simulation/RosterSpawner.cs, src/HSchool.Simulation/School.cs, src/HSchool.Server/Api/SchoolEndpoints.cs, src/HSchool.Server/Game/PersonCardReader.cs, src/HSchool.Server/Game/SchoolWorker.cs, src/HSchool.Client/src/ui/peoplePanel.ts, src/HSchool.Client/src/ui/personCard.ts, tests/HSchool.People.Tests, tests/HSchool.Content.Tests/PeopleDefTests.cs, tests/HSchool.Simulation.Tests/PeopleInSchoolTests.cs, tests/HSchool.AppHost.Tests/PeopleApiTests.cs, tests/HSchool.AppHost.Tests/SchoolSeedTests.cs
  • Итог: перепроверка после дрейфа с 8108508 (notices, scene prompt, портреты, одежда, мнения). Обещания фаз 5–9 целы; код среза не чинился; дописаны тесты обзора карточки и номеров кабинетов

Что подтверждено:

  • Дефы, наследование, патч, неизвестная ссылка, взаимная несовместимость, склонение правилом и таблицей, мод со своей страной и чертами. GET /api/catalog отдаёт страны, не наборы имён — фаза 29, не регрессия среза 2.
  • Генератор: тот же сид → тот же ростер; 13-я семья не двигает первые двенадцать; отчества отцовские; полное телосложение зажимает ловкость; 1 и 11 кабинетов собираются; неполные семьи 5–10% и не все материнские. Arch / ASP.NET / DateTime.Now в HSchool.People нет.
  • Одиннадцать кабинетов-номеров (101204…), Homeroom не компьютерный класс, сущности в World, PersistPeople с peopleChanged (набор / штат / разговор), не с таймера часов. RecordWorldEvents в Tick не поднимает этот флаг. Штат при создании пуст — фаза 11. Нужды в core с ненулевым decayPerHour — срез 5.
  • Список читает опубликованный снимок (FindPeople), карточка — мейлбокс с TaskCompletionSource. Фильтры роли/параллели/литеры/должности/пола/возраста в RosterBrowser; панель — вкладка рядом с картой, строки через t(...). Обзор карточки по-прежнему тело, навыки, черты, нужды и семья-ссылка; кнопка notice среза 11 на карточку не сажалась.
  • Выпуск старшей имеющейся, вместимость, младший брат в том же роде, родитель-работник выпускников остаётся, reload после набора (тесты прошлых проходов на месте).

Дописано:

  • renderPersonCard / opens a relative from the overview family links — фаза 8 обещает переход к родственнику; после вкладок одежды и портрета обзор с пустой family больше не кликали.
  • RosterGeneratorTests.VanillaMap_HasElevenHomeroomsNotTheComputerLab — подписи кабинетов это трёхзначные номера, не имена классов.

Исправлено: ничего в коде среза.

Открытое:

  • Хостовые PeopleApiTests / SchoolSeedTests в этом проходе не гонялись (Testing policy: HTTP списка и карточки не менялся). RosterGeneratorTests и клиентский personCard.test.ts зелёные.
  • people.json после разговора и ссоры — срез 9, не состав среза 2.
  • Рядом: PersonCardReaderShapeTests всё ещё ждёт один публичный Read, а срез 11 добавил NodeId для портрета. Это форма среза 10, не фазы 5–9; здесь не трогалось.