# Журнал ревью Сводка: [`../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, хотя клиент его шлёт.