5 クレジット画像生成ワークフロー
非同期の有料タスクを認証、権限、冪等クレジット、永続 worker、非公開 storage、失敗補償まで追います。
コミット
2a1a04aで確認済みです。
画像生成は production-shaped な有料 workflow の最小例です。ローカル provider は商用 model を呼ばず SVG を作ります。価値は周囲の chain にあり、受理された 1 request は組織共有の 5 credit を消費します。
ENABLE_DEMO_FEATURES=true
ENABLE_IMAGE_GENERATION_MOCK=true
IMAGE_GENERATION_MOCK_FAILURES=0pnpm dev:all を実行し、demo account で login して /ja/tasks/image-generation を開きます。UI は 1 idempotency key を保持して tenant-scoped task を poll します。
- API は same-origin、rate limit、auth、
tasks.image_generation、月間上限を確認します。 (user_uuid, type, idempotency_key)が task を識別し、fingerprint が別 prompt での key 再利用を拒否します。task_image:<task uuid>が 5-credit spend を識別し、並行 replay は既存 debit を返します。task_image_generation:<task uuid>が durable job を重複排除し、task/spend/dispatch 間の crash を replay で修復します。- Worker は安定 UUID で provider を呼び、private Garage/S3 object を書いて検証し、file を activate します。
- Task read は organization 内で file を解決して短時間 signed URL を返します。
pending_payment → queued → running → succeeded
↘ refunding → failedProvider は 5 回、job は 8 回試行し、残り 3 回を compensation 用に確保します。Terminal failure は refunding に入り、deterministic refund を追加してから failed になります。Replay は provider も refund も重複しません。
IMAGE_GENERATION_MOCK_FAILURES=5 で failure path を確認できます。実 DB test は 1 spend/1 refund、Playwright は replay、正確な 5-credit 差、worker、Garage、signed download を証明します。
実 provider は src/services/ai/image.ts だけを置き換え、idempotency、AbortSignal、task、credit、job、storage、error contract を保ってください。