47 lines
3.0 KiB
Markdown
47 lines
3.0 KiB
Markdown
# Фаза 67. Картинка с уведомления
|
||
|
||
## Зависимости
|
||
|
||
- [Фаза 65](65-warning-pause.md)
|
||
- [Фаза 66](66-scene-prompt.md)
|
||
- [Фаза 63](63-krea-only.md) (ваниль уже на Krea; не блокер сборки кнопки, но дефолт генерации)
|
||
|
||
## Зачем
|
||
|
||
Событие может предложить нарисовать человека из факта. Кнопка использует тот же сборщик, что
|
||
карточка, включая сцену.
|
||
|
||
## Задачи
|
||
|
||
- [x] `EventDef.action`: `none` | `generateImage`. `generateImage` без `personId` на `Notice` —
|
||
не рисовать, не 500
|
||
- [x] Ваниль `GenerationFailed`: error, pause, `generateImage`. Эмит из сервиса портретов при
|
||
неуспехе Swarm (тот же personId и kind). Утро и звонок остаются `none`
|
||
- [x] UI: на модале/тосте с action — кнопка; вызов существующего портретного HTTP (или узкого
|
||
`POST .../notices/{id}/generate`, если так проще связать права). Kind по умолчанию `full`.
|
||
Строки через `t(...)`
|
||
- [x] Хозяин только. Гость кнопку не активирует. Успех не снимает паузу сам — нужен dismiss
|
||
- [x] [`protocol.md`](../../protocol.md) — HTTP действия, тем же коммитом. Сокет не бампить
|
||
повторно, если кадр 64 уже несёт action/personId; иначе добавить поля в том же смысле,
|
||
что 64, без лишнего +1 если укладка уже есть
|
||
|
||
## Тесты, без которых фаза не закрыта
|
||
|
||
- [x] Каталог: `GenerationFailed` с `generateImage`; `DayStarted` без кнопки
|
||
- [x] Неуспех генерации ставит pausing notice с personId; успех — не ставит
|
||
- [x] Хостовый: хозяин с кнопки получает PNG (или тот же outcome, что карточка); гость 403
|
||
- [x] Промпт этой генерации содержит сцену узла человека (как 66), не пустой коридор без людей
|
||
- [x] Notice без personId и с `generateImage` не дергает Swarm
|
||
- [x] Клиентский: кнопка есть только при action; info-тост дня кнопки не имеет
|
||
|
||
## Критерий готовности
|
||
|
||
- Сломать/отменить Swarm на портрете: ошибка паузит школу, кнопка перерисовывает того же
|
||
- Утро по-прежнему тост без кнопки
|
||
- Гость видит модал и не запускает GPU
|
||
|
||
## Стоп
|
||
|
||
Не автогенерация утром всем. Не арт локации без человека. Не LLM. Не снимать паузу успехом
|
||
картинки. Не третью колонку.
|