ADR-022 — Background jobs and Redis

Architecture decision record — status: Accepted.

Source: docs/adr/ADR-022-background-jobs.md

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

  1. Redis para colas, rate limiting de outbound y cache corto (sesiones/locks).
  2. Workers Nest (mismo monolito, proceso aparte) consumen jobs: SequenceStepDue, SendMessage, ClassifyReply, EvaluatePromises.
  3. Outbox (tabla Postgres) para publicar eventos de dominio hacia la cola — no perder MessageReceived si Redis parpadea.
  4. Jobs idempotentes (key: organization + aggregate + step/date).
  5. 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ónNota
Redis + workers + outboxElegida
Cron síncrono en el APIFrágil; mezcla latencias de Gmail/AI
Kafka / temporalSobre-diseño para V1

Consecuencias

  • make local-up deberá levantar Postgres y Redis.
  • Tests de scheduler con reloj inyectado (no Date.now() suelto en dominio).