Director–Implementer Loop, Revisión 4: evidencia estructurada y CI bajo el Director
La Revisión 1 separó implementar de aprobar. La Revisión 2 distinguió integración, despliegue y verificación. La Revisión 3 extendió la cadena hasta el artefacto verificable, la promoción y el Release Gate.
La Revisión 4 nace de otra fricción más cotidiana: el Implementer estaba haciendo demasiado trabajo operativo después de haber terminado de implementar.
Era habitual que un agente terminara el código, ejecutara sus tests, hiciera push y abriera la PR, pero siguiera consumiendo tiempo y tokens esperando GitHub Actions, consultando estados, interpretando fallos, vigilando Vercel y relatando una secuencia que el Director debía volver a comprobar después.
La nueva regla es sencilla:
El Implementer construye y aporta evidencia. El Director observa, interpreta, decide y cierra.
No es sólo una optimización de coste. Es una separación más limpia de responsabilidades.
El cambio central
Hasta R3, la frontera entre construcción y operación seguía siendo algo difusa en la práctica. El Implementer podía terminar convertido temporalmente en programador, QA operator, observador de CI y operador de GitHub.
R4 fija una frontera explícita:
IMPLEMENTER
───────────
implementación
↓
validación local
↓
self-review del diff
↓
commit + push
↓
Draft PR
↓
Evidence Pack
↓
FIN DE SU TURNO
DIRECTOR
────────
auditoría independiente
↓
observación de CI
↓
interpretación / routing
↓
Vercel / deployment evidence
↓
Ready
↓
expected-head merge
↓
post-merge verification
El Implementer puede conocer qué CI espera provocar, pero no tiene que quedarse esperando a comprobarlo.
Ese matiz es importante:
predecir CI ≠ observar CI ≠ interpretar CI
La predicción forma parte de la evidencia del Implementer. La observación y la interpretación pertenecen al Director.
Nuevo contrato de salida del Implementer
Un trabajo normal queda terminado para el Implementer cuando puede entregar:
- rama dedicada;
BASE_SHAconocido;HEAD_SHAexacto;- diff revisado;
- validación local proporcional al riesgo;
- commits publicados;
- Draft PR;
- Evidence Pack;
- routing de CI esperado.
No necesita añadir:
"esperaré a CI"
"volveré a comprobar Vercel"
"el deployment sigue pendiente"
El agente sale del loop en ese punto.
Esto evita una duplicación que se había vuelto evidente: si el Director va a tomar la decisión final, no tiene sentido pagar dos veces la misma observación.
Evidence Pack: hechos antes que relato
R4 introduce una superficie explícita de evidencia estructurada.
El problema no era que los implementadores informasen mal. Muchos informes eran excelentes. El problema es que una narración sigue siendo una narración: puede omitir sin querer un archivo, confundir una base local desactualizada o describir como hecho algo que sólo era una expectativa.
El Evidence Pack separa dos capas:
HECHOS GENERADOS
───────────────
branch
base SHA
HEAD SHA
working tree
commits
changed files
áreas afectadas
routing CI esperado
estado canonical disponible
INTERPRETACIÓN
──────────────
decisiones
riesgos
pendientes
motivos
La primera capa debe poder ser generada por máquina. La segunda sigue necesitando juicio.
Tres superficies read-only
En jesuserro.com R4 se materializa inicialmente con tres comandos.
director:audit
npm run director:audit
Resume el workspace sin modificarlo:
repository
branch
base SHA
HEAD SHA
working tree
commits ahead
changed files
CI areas
expected CI Draft
expected CI Ready
scope flags
También existe salida estructurada:
npm run --silent director:audit -- --json
La salida JSON incluye schemaVersion, de forma que otra herramienta o agente puede consumirla sin parsear prosa.
El comando no hace fetch, pull, reset, checkout ni ningún write. Describe el estado que realmente observa.
canonical:director:report
npm run canonical:director:report
El segundo comando aplica la misma idea al PostgreSQL canonical.
Su contrato es deliberadamente read-only. Puede informar de:
- conectividad;
- counts agregados;
- checkpoint/authority disponible;
- estado de materialización;
- ledger de migraciones cuando puede observarse;
- warnings sanitizados.
No muestra passwords, connection strings completas, bodies editoriales ni errores crudos que puedan contener secretos.
La intención es que el formato sobreviva a la infraestructura. Hoy la base canonical puede ser local; mañana puede estar en Neon u otro PostgreSQL. El contrato del Director no debería cambiar por ello.
PostgreSQL local ─┐
├─→ canonical:director:report → humano / JSON
PostgreSQL cloud ─┘
Cuando exista una base compartida, la evolución natural es una identidad específica del Director con permisos de lectura:
CONNECT
USAGE
SELECT
pero nunca INSERT, UPDATE, DELETE ni DDL.
director:handoff
npm run director:handoff
El tercer comando compone la evidencia anterior en un paquete de entrega.
No vuelve a implementar la lógica de Git ni la de PostgreSQL: reutiliza ambas superficies.
Su objetivo es responder de forma compacta:
¿qué se ha cambiado?
¿desde qué base?
¿qué HEAD exacto debo auditar?
¿qué áreas deberían activar CI?
¿hay canonical disponible?
¿hay blockers locales observables?
¿está listo para que entre el Director?
Hay una regla especialmente importante: no inventa tests.
Si el comando no ejecutó npm test, no puede declarar PASS.
La validación local continúa siendo responsabilidad del Implementer y se adjunta como evidencia separada.
CI pasa a ser una responsabilidad operativa del Director
R4 cambia también la propiedad de CI.
El flujo normal es:
Draft PR
↓
Director observa CI
↓
¿fallo?
├─ no → continuar
└─ sí
↓
Director triage
├─ flaky / infraestructura → rerun del Director
├─ workflow / integración → Director o microfix dirigido
└─ regresión de implementación → vuelve al Implementer
El Implementer sólo vuelve cuando hay algo que realmente requiere implementación.
Y vuelve con una petición focal, no con una investigación abierta del tipo «mira qué pasa con CI».
Ejemplo:
gate: canonical integration
expected: 31 reviews
actual: 32 reviews
HEAD: <sha>
error: <evidencia concreta>
Fix only this regression.
Eso convierte los tokens del Implementer en capacidad de resolución, no en capacidad de vigilancia.
Draft y Ready son dos niveles de coste distintos
La clasificación de cambios ya permitía adaptar CI al riesgo. R4 integra esa idea en el Evidence Pack.
Para una PR normal puede existir:
Draft
→ tests/check focales
→ canonical si corresponde
→ sin build completo
Ready
→ build completo
→ smokes
→ gates finales
El Implementer declara qué routing espera. El Director comprueba que la realidad coincide.
Esa comparación es útil porque detecta dos tipos de problema:
- el código está mal clasificado;
- el workflow no está haciendo lo que creemos.
Por tanto el routing esperado es también una especificación ejecutable del pipeline.
Documentación: el caso límite de CI mínimo
R4 no significa ejecutar siempre más CI. Significa ejecutar el CI proporcional al riesgo y bajo una responsabilidad clara.
Una modificación exclusivamente documental puede seguir una vía mucho más corta:
Markdown-only
↓
frontmatter válido
↓
diff limpio
↓
clasificación docs/content conocida
↓
PR pequeña
↓
verificación mínima necesaria
↓
merge
↓
Vercel
No tiene sentido reconstruir bases de datos, ejecutar suites no relacionadas o convertir una corrección editorial en un proceso de varios minutos si el changeset no puede afectar esos subsistemas.
La consecuencia de R4 no es «más gates» sino:
cada gate debe justificar su relación con el riesgo real del cambio.
Vercel deja de pertenecer al Implementer
En jesuserro.com, Vercel forma parte del perfil de despliegue.
El Implementer no necesita esperar Preview. El Director puede observar el check de deployment, inspeccionar el Preview cuando sea necesario y decidir si la evidencia es suficiente.
Los conectores directos —Vercel hoy, PostgreSQL/Neon mañana— son aceleradores de esta función, pero no son nuevas fuentes de verdad.
La regla es:
Implementer writes
Director reads and verifies
Siempre que sea viable, la superficie del Director debe ser read-only.
La autoridad del contenido también debe estar clara
La separación de roles operativos sería incompleta si no sabemos qué sistema manda sobre los datos.
En el frente de Reviews, R4 coincide con una decisión arquitectónica más general:
PostgreSQL
= única fuente canonical
Obsidian
= editor / interfaz de trabajo
Markdown
= working copy / materialización
Git
= versionado técnico, auditoría y deployment auxiliar
Goodreads
= evidencia externa
El Director debe auditar la fuente canonical, no inferirla a partir de una copia secundaria cuando ambas puedan diferir.
Esto explica por qué canonical:director:report importa: observabilidad y autoridad deben apuntar al mismo sistema.
Read-only no significa poco poder
Una de las lecciones de R4 es que el Director necesita mucha capacidad de observación y poca capacidad accidental de mutación.
Un buen Director puede:
- leer PR y diff;
- inspeccionar checks;
- revisar logs;
- comparar
HEAD_SHA; - consultar estado canonical;
- inspeccionar deployments;
- decidir routing;
- hacer reruns;
- proteger un merge por expected-head.
No necesita escribir en PostgreSQL para saber si PostgreSQL es correcto.
Esta asimetría es deseable:
más observabilidad
+
menos autoridad accidental
=
mejor dirección
Expected-head merge sigue siendo el cierre técnico
R4 conserva una de las invariantes importantes de revisiones anteriores: la auditoría pertenece a un SHA exacto.
Si el Director audita:
HEAD_SHA = A
el merge debe rechazar silenciosamente cualquier sustitución por:
HEAD_SHA = B
Por eso el cierre sigue usando expected-head.
La secuencia es:
HEAD A
↓
Director audit
↓
CI / deployment evidence sobre A
↓
merge permitido sólo si HEAD sigue siendo A
La decisión deja así de ser «aprobar esta PR» y pasa a ser una afirmación mucho más precisa:
apruebo exactamente esta mutación, sobre esta base y con esta evidencia.
El primer dogfooding de R4
La propia implementación de estas herramientas sirvió para probar el nuevo flujo.
El Implementer:
implementó
→ validó localmente
→ abrió Draft PR
→ entregó Evidence Pack
→ salió del loop
El Director continuó:
auditoría del diff
→ comprobación del routing previsto
→ observación de CI Draft
→ paso a Ready
→ CI completo
→ comprobación Vercel
→ expected-head squash merge
→ verificación post-merge
No hubo que devolver trabajo al Implementer.
Además, el routing pronosticado por el Evidence Pack coincidió con el ejecutado por CI. Esa coincidencia convirtió la primera ejecución de R4 en una prueba del propio modelo.
Core reutilizable frente a Project Profile
Como en revisiones anteriores, conviene separar patrón y plataforma.
Core R4
- Director e Implementer con ownership explícito;
- Implementer termina en Draft PR + Evidence Pack;
- evidencia generada por máquina cuando sea posible;
- salidas humana y JSON;
- CI observado e interpretado por el Director;
- failure routing antes de devolver trabajo;
- superficies del Director preferentemente read-only;
- validación proporcional al riesgo;
- expected-head merge;
- verificación post-merge.
Project Profile — jesuserro.com
- GitHub PR-gated;
director:audit;canonical:director:report;director:handoff;- GitHub Actions con routing Draft/Ready;
- PostgreSQL canonical;
- Vercel Preview y producción;
- futuro acceso PostgreSQL cloud read-only cuando exista necesidad real.
Otros perfiles
IXATU puede conservar Azure, ACR, Container Apps u otras superficies. El patrón no exige Vercel ni Neon.
Lo reusable es la separación:
build
≠ evidence
≠ observation
≠ decision
≠ deployment verification
Qué hemos eliminado del loop
R4 es también una revisión por sustracción.
Eliminamos del turno normal del Implementer:
- polling de CI;
- polling de Vercel;
- interpretación global de fallos;
- reruns;
- decisión Ready;
- merge;
- verificación post-merge.
No porque esas tareas sean poco importantes, sino porque tienen un propietario mejor.
Y eliminamos del Director parte del trabajo manual de reconstruir el estado de la PR:
- rama;
- SHA base;
- SHA cabeza;
- archivos afectados;
- routing esperado;
- estado canonical agregado.
La máquina prepara los hechos. El Director usa su tiempo en juzgarlos.
R4 en una frase
La Revisión 3 llevó el loop del código a una versión verificable. La Revisión 4 mejora quién hace cada parte del recorrido y cómo se transporta la evidencia entre ambos lados.
La nueva frontera es:
Implementer
= construir + validar localmente + entregar evidencia
Director
= observar + interpretar + decidir + integrar + verificar
El objetivo no es que el agente haga menos por hacer menos. Es que cada agente haga sólo el trabajo para el que aporta más valor.
Cuando eso ocurre, el loop se vuelve más rápido, más barato y también más verificable: menos polling duplicado, menos relato manual, más evidencia estructurada y una cadena de decisión mucho más clara.