Files
h-school/docs/phases/02-people/reviewed.md
T

97 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Журнал ревью
Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.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
- **Проверен на:** `c2e01f0`, 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.