91 lines
6.3 KiB
Markdown
91 lines
6.3 KiB
Markdown
# Журнал ревью
|
||
|
||
Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md).
|
||
|
||
## Срез 4. Расписание — перепроверка
|
||
|
||
- **Фазы:** 14–17
|
||
- **Проверен на:** `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. Расписание
|
||
|
||
- **Фазы:** 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.
|