Files
h-school/docs/phases/04-schedule/reviewed.md
T

91 lines
6.3 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).
## Срез 4. Расписание — перепроверка
- **Фазы:** 1417
- **Проверен на:** `01ef277`, 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/Api/TimetableModels.cs`,
`src/HSchool.Server/Game/SchoolWorker.Mailbox.cs` (пин),
`src/HSchool.Server/Game/SchoolWorker.Persist.cs` (сейв и перестроение),
`src/HSchool.Server/Game/SchoolWorker.Tick.cs` (`PeopleChanged` + `TimetableDirty`),
`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`
- **Итог:** перепроверка после дрейфа с `bdb1253`; обещания фаз 14–17 целы; дописаны тесты
фильтров `GET` и `personTimetableQuery`
Что подтверждено:
- Календарь: суббота, каникулы и ночь — «вне учебного дня»; 10:20 вторника — третий урок;
шестидневка; зима через 1 января. Физкультура в спортзале. Обеденные смены в каркасе дня
(младшие после 3-го, старшие после 4-го).
- Планировщик: все шесть тестов фазы 15 на месте; запреты Arch/ASP.NET/`DateTime.Now` живут
в `LayerBoundaryTests` (срез 10), не в `Schedule.Tests`.
- Перестроение только при `PeopleChanged` + `TimetableDirty`, не по тику — после раскола
воркера это `SchoolWorker.Tick.cs`. `GET /timetable` читает снимок; пин требует владельца
(срез 8) и идёт через `TaskCompletionSource`. `Reload_RestoresLockedLessons`.
- Сетка, закрепление, тексты отказа, скобки в дереве из присутствия (ещё и с числом людей),
личное расписание: учитель `?personId=`, ученик `?classId=`, родитель без сетки. Всё через `t(...)`.
- Занятость узла в протоколе v7 живёт в кадре `Presence`, не в снимке карты — фаза 19.
Дописано:
- `TimetableApiTests.GetTimetable_ClassAndPersonFilters_NarrowTheLessons``?classId=` и
`?personId=` сужают уроки; это обещание фазы 16 без отдельного теста.
- `personTimetableQuery`: staff → `personId`, ученик → `classId`, родитель не staff → `null`.
- Закреплённая ячейка несёт класс `timetable__cell--locked` и `title` из `t('timetableLocked')`.
Исправлено:
- Комментарий у `TimetableGrid` всё ещё писал, что занятость живёт в снимке карты.
- `Saturday_HasNoOccupancyOnTheMap` не проверял занятость — переименован в
`Saturday_StillStoresTheWeekTable` (пустой стол в выходной уже в `TimetableClockTests`).
Открыто:
- `GET /api/catalog` по-прежнему отдаёт каркас дня без `lunchBreaks` (только `longBreakAfter`).
Сетке смены не нужны; молча расширять HTTP ревью не стало.
## Срез 4. Расписание
- **Фазы:** 1417
- **Проверен на:** `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.