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

6.3 KiB
Raw Blame History

Журнал ревью

Сводка: ../reviewed.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_CarryTheDocumentedCodesno-teacher, unknown-class, unknown-subject, unknown-room, unknown-lesson, invalid-query.

Исправлено:

  • В ../../design/04-schedule/schedule.md «панель локации из расписания» и «люди находятся по расписанию» помечены как отменённые срезом 5.