154 lines
12 KiB
Markdown
154 lines
12 KiB
Markdown
# Журнал ревью
|
||
|
||
Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md).
|
||
|
||
## Срез 2. Люди
|
||
|
||
- **Фазы:** 5–9
|
||
- **Проверен на:** `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. Люди — перепроверка
|
||
|
||
- **Фазы:** 5–9
|
||
- **Проверен на:** `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 и портретов
|
||
|
||
- **Фазы:** 5–9
|
||
- **Проверен на:** `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` нет.
|
||
- Одиннадцать кабинетов-номеров (`101`…`204`…), `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; здесь не трогалось.
|