Files
h-school/docs/phases/11-events/64-event-defs.md
T
Leonid PershinandCursor ea3f5c7bf1
ci / server (push) Failing after 3m53s
ci / client (push) Successful in 35s
Document slice 11: notices, scene prompt contributions, and a Krea-only catalog.
Agents can implement toasts, pausing warnings, and bounded object prompts without bringing SDXL back into new schools.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 20:13:23 +03:00

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, action none
  • Симуляция на крае рабочего утра и на звонке (смена периода урока, один факт на школу) отдаёт факт, без 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 в сейв. Не вклад сцены. Не кнопку картинки. Не колонку событий. Не эмитить по классу. Не бампить протокол отдельно от трёх файлов.