Files

3.0 KiB
Raw Permalink Blame History

Фаза 67. Картинка с уведомления

Зависимости

Зачем

Событие может предложить нарисовать человека из факта. Кнопка использует тот же сборщик, что карточка, включая сцену.

Задачи

  • EventDef.action: none | generateImage. generateImage без personId на Notice — не рисовать, не 500
  • Ваниль GenerationFailed: error, pause, generateImage. Эмит из сервиса портретов при неуспехе Swarm (тот же personId и kind). Утро и звонок остаются none
  • UI: на модале/тосте с action — кнопка; вызов существующего портретного HTTP (или узкого POST .../notices/{id}/generate, если так проще связать права). Kind по умолчанию full. Строки через t(...)
  • Хозяин только. Гость кнопку не активирует. Успех не снимает паузу сам — нужен dismiss
  • protocol.md — HTTP действия, тем же коммитом. Сокет не бампить повторно, если кадр 64 уже несёт action/personId; иначе добавить поля в том же смысле, что 64, без лишнего +1 если укладка уже есть

Тесты, без которых фаза не закрыта

  • Каталог: GenerationFailed с generateImage; DayStarted без кнопки
  • Неуспех генерации ставит pausing notice с personId; успех — не ставит
  • Хостовый: хозяин с кнопки получает PNG (или тот же outcome, что карточка); гость 403
  • Промпт этой генерации содержит сцену узла человека (как 66), не пустой коридор без людей
  • Notice без personId и с generateImage не дергает Swarm
  • Клиентский: кнопка есть только при action; info-тост дня кнопки не имеет

Критерий готовности

  • Сломать/отменить Swarm на портрете: ошибка паузит школу, кнопка перерисовывает того же
  • Утро по-прежнему тост без кнопки
  • Гость видит модал и не запускает GPU

Стоп

Не автогенерация утром всем. Не арт локации без человека. Не LLM. Не снимать паузу успехом картинки. Не третью колонку.