Amends 0078, decisions 5 and 6 (queue and scheduler).
Context
0078 named the queue and the scheduler without their features. The owner’s answers MQ1 and SCH1 (mem L866–867, 2026-10-20) and the deploy-mode answer FW8 a (mem L541) fix the job features, the fair queuing, the drivers, and the split between system jobs and tenant schedules.Decision
- Queue (MQ1). Jobs support priority, delay, retries with backoff and jitter, a dead-letter queue with replay, timeouts, per-queue concurrency, unique jobs, batches and chains, and progress.
- Fair queuing (MQ1). Per-tenant fair queuing uses round-robin with per-tenant caps, so one tenant cannot starve others.
- Queue drivers (MQ1). Encore Pub/Sub, Postgres with
SKIP LOCKED, and Valkey as an option (0150 for the Valkey driver). - System jobs (SCH1).
@Cronjobs run on Encore CronJob in SaaS, and on croner with an advisory lock on-prem. - Tenant schedules (SCH1). Automations, calendars and timed transitions are data, run by a scheduler worker. Each runs in the tenant’s time zone, with a missed-run policy, jitter and heartbeats.
- Deploy mode (FW8 a). Gen emits Encore Topic and CronJob in SaaS, and Postgres plus croner on-prem. Deploy targets are in 0158.
Consequences
- A job with no timeout or unique key is a review finding, because the queue features exist to be declared.
- On-prem has no Encore dependency for jobs. The Postgres queue carries them.
Enforcement
planned — gen rejects a@Cron with no lock on-prem, and the queue driver conformance tests cover the features on each driver.
Alternatives
- Encore-only queues: rejected, on-prem has no Encore runtime (FW8).
Supersedes and sources
Supersedes: none. Amends: 0078 decisions 5 and 6. Sources: owner answers MQ1 and SCH1 (stackra-decisions-2026-10-19.md
L866–867, 2026-10-20), framework answer FW8 a (L541).