3.6 KiB
3.6 KiB
Фаза 64. События и info-тост
Зависимости
- Фаза 16 (звонок на урок)
- Фаза 34 (рабочее утро как край)
- Фаза 39 (гость уже есть; dismiss pausing — фаза 65)
Зачем
Игрок видит, что начался день или урок. Это тост, не колонка и не пауза.
Задачи
EventDef: id,severity(info/warning/error),pause,ttlMs(0 = не гаснуть),trigger(dayStart/lessonStart/generationFailed),action(noneв этой фазе). Локаль как у других def. Валидатор каталога- Ваниль
DayStartedиLessonStarted: info, без паузы, TTL 8000,actionnone - Симуляция на крае рабочего утра и на звонке (смена периода урока, один факт на школу)
отдаёт факт, без UI. Работник сопоставляет def и кладёт info-
Notice - Новый кадр S→C (уведомление: id, defName, severity, pause, ttlMs, optional personId = 0).
Новый кадр C→S dismiss по id.
ProtocolCodec.cs,protocol.ts,protocol.mdв одном коммите. Версия протокола +1 - Клиент: тост поверх школы, текст из каталога/
tпо defName, клик шлёт dismiss, TTL гасит локально. Строки черезt(...). Не колонка «События» - Info не писать в сейв. Открытие школы info не повторяет. Гость тост видит
generationFailedв каталоге можно завести, но не эмитить — фаза 67 / 65
Тесты, без которых фаза не закрыта
- Каталог грузит
DayStarted/LessonStarted; неизвестный trigger — ошибка загрузки - Переход через край рабочего утра даёт один факт
dayStart; повторный тик в ту же минуту — нет - Смена периода на урок даёт один
lessonStartна школу, не по числу классов - Круглый трип и байтовая раскладка кадра уведомления и dismiss — на обеих сторонах
- Клиентский тест: тост показывает локализованный текст, клик вызывает dismiss, без монтирования колонки
- Хостовый: открытая школа после утра получает кадр; после Close/Open info-тост не висит из сейва
Критерий готовности
- Запустить часы до начала уроков: тост «начало дня», затем «начало урока», оба сами гаснут
- Клик по тосту убирает его сразу
- Гость той же школы тост видит
- Старый клиент отваливается Hello из‑за версии
Стоп
Не паузить. Не писать sticky в сейв. Не вклад сцены. Не кнопку картинки. Не колонку событий. Не эмитить по классу. Не бампить протокол отдельно от трёх файлов.