TL;DR
A job dispatched once, at row-creation time, has a silent failure mode: if that dispatch is lost, the row sits pending forever — and never appears in failed_jobs.
Retries only exist for jobs that ran. A job that never entered the queue has nothing to retry.
Fix: a reconciler — a scheduled sweep for stale, unclaimed rows that re-dispatches them. The database is the source of truth; the queue is just delivery.
The bug that leaves no trace






