Record slice 4 recheck after staffing, presence and worker split.
Planner, pin API and calendar tests still hold; class/person GET filters now have tests. GET catalog day frame still lacks lunchBreaks. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2,6 +2,56 @@
|
|||||||
|
|
||||||
Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md).
|
Сводка: [`../reviewed.md`](../reviewed.md). Индекс среза: [`README.md`](README.md).
|
||||||
|
|
||||||
|
## Срез 4. Расписание — перепроверка
|
||||||
|
|
||||||
|
- **Фазы:** 14–17
|
||||||
|
- **Проверен на:** `5a049d4`, 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. Расписание
|
## Срез 4. Расписание
|
||||||
|
|
||||||
- **Фазы:** 14–17
|
- **Фазы:** 14–17
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
| Срез 1. Оболочка и карта | `d087486` | [01-shell](01-shell/reviewed.md) |
|
| Срез 1. Оболочка и карта | `d087486` | [01-shell](01-shell/reviewed.md) |
|
||||||
| Срез 2. Люди | `bdb1253` | [02-people](02-people/reviewed.md) |
|
| Срез 2. Люди | `bdb1253` | [02-people](02-people/reviewed.md) |
|
||||||
| Срез 3. Штат | `bdb1253` | [03-staffing](03-staffing/reviewed.md) |
|
| Срез 3. Штат | `bdb1253` | [03-staffing](03-staffing/reviewed.md) |
|
||||||
| Срез 4. Расписание | `bdb1253` | [04-schedule](04-schedule/reviewed.md) |
|
| Срез 4. Расписание | `5a049d4` | [04-schedule](04-schedule/reviewed.md) |
|
||||||
| Срез 5. Жизнь школы | `cbe739a` | [05-ai](05-ai/reviewed.md) |
|
| Срез 5. Жизнь школы | `cbe739a` | [05-ai](05-ai/reviewed.md) |
|
||||||
| Срез 6. Фундамент | `cbe739a` | [06-foundation](06-foundation/reviewed.md) |
|
| Срез 6. Фундамент | `cbe739a` | [06-foundation](06-foundation/reviewed.md) |
|
||||||
| Срез 7. Этап A — данные и гардероб | `d5547b7` | [07-inventory](07-inventory/reviewed.md) |
|
| Срез 7. Этап A — данные и гардероб | `d5547b7` | [07-inventory](07-inventory/reviewed.md) |
|
||||||
|
|||||||
Reference in New Issue
Block a user