Adiciona mecanismo de expiração periódica para jobs que ficam presos
nos status received ou processing além de um threshold configurável.
- models: novo status StatusTimeout
- store: migration v2 com índice em jobs(status); método ExpireStuck
que faz UPDATE atômico para os status alvo anteriores ao threshold
- expirer: novo pacote com goroutine periódica que chama ExpireStuck
e loga WARN quando algum job é expirado
- config: campos JobTimeoutMinutes (default 120) e
ExpirerIntervalMinutes (default 10), lidos via env vars
JOB_TIMEOUT_MINUTES e EXPIRER_INTERVAL_MINUTES
- main: instancia e inicia o Expirer no startup
- dashboard: card Timeout com contagem; badge neutral na tabela de jobs