Short answer: let the cron-like scheduler create a small, idempotent sweep command, and let a worker queue own the long-running report job. Keep reservation expiry separate from report rendering. The important boundary is not the timer; it is the retry contract. A repeated trigger must enqueue equivalent work, a repeated worker delivery must not send a second email, and a delayed report must never extend a reservation that has already crossed its fixed hold window. For a B2B SaaS daily report...