From e7a0260a04b3031eca243fdd5bf21f859d9f5224 Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Thu, 20 Aug 2026 14:59:49 +0300 Subject: [PATCH] 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 --- docs/phases/04-schedule/reviewed.md | 50 +++++++++++++++++++++++++++++ docs/phases/reviewed.md | 2 +- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/docs/phases/04-schedule/reviewed.md b/docs/phases/04-schedule/reviewed.md index 6f13fd6..a020b17 100644 --- a/docs/phases/04-schedule/reviewed.md +++ b/docs/phases/04-schedule/reviewed.md @@ -2,6 +2,56 @@ Сводка: [`../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. Расписание - **Фазы:** 14–17 diff --git a/docs/phases/reviewed.md b/docs/phases/reviewed.md index bab81d1..7c43201 100644 --- a/docs/phases/reviewed.md +++ b/docs/phases/reviewed.md @@ -23,7 +23,7 @@ | Срез 1. Оболочка и карта | `d087486` | [01-shell](01-shell/reviewed.md) | | Срез 2. Люди | `bdb1253` | [02-people](02-people/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) | | Срез 6. Фундамент | `cbe739a` | [06-foundation](06-foundation/reviewed.md) | | Срез 7. Этап A — данные и гардероб | `d5547b7` | [07-inventory](07-inventory/reviewed.md) |