- 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.
4.2 KiB
4.2 KiB
Фаза 19. Присутствие на экране
Зависимости
Зачем
Школа впервые видна живой: в дереве идут числа, на перемене коридор наполняется, к звонку кабинеты сходятся обратно.
Задачи
- Новое сообщение присутствия, ~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. Не добавлять нужды и
действия.