- Migration 053: rejection_reason TEXT NULL on orders table - POST /api/orders/{id}/reject (PM+): sets rejected status, cancels active renders, stores reason, notifies creator, broadcasts WS event - POST /api/orders/{id}/resubmit (creator or PM+): resets to draft, clears rejection fields, notifies PMs - OrderDetail: Reject button (PM+) + inline modal with reason textarea and notify-client checkbox; Resubmit button; rejection reason amber alert box shown below header when order is rejected - Orders Kanban: rejection_reason shown as red italic note on card - Order interface: rejected_at, rejection_reason fields Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Move all models/schemas/services/routers into app/domains/. Keep backward-compat shims in old locations for imports. Preserves domains/rendering/tasks.py from Phase A. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>