The database queue connection used retry_after=90s while several jobs
declare timeouts far above it (up to 600s). When a job outlives its
reservation window the queue hands it to a second worker; a tries=1 job
then fails with MaxAttemptsExceededException and re-runs its side
effects (double model billing, reset progress) — exactly what
CategorizeUncategorizedTransactionsJob's tries=1 was meant to prevent.
Raise the default to 900s (env-overridable via DB_QUEUE_RETRY_AFTER) so
it exceeds the longest job timeout, and add a guard test asserting every
app/Jobs $timeout stays below retry_after so a new long job cannot
silently reintroduce the bug.
Fixes PHP-LARAVEL-2D