Files
h-school/docs/phases/03-staffing/reviewed.md
T
2026-08-20 15:20:19 +03:00

90 lines
6.6 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).
## Срез 3. Штат
- **Фазы:** 1013
- **Проверен на:** `bdb1253`, 2026-08-20
- **Пути:** `src/HSchool.People/Staffing.cs`, `src/HSchool.People/ApplicantPool.cs`,
`src/HSchool.Content/SubjectDef` и `defs/staffing`, `src/HSchool.Server/Api/SchoolEndpoints.cs`
(staffing/hire/subjects), `src/HSchool.Server/mods/core/defs/{subjects,positions,rooms,staffing,traits}`,
`src/HSchool.Client/src/ui/managementPanel.ts`, `src/HSchool.Client/src/net/api.ts`,
`tests/HSchool.People.Tests/{StaffingTests,ApplicantPoolTests}.cs`,
`tests/HSchool.AppHost.Tests/StaffingApiTests.cs`,
`src/HSchool.Client/src/ui/managementPanel.test.ts`
- **Итог:** обещания фаз 10–13 целы; дописаны 3 теста; `docs/protocol.md` дополнен `?lang=`
Что подтверждено:
- `PETeacher` нет; кабинеты без учительской должности; места через `defaultSeats`.
Неизвестный навык в предмете роняет каталог. Стартовая дата 31 марта 2012.
- Пул: детерминизм по сиду и неделе, частичное обновление, устойчивый размер, «сильный просит
больше», пустой штат, соискатель вне ростера до найма. Пул 32.
- Фонд оплаты, деление часов, пол ставки, покрытие. `GET /staffing` читает снимок, наём и
назначение — `GameCommand` с `TaskCompletionSource`. `MaxWeeklyHours` не запрещает назначение,
а оставляет предмет непокрытым. `PrimarySchool` на ванили требует трёх учителей (`teachersShort`).
- Экран: деньги, непокрытые, пул, штат, назначение с карточки, отказ по пределу текстом,
всё через `t(...)`.
- Полностью укомплектованная школа влезает в 100 000 впритык (запас 5–13%). Нанять пул целиком
без назначений предела достигает. Раскладка «каждому все предметы» — самая дешёвая, не
«укомплектованная школа».
Дописано:
- `StaffingApiTests.AssigningPastTheCap_IsRejectedWithTheNumbers` — фаза 12 требовала API-тест
на отказ по пределу; единственное место было написано через `if (over.StatusCode == Conflict)`
и проходило при любом исходе.
- `ApplicantPoolTests.ConfidentTraits_AskForMoreAndQuietOnesForLess`
- В `AssignAndUnassign_HonourTheCap_AndReloadKeepsAssignments` — тот же пул с теми же ставками
после перезапуска.
Исправлено:
- `docs/protocol.md` не упоминал `?lang=` у hire/subjects, хотя клиент его шлёт.
## Перепроверка среза 3. Штат
- **Фазы:** 1013
- **Проверен на:** `cf1403e`, 2026-08-20
- **Пути:** `src/HSchool.People/Staffing.cs`, `src/HSchool.People/ApplicantPool.cs`,
`src/HSchool.Content/SubjectDef` и `defs/staffing`, `src/HSchool.Server/Api/SchoolEndpoints.cs`
(staffing/hire/subjects), `src/HSchool.Server/mods/core/defs/{subjects,positions,rooms,staffing,traits}`,
`src/HSchool.Client/src/ui/{managementPanel,mapEditor,applicantsDialog}.ts`,
`src/HSchool.Client/src/net/api.ts`, `docs/protocol.md` (staffing),
`tests/HSchool.People.Tests/{StaffingTests,ApplicantPoolTests}.cs`,
`tests/HSchool.AppHost.Tests/StaffingApiTests.cs`,
`tests/HSchool.Content.Tests/VanillaCoreTests.cs`,
`src/HSchool.Client/src/ui/{managementPanel,mapEditor}.test.ts`
- **Итог:** перепроверка после дрейфа с `bdb1253`. Обещания фаз 10–13 целы. Дописаны 3 теста;
в `protocol.md` у соискателя — все навыки, не «три сильных».
Что подтверждено:
- `PETeacher` нет; кабинет — `defaultSeats`, без учительской должности; слоты у столовой,
медкабинета, кабинета директора и библиотеки. Неизвестный навык роняет каталог.
Старт — суббота 31 марта 2012. `GET /api/catalog` отдаёт предметы.
- Пул 32, детерминизм по сиду и неделе, частичное обновление, устойчивый размер, навыки и черты
в цене часа, пустой штат при полных местах, соискатель вне ростера до найма.
- Фонд = цена часа × нагрузка, не ниже ставки; часы делятся; `MaxWeeklyHours` не запрещает
назначение. `GET /staffing` читает снимок; наём и назначение — мейлбокс с `TaskCompletionSource`.
Предел 100 000 проверяется в момент действия. `PrimarySchool` на ванили — трое (`teachersShort`).
- Экран: Обзор / Управление, строка денег, непокрытые, окно пула, штат, назначение с карточки,
отказ по пределу текстом, `t(...)`.
Дрейф с прошлой проверки (не регрессия среза 3):
- `ApplicantPool` берёт имена страны, не набор имён; новым соискателям назначается ориентация.
- Во «Управлении» рядом вкладка правил одежды и речи; пул по-прежнему отдельным окном.
Дописано:
- `VanillaCoreTests` — у столовой, медкабинета, кабинета директора и библиотеки слоты на месте.
- `mapEditor.test.ts` — у кабинета поле «мест», у столовой именованные слоты, не доска.
- `ManagementPanel` — строка денег; назначение и снятие предмета с карточки нанятого.
Исправлено:
- `docs/protocol.md` всё ещё писал, что у соискателя в `GET /staffing` «три сильных навыка»;
API давно отдаёт все навыки (окно пула сравнивает целиком).