Agent Squad · Arquitectura de orquestación

Deprecar el motor v1 → todo en v2

El rework bifásico cayó en el motor v1 mientras producción corre en v2. La meta es un solo motor. Pero la auditoría de paridad muestra que v2 todavía no reemplaza a v1: es un programa de varias releases, no un borrado.

No es seguro deprecar v1 hoy. v2 es sólido como núcleo (cola + event-log), pero le faltan capacidades P0 de producto: gates que encadenen, evaluators con veredicto, human_task, budget, actores/roles y cierre de lifecycle. Migrar todo hoy rompería flujos en silencio.

01 Roadmap por fases

FASE0
Congelar alcance + observabilidadv1 en maintenance-only · métricas por motor · golden scenarios v1/v2
pendiente
FASE1
Arreglar el defecto C — port del gate bifásico a v27 tasks · propagar contrato del gate → crear flow transaccional → portar 2 fases → entry-offer fail-closed → E2E
▶ en curso
FASE2
Paridad P0 antes de ampliar rolloutgates · human_task · evaluators · budget · actor/roster · retry/timeout · lifecycle · claims/lineage
siguiente
FASE3
Worker v2 estable en prodencender WORKER_ORQUESTACION · alertas · runbook · varios días de canary
espera
FASE4
Migración gradual por anillosinternos → Roberto → 10-20% → 50% → 100% · corridas en vuelo nunca migran de motor
espera
FASE5–6
Cortar productores v1, drenar y retirarparar plan.compiled → drenar corridas v1 → quitar de Inngest → borrar código (conservar tablas/historia)
espera

02 Auditoría de paridad v1 → v2

equivalente o mejor existe pero no equivalente falta (brecha)

Núcleo del motor v2 fuerte

Compilación y versionado del grafo, determinista
Topología, DAG y paralelismo de sucesores
Idempotencia de despachos y cierres (event-log)
Recuperación de leases muertos, watchdog

Gates P0

Detección del gate (no lo despacha como op)
Config completa descartada: protocol, timeout, fallback, rol, event_pattern
Gate 1-fase: aprueba pero NO encadena sucesores
Timeout/fallback del gate (auto_approve/fail/reroute)
Rol mínimo (required_role) — devuelve null
Gate bifásico — causa directa del defecto C

Evaluators P0

Ejecución de evaluator.run (corre y da verdict)
Semántica: ignora verdict, blocking y override humano
Veredicto final del run (solo estructural)

Human task & Budget P0

human_task: sin consumer v2 para task.completed
Budget gate previo al plan (v2 arranca con 0)
Alerta budget 80% — solo v1

Actores & Retries P0

Actor ligado al roster — v2 no lo persiste
Retry policy: v2 aplica 3 uniformes, ignora la declarada
Timeout duro del step y cancelación

Lifecycle final P0

Finalización de intent: queda running para siempre
trace.completed y notificación final
gate.created / por-vencer
Claims / lineage: parcial, faltan gates y auditar templates

03 Orden crítico

fail-closed C → port bifásico v2 → paridad P0 completa → worker v2 estable → rollout gradual → 100% nuevas corridas en v2 → cortar plan.compiled → drenar v1 → retirar de Inngest → borrar código v1 → conservar/migrar historia