ADR-022: Background jobs and Redis
Estado
Accepted — 2026-08-23
Contexto
Sequences, envío de email, clasificación de replies y evaluación de promises rotas no deben bloquear el request HTTP. IVPrior ya usa Redis + workers.
Decisión
- Redis para colas, rate limiting de outbound y cache corto (sesiones/locks).
- Workers Nest (mismo monolito, proceso aparte) consumen jobs:
SequenceStepDue,SendMessage,ClassifyReply,EvaluatePromises. - Outbox (tabla Postgres) para publicar eventos de dominio hacia la cola — no perder
MessageReceivedsi Redis parpadea. - Jobs idempotentes (key: organization + aggregate + step/date).
- No se adopta un bus cloud (SQS/SNS) en V1 salvo que el deploy lo exija; el puerto de cola permite cambiar adapter.
Alternativas
| Opción | Nota |
|---|---|
| Redis + workers + outbox | Elegida |
| Cron síncrono en el API | Frágil; mezcla latencias de Gmail/AI |
| Kafka / temporal | Sobre-diseño para V1 |
Consecuencias
make local-updeberá levantar Postgres y Redis.- Tests de scheduler con reloj inyectado (no
Date.now()suelto en dominio).