- 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.
56 lines
4.2 KiB
Markdown
56 lines
4.2 KiB
Markdown
# Фаза 19. Присутствие на экране
|
|
|
|
## Зависимости
|
|
|
|
- [Фаза 18](18-presence-walking.md)
|
|
- [Фаза 17](17-timetable-screen.md)
|
|
|
|
## Зачем
|
|
|
|
Школа впервые видна живой: в дереве идут числа, на перемене коридор наполняется, к звонку
|
|
кабинеты сходятся обратно.
|
|
|
|
## Задачи
|
|
|
|
- [ ] Новое сообщение присутствия, ~2 раза в секунду, только по открытой школе: узлы со
|
|
счётчиками и люди с их узлом и состоянием
|
|
- [ ] Снимок карты становится **статическим**: люди и текущий урок уезжают в присутствие,
|
|
структура уходит один раз при открытии. Пересылка на смене слота убирается
|
|
- [ ] `ProtocolCodec.cs`, `protocol.ts` и `docs/protocol.md` правятся тем же коммитом, версия
|
|
бумпится до 7
|
|
- [ ] Справочник «id → имя» по HTTP: клиент забирает один раз при открытии школы и перечитывает,
|
|
увидев незнакомый id. Имена в кадр присутствия не кладутся
|
|
- [ ] Дерево: число людей рядом с узлом, живое. Пустой узел остаётся без числа
|
|
- [ ] Панель локации: кто здесь сейчас, списком с именами; урок в комнате берётся из присутствия,
|
|
а не из снимка
|
|
- [ ] Карточка человека: где он сейчас — узел, «в пути» или «вне школы»
|
|
- [ ] Присутствие приходит по всей школе, выбранный узел фильтрует клиент
|
|
- [ ] Кадр часов несёт разрешение на пропуск; клиент это разрешение **не вычисляет**
|
|
- [ ] Намерение «пропустить» — своё сообщение, как пауза и скорость. Сервер проверяет условия
|
|
заново: кадр из браузера не доверенный
|
|
- [ ] Кнопка рядом с паузой и скоростями: появляется только когда сервер разрешил, подписана
|
|
датой, к которой перенесёт
|
|
- [ ] Строки через `t(...)`, обе локали
|
|
|
|
## Тесты, без которых фаза не закрыта
|
|
|
|
- [ ] Байтовая раскладка присутствия сходится с обеих сторон
|
|
- [ ] Круговой прогон сообщения: сервер → клиент → те же значения
|
|
- [ ] Снимок карты больше не содержит людей и урока
|
|
- [ ] Кадр часов с разрешением на пропуск читается обеими сторонами одинаково
|
|
- [ ] Пропуск, присланный в учебное время, сервер отбрасывает, а не исполняет
|
|
|
|
## Критерий готовности
|
|
|
|
- Открыть школу в 8:25 и увидеть, как двор и вестибюль пустеют, а кабинеты наполняются
|
|
- На перемене коридор — самый людный узел дерева
|
|
- В каникулы дерево без чисел, а карточки говорят «вне школы»
|
|
- В пятницу после уроков дождаться, пока школа опустеет, нажать «пропустить» и оказаться в
|
|
понедельник в 6:00; вечером буднего дня та же кнопка ведёт в завтрашнее утро
|
|
- `dotnet test`, `npm test` и `npm run build` проходят
|
|
|
|
## Стоп
|
|
|
|
Не рисовать перемещение анимацией. Не заводить серверный `OpenLocation`. Не добавлять нужды и
|
|
действия.
|