Refactor project structure and enhance AI and simulation components
- Updated project roles to include a new `HSchool.Ai` component, detailing its responsibilities in routing and decision-making. - Revised the `HSchool.Simulation` component to integrate with the new AI functionalities, improving the interaction between simulation and AI. - Expanded documentation to reflect the changes in project roles and the introduction of AI features. - Added tests for the new AI functionalities, ensuring robust pathfinding and decision-making capabilities. - Updated phase documentation to outline the new stages of school life, focusing on presence and behavior.
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# Фаза 18. Присутствие и ходьба
|
||||
|
||||
## Зависимости
|
||||
|
||||
- [Фаза 16](16-timetable-in-school.md)
|
||||
|
||||
## Зачем
|
||||
|
||||
Человек перестаёт быть записью в расписании и получает **место**. Он приходит утром, идёт
|
||||
коридором в кабинет и уходит после последнего урока. Экрана ещё нет — всё проверяется тестами
|
||||
и логом.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [ ] Новый проект `HSchool.Ai` рядом с `People` и `Schedule`: зависит на `Content`, `People` и
|
||||
`Schedule`, без Arch и ASP.NET. Рядом — `tests/HSchool.Ai.Tests`
|
||||
- [ ] `travelMinutes` на `RoomDef` и `TerritoryDef`; в `core` проставлены кабинет 0.5, коридор
|
||||
1.5, лестница 1.5, вестибюль 1, двор 3
|
||||
- [ ] Маршрутизация по `MapLayout.Links` — в библиотеке: матрица следующих шагов считается
|
||||
**один раз** при загрузке школы, не на каждом шаге
|
||||
- [ ] План дня человека — тоже в библиотеке: во сколько выходить, чтобы успеть, и когда уходить.
|
||||
Часы, компоненты и мир туда не проникают
|
||||
- [ ] Место человека — компонент в `World`: узел, остаток пути, минуты до выхода из узла.
|
||||
Человек всегда в узле; рёбер как состояний нет
|
||||
- [ ] Состояние «вне школы» — не удаление сущности: человек остаётся в списке и в карточке
|
||||
- [ ] Приход и уход: у кого сегодня нет уроков, тот не приходит вовсе. Ученик и учитель — по
|
||||
своим урокам, прочий штат — по дню школы
|
||||
- [ ] Запас на дорогу свой у каждого: путь от двора плюс несколько минут из своего потока
|
||||
случайности, с поправкой на черты
|
||||
- [ ] Обязанность как место назначения: урок — кабинет из расписания, должность — комната из
|
||||
`RoomDef.works`. Выбора действий пока нет
|
||||
- [ ] Движение по тику: остаток минут в узле уменьшается, при нуле человек переходит в следующий
|
||||
узел пути
|
||||
- [ ] Стабильный порядок обхода людей — собственный список, а не порядок сущностей в Arch
|
||||
- [ ] Адаптер в `HSchool.Simulation`: собирает значения из компонентов, зовёт библиотеку,
|
||||
записывает ответ обратно. Горячий путь — движение — границу не пересекает
|
||||
- [ ] Ориентир в `AGENTS.md`, `docs/architecture.md` и `docs/design/projects.md` знает про новый
|
||||
проект
|
||||
- [ ] Место, путь и назначение едут в файл часов; кого в файле нет, тот расставляется по
|
||||
обязанности
|
||||
- [ ] Потолок решений за тик — в `SimulationOptions`, как очередь, а не как отсечка
|
||||
- [ ] Предикат «школа пуста»: в здании и во дворе нет никого
|
||||
- [ ] Рабочее окно дня — от шести утра до последнего звонка по **каркасу дня**, а не по
|
||||
фактическому расписанию
|
||||
- [ ] «Ближайшее шесть утра рабочего дня впереди»: ночь ведёт в то же утро, вечер — в следующее,
|
||||
выходные, праздники и каникулы пропускаются. Поиск ограничен разумным числом дней и
|
||||
честно отвечает «нет такого»
|
||||
- [ ] Прыжок часов туда одним шагом: разрешён только при пустой школе и вне рабочего окна,
|
||||
отрабатывает первое сентября и обновление пула за весь пропуск, после себя пишет сейв
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [ ] Путь из кабинета 201 в санузел первого этажа идёт через лестницу и коридор, а не напрямую
|
||||
- [ ] Сумма `travelMinutes` совпадает с временем, за которое человек реально доходит
|
||||
- [ ] В воскресенье и в каникулы школа пуста: все вне школы
|
||||
- [ ] Класс без уроков сегодня не приходит, а его учитель с уроками у другого класса — приходит
|
||||
- [ ] К началу первого урока ученик находится в своём кабинете
|
||||
- [ ] Физкультура после урока в главном корпусе: класс доходит до спортзала, и видно, что
|
||||
перемены на это едва хватает
|
||||
- [ ] Тот же сид и та же карта дают то же расположение людей на тот же момент
|
||||
- [ ] Сохранение и загрузка посреди перемены не телепортируют людей
|
||||
- [ ] Прыжок с субботы попадает в понедельник, 6:00; с трёх ночи вторника — в утро того же
|
||||
вторника; с десяти вечера — в утро среды
|
||||
- [ ] Прыжок в учебное время отклоняется. В семь утра рабочего дня, когда школа ещё пуста, —
|
||||
тоже: это уже рабочее окно
|
||||
- [ ] У школы без единого учителя рабочий день не пропускается
|
||||
- [ ] Прыжок через летние каникулы проводит первое сентября: классы перешли, выпуск состоялся,
|
||||
набор пришёл
|
||||
- [ ] Промотанная неделя и прожитая неделя дают одно состояние школы
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- `dotnet test` проходит
|
||||
- Маршруты и план дня проверены без мира: в `HSchool.Ai.Tests` нет Arch
|
||||
- В `HSchool.Ai` нет упоминаний Arch, ASP.NET и `DateTime.Now`; в `HSchool.Simulation` — сокетов
|
||||
|
||||
## Стоп
|
||||
|
||||
Не трогать протокол и клиент. Не заводить нужды, действия и выбор — это фазы 20 и 21.
|
||||
Reference in New Issue
Block a user