# Фаза 67. Картинка с уведомления ## Зависимости - [Фаза 65](65-warning-pause.md) - [Фаза 66](66-scene-prompt.md) - [Фаза 63](63-krea-only.md) (ваниль уже на Krea; не блокер сборки кнопки, но дефолт генерации) ## Зачем Событие может предложить нарисовать человека из факта. Кнопка использует тот же сборщик, что карточка, включая сцену. ## Задачи - [ ] `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`](../../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. Не снимать паузу успехом картинки. Не третью колонку.