# Журнал ревью Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md). ## Срез 4. Расписание - **Фазы:** 14–17 - **Проверен на:** `bdb1253`, 2026-08-20 - **Пути:** `src/HSchool.Schedule`, `src/HSchool.Content` (каркас дня, каникулы, `SubjectDef.room`), `src/HSchool.Simulation/SchoolTimetables.cs`, `src/HSchool.Server/Api/TimetableEndpoints.cs`, `src/HSchool.Server/Game/SchoolWorker.cs` (пин, перестроение), `src/HSchool.Client/src/ui/timetableGrid.ts`, `src/HSchool.Client/src/ui/gameScreen.ts`, `tests/HSchool.Schedule.Tests`, `tests/HSchool.Content.Tests/CalendarTests.cs`, `tests/HSchool.Content.Tests/LunchBreakTests.cs`, `tests/HSchool.AppHost.Tests/TimetableApiTests.cs`, `src/HSchool.Client/src/ui/timetableGrid.test.ts` - **Итог:** обещания фаз 14–17 целы; дописан тест на коды отказа пина; две строки дизайна помечены как отменённые срезом 5 Что подтверждено: - Календарь: суббота, каникулы и ночь — «вне учебного дня»; 10:20 вторника — третий урок; шестидневка; зима через 1 января. Физкультура в спортзале. Обеденные смены в каркасе дня (младшие после 3-го, старшие после 4-го). - Планировщик: четыре запрета, класс не влезает в меньший кабинет, без Arch/ASP.NET/`DateTime.Now`. - Перестроение только при `PeopleChanged` + `TimetableDirty`, не по тику. `GET /timetable` читает снимок, пин — `TaskCompletionSource`. `Reload_RestoresLockedLessons`. - Сетка, закрепление, тексты отказа (`pin-rejected` / `no-teacher` / `unknown-lesson`), скобки в дереве из присутствия, личное расписание в карточке. Всё через `t(...)`. - Занятость узла в протоколе v7 живёт в кадре `Presence`, не в снимке карты — фаза 19. Дописано: - `TimetableApiTests.PinAndUnpinRefusals_CarryTheDocumentedCodes` — `no-teacher`, `unknown-class`, `unknown-subject`, `unknown-room`, `unknown-lesson`, `invalid-query`. Исправлено: - В `../../design/04-schedule/schedule.md` «панель локации из расписания» и «люди находятся по расписанию» помечены как отменённые срезом 5.