90 lines
6.6 KiB
Markdown
90 lines
6.6 KiB
Markdown
# Журнал ревью
|
||
|
||
Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md).
|
||
|
||
## Срез 3. Штат
|
||
|
||
- **Фазы:** 10–13
|
||
- **Проверен на:** `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. Штат
|
||
|
||
- **Фазы:** 10–13
|
||
- **Проверен на:** `a0f0152`, 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 давно отдаёт все навыки (окно пула сравнивает целиком).
|