2 Commits

Author SHA1 Message Date
2eead05c34 feat: expirar jobs stuck com status timeout
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
2026-07-07 08:43:33 -03:00
6ffa161d5f feat: implement BP-01 persistence and models
Add SQLite persistence layer with domain types for jobs, logs, and config.
- internal/models: Job, LogEntry, JobStatus, JobSource types
- internal/store: Store with WAL pragmas, idempotent migrations
- JobRepository, LogRepository, ConfigRepository with full CRUD
- Wire store.New into main.go server startup
- 15 passing tests covering all repositories
2026-07-06 20:27:48 -03:00