Retry a failed portrait from the notice with the same scene builder.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-21 01:48:30 +03:00
co-authored by Cursor
parent 3c70227229
commit 3061e09d3e
32 changed files with 712 additions and 105 deletions
+11 -11
View File
@@ -13,26 +13,26 @@
## Задачи
- [ ] `EventDef.action`: `none` | `generateImage`. `generateImage` без `personId` на `Notice`
- [x] `EventDef.action`: `none` | `generateImage`. `generateImage` без `personId` на `Notice`
не рисовать, не 500
- [ ] Ваниль `GenerationFailed`: error, pause, `generateImage`. Эмит из сервиса портретов при
- [x] Ваниль `GenerationFailed`: error, pause, `generateImage`. Эмит из сервиса портретов при
неуспехе Swarm (тот же personId и kind). Утро и звонок остаются `none`
- [ ] UI: на модале/тосте с action — кнопка; вызов существующего портретного HTTP (или узкого
- [x] UI: на модале/тосте с action — кнопка; вызов существующего портретного HTTP (или узкого
`POST .../notices/{id}/generate`, если так проще связать права). Kind по умолчанию `full`.
Строки через `t(...)`
- [ ] Хозяин только. Гость кнопку не активирует. Успех не снимает паузу сам — нужен dismiss
- [ ] [`protocol.md`](../../protocol.md) — HTTP действия, тем же коммитом. Сокет не бампить
- [x] Хозяин только. Гость кнопку не активирует. Успех не снимает паузу сам — нужен dismiss
- [x] [`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-тост дня кнопки не имеет
- [x] Каталог: `GenerationFailed` с `generateImage`; `DayStarted` без кнопки
- [x] Неуспех генерации ставит pausing notice с personId; успех — не ставит
- [x] Хостовый: хозяин с кнопки получает PNG (или тот же outcome, что карточка); гость 403
- [x] Промпт этой генерации содержит сцену узла человека (как 66), не пустой коридор без людей
- [x] Notice без personId и с `generateImage` не дергает Swarm
- [x] Клиентский: кнопка есть только при action; info-тост дня кнопки не имеет
## Критерий готовности