ASYNC LAYER — outbox / jobs / DLQ

Side effects run via transactional outbox, Cloud Tasks and Pub/Sub. UI shows queued/processing/retry from owner-scoped job documents — never poll faster than 5s or list unbounded. FCM/notifications are informational and cannot change business state. Missing queues stay ENVIRONMENT_BLOCKED.

Background jobs

JobQueueScheduleLast runp95SuccessStatus