Update reviewed phase details, enhance presence tests for hiring and assigning teachers during lessons, and fix timetable handling in the School class. Added new tests for presence management and ensured proper campus staffing behavior during lesson transitions.
ci / server (push) Failing after 4m0s
ci / client (push) Successful in 17s

This commit is contained in:
Leonid Pershin
2026-08-20 02:47:24 +03:00
parent 2833a09799
commit cbe739a4e6
4 changed files with 159 additions and 22 deletions
+52 -5
View File
@@ -519,15 +519,16 @@ Calendar+обеды 20, планировщик 9, TimetableApi 6.
## Срез 5. Жизнь школы
- **Фазы:** 1821
- **Проверен на:** `5a00ad7`, 2026-08-19 (первичная проверка — `21d79cb`). Фаза 21 закрыта за час до проверки, `core` правился
параллельно — проверка велась в отдельном worktree на коммите, не на рабочем дереве
- **Проверен на:** `450495f`, 2026-08-20 (первичная проверка — `21d79cb`; предыдущая перепроверка — `5a00ad7`)
- **Пути:** `src/HSchool.Ai`, `src/HSchool.Simulation/{PresenceSystem,ActivitySystem,LessonLearningSystem,School}.cs`,
`src/HSchool.Protocol` (кадр `Presence`, пропуск в кадре часов),
`src/HSchool.Server/Game/PresenceFrame.cs`, `src/HSchool.Client/src/ui/gameScreen.ts`,
`src/HSchool.Server/mods/core/defs/{actions,behavior,needs}`, `tests/HSchool.Ai.Tests`,
`tests/HSchool.Simulation.Tests/{PresenceTests,DecisionTests,ActivityTests,NeedDecayTests}.cs`
- **Итог:** все 32 теста из списков четырёх фаз на месте и проходят; тестов не дописано, зато
измерен прожитый учебный день — и он показал две вещи, которых списки не ловят
`tests/HSchool.Simulation.Tests/{PresenceTests,DecisionTests,ActivityTests,NeedDecayTests,LunchTests}.cs`,
`tests/HSchool.AppHost.Tests/GameSocketTests.cs`
- **Итог:** все 32 теста из списков четырёх фаз на месте; дописаны 2 теста явки после смены таблицы,
`SetTimetable` сбрасывает планы дня, хостовый тест ждёт `Clock.Running` после снятия паузы.
Голод из первого прохода уже закрыт данными. AppHost не гонялся — Aspire держит DLL.
Что подтверждено:
@@ -606,6 +607,52 @@ Calendar+обеды 20, планировщик 9, TimetableApi 6.
ходьба, действия и решения не тронуты, `decayPerHour` и `needGain` тоже, поэтому измеренная выше
картина с голодом остаётся в силе: вопрос «чем закрывать голод» по-прежнему открыт.
### Перепроверка на `450495f`, 2026-08-20
Дрейф после `5a00ad7` — обеденные смены, веса в `BehaviorDef` (фаза 24), `Decision.cs`,
`PresenceSystem` (очередь после действий). Обещания фаз 18–21 целы; протокол остался v7.
Что подтверждено повторно:
- **Фаза 18.** Все 13 тестов списка на месте в `WalkingTests` / `PresenceTests`. Пустая школа
без учителей в рабочее окно не пропускается. `EnsurePlans` пересобирал планы только при смене
дня или численности — после пина или назначения предмета без найма `AppearAt` оставался `null`.
- **Фаза 19.** Раскладка присутствия с обеих сторон (`Presence_RoundTrips`, `protocol.test.ts`),
снимок карты без людей, пропуск в учебное время отбрасывается. Кадр часов несёт разрешение на
пропуск; клиент его не считает.
- **Фаза 20.** Декей голода, обед, стулья, ночь вне школы, неизвестная нужда, детерминизм.
`SleepAndHunger_ReturnToMaxOffCampus` и `AfterASchoolDay_NobodyIsLeftStarving` закрывают
открытый в первом проходе голод.
- **Фаза 21.** Восемь тестов списка плюс обеденные веса в `DecisionPlannerTests`. `HSchool.Ai`
без Arch/ASP.NET/`DateTime.Now`, `Simulation` без сокетов.
Исправлено:
- `School.SetTimetable` обнуляет `PlanDay`. Иначе `EnsurePlans` считает планы актуальными,
пока не сменятся день или численность, и после назначения математики в 10:20 никто не приходит:
вчерашний план собран по пустой таблице, `AppearAt == null`. Найм это маскировал (численность
растёт), пин и назначение — нет.
- `OpeningASchoolDuringAMathLesson_...` после снятия паузы сразу ждал людей в кадре. Присутствие
уходит и на паузе (пустые люди, подписи урока из таблицы), и 40 кадров бюджета уходили в эти
кадры до обработки `SetRunning`. Теперь тест ждёт `clock.Running`, потом людей. Сам хост
с Aspire в этой сессии не гонялся (MSB3021).
Дописано:
- `HireAndAssignMath_DuringLessonThree_PutsSomeoneOnCampus` — найм на паузе в 10:20, потолок
64 решения, шаг 20 Гц, как у работника.
- `AssigningMath_AfterDayPlansWereBuilt_PutsSomeoneOnCampus` — назначение без смены численности;
без сброса `PlanDay` кампус остаётся пустым.
Закрыто из прошлого прохода:
- **Голод.** Уже закрыто 2026-08-19 (`restoredOffCampus`, стулья 112, смены). Повторно зелёные
`NeedDecayTests.SleepAndHunger_ReturnToMaxOffCampus` и `LunchTests.AfterASchoolDay_NobodyIsLeftStarving`.
- **`OpeningASchoolDuringAMathLesson_...`.** Это была явка плюс чтение паузных кадров, не флак
нагрузки. Симуляция после правки зелёная; хостовый прогон — когда Aspire отпустят DLL.
Ai 29, Presence+Decision+Activity+NeedDecay+Lunch 31, Presence_RoundTrips 1.
## Что из журнала закрыто, 2026-08-19
Ревью нашло семь пунктов; шесть закрыты в этот же день, седьмой снят как несуществующий.