Jesús Erro
Explorar conexiones
Director, Implementer y revisora humana conectados por un ciclo luminoso de contexto, CI despachada, navegador validado y cierre verificado.

Director–Implementer Loop R4.3-AG: CI sin espera, contexto fresco y cierre verificable

La Revisión 4 fijó la propiedad del trabajo: el Implementer construye y aporta evidencia; el Director observa, interpreta, decide y cierra. La Revisión 4.1 convirtió esa separación en un protocolo cotidiano: el handoff vive en GitHub, localhost sirve como gate humano y el Implementer sabe cuándo detenerse.

R4.1 funcionó. R4.3-AG no nace para corregir un fracaso, sino para incorporar lo que aprendimos al repetir el loop en repositorios, plataformas y agentes distintos. El resultado es una evolución agent-first: contexto fresco antes de tocar el código, CI lanzada sin espera, un runtime visual que ya no se redescubre en cada tarea, historia de producto separada del diff y un cierre que llega hasta producción verificada.

La forma corta sigue siendo la misma:

Implementer:
builds → validates → launches → shows → stops

Human:
reviews → accepts

Director:
audits → interprets → merges → verifies → closes

Los verbos nuevos afinan la ejecución. No cambian quién decide.

Por qué R4.3-AG y no R4.2

La numeración conserva una historia deliberada. R4.2 fue el experimento de despertar automáticamente al Director mediante Tasks, webhooks o agentes dedicados a vigilar CI. La idea parecía ahorrar una intervención pequeña, pero añadió opacidad, nuevos puntos de fallo y consumo de agentes para hacer polling.

El experimento se rechazó. Borrar ese número o reutilizarlo haría desaparecer un aprendizaje útil:

no toda automatización que elimina un gesto humano mejora el sistema.

Por eso R4.2 permanece como REJECTED EXPERIMENT. R4.3-AG avanza desde R4.1 por otro camino: mejora el trabajo del agente sin reactivar el wake-up automático ni convertir la observación de CI en una flota de watchers.

La genealogía queda así:

R4
ownership

R4.1
GitHub handoff + localhost + human gate

R4.2
rejected automatic wake-up experiment

R4.3-AG
agent-first operational refinement

El sufijo AG identifica ese foco agent-first dentro de jesuserro.com. No intenta sincronizar la numeración con otros proyectos.

CI sin espera

R4 ya distinguía la CI esperada de la CI observada. En la práctica faltaba un estado intermedio: confirmar que el pipeline realmente arrancó.

R4.3-AG lo llama CI DISPATCHED.

expected CI
≠ CI DISPATCHED
≠ observed CI
≠ interpreted CI

Cada concepto responde a una pregunta distinta:

Estado Pregunta Propietario
expected CI ¿Qué gates debería activar este diff? Implementer
CI DISPATCHED ¿GitHub ha lanzado el pipeline? Implementer, una comprobación
observed CI ¿Qué resultados y logs produjo? Director
interpreted CI ¿Qué significan y qué hacemos ahora? Director

CI DISPATCHED no significa CI superada. Significa únicamente que la entrega ya está en manos del sistema remoto.

Esta precisión permite que el Implementer detecte un error obvio —por ejemplo, una PR que no lanzó ningún workflow— sin volver al patrón caro:

checking CI...
waiting...
checking again...

Una comprobación razonable basta. Después, el agente continúa con la validación renderizada, prepara localhost y entrega. El Director observará e interpretará los resultados cuando entre en su turno.

La distinción parece pequeña, pero elimina una ambigüedad real: launch CI ≠ wait for CI.

Contexto fresco antes de implementar

Un agente no trabaja sólo con archivos. Trabaja también con una representación mental —o indexada— del repositorio: módulos, relaciones, rutas, tests, decisiones y nombres del dominio. Esa representación envejece.

R4.3-AG incorpora un gesto normal de pre-flight en el adapter personal:

devx gitnexus analyze

El comando refresca el grafo de contexto antes de la implementación. No demuestra que el cambio sea correcto ni sustituye leer las fuentes relevantes. Su papel es más humilde y más útil: reducir decisiones basadas en una topología caducada.

La frontera de autoridad queda explícita:

Git / tests / DB / runtime = evidence authority
GitNexus                  = context/navigation support

Si GitNexus afirma que una relación existe pero el código actual, los tests o el runtime dicen otra cosa, manda la evidencia actual. Context freshness mejora la navegación; no crea una nueva fuente de verdad.

También importa la forma de operar la herramienta. Se usa el comando personal canónico, no una implementación interna descubierta por casualidad. Y sólo se ejecutan comandos de recovery cuando existe una condición diagnosticada. La familiaridad con una herramienta no justifica tocar todos sus botones.

Reutilizar el runtime visual canónico

La misma disciplina se aplica al navegador. Una tarea con superficie visual no debería empezar instalando Chromium, descargando otro Playwright o inventando un wrapper porque el agente no recordó el existente.

En este entorno ya existe un runtime canónico:

playwright-ui-validation
+
playwright-docker

La skill define qué comprobar. El wrapper Docker aporta un navegador reproducible sin contaminar WSL. Juntos convierten la validación visual en una capacidad del entorno, no en una improvisación de cada PR.

El principio general es sencillo:

reutiliza infraestructura funcional antes de instalar o redescubrir herramientas.

No se trata de prohibir alternativas para siempre. Si el runtime canónico falla de verdad, se diagnostica. Mientras funciona, crear devx playwright por simetría o instalar otro browser sólo multiplica estados posibles.

Backend success no equivale a rendered success

Una build verde demuestra que Astro pudo producir archivos. Un 200 OK demuestra que un servidor respondió. Ninguna de esas señales prueba por sí sola que el lector vea la página correcta.

Una superficie renderizada puede fallar de maneras que el backend no detecta:

  • el título esperado no aparece;
  • la portada se rompe o se recorta mal;
  • un bloque de código desborda en móvil;
  • la tarjeta no entra en el índice /blog/;
  • el enlace histórico apunta a una ruta inexistente;
  • la página carga, pero su contenido está vacío.

Por eso R4.3-AG exige validar la página real cuando hay UI:

backend success
≠ rendered-surface success

La comprobación busca señales visibles y concretas: el título, la portada, la estructura, los enlaces y la aparición del artículo en el índice. Una captura sirve como evidencia; no reemplaza las aserciones, pero deja una fotografía útil para el Director y para el gate humano.

Issue, PR y ADR cuentan historias distintas

Un diff explica cómo cambió el repositorio. No siempre explica por qué existía el problema, qué se probó antes o cuándo puede considerarse cerrada la evolución.

R4.3-AG formaliza tres superficies:

Issue = WHY / product history
PR    = HOW / implementation audit trail
ADR   = durable architectural decision

La Issue conserva el problema, los aprendizajes y la evolución. La PR contiene implementación, diff, validación, Evidence Pack, CI y aceptación. El ADR se reserva para una decisión arquitectónica duradera; no hace falta escribir uno para cada cambio con contexto.

En trabajo significativo, la PR usa:

Refs #N

No Closes #N. La implementación no cierra por sí sola la historia de producto. El Director cierra la Issue después de comprobar:

implemented
+ merged
+ deployed
+ verified

Así, una Issue abierta después del commit no representa trabajo olvidado. Representa honestidad sobre el estado real.

Core + Environment Adapter

El Director–Implementer Loop necesita principios comunes y adaptadores concretos. Si mezcla ambos niveles, una decisión útil de un proyecto puede convertirse en una receta equivocada en otro.

DIL Core

El Core conserva la secuencia independiente de plataforma:

HO
→ implementation
→ local validation
→ Draft PR
→ handoff
→ CI dispatch
→ preview
→ STOP
→ human acceptance
→ Director audit
→ CI interpretation
→ expected-head merge
→ deployment verification
→ closure

Adapter jesuserro.com

Aquí ese Core se expresa con piezas concretas:

GitHub
Vercel
localhost
WSL
devx
GitNexus
playwright-docker

El cierre de producción sigue el comportamiento real del sitio:

merge
→ post-merge CI
→ Vercel production deployment
→ production verification

Otro entorno puede tener registros, promociones o plataformas distintas. Copiar literalmente Deploy DEV → Promote PROD a un proyecto que no opera así no hace el Core más reusable; sólo oculta la realidad detrás de vocabulario ajeno.

La separación permite conservar lo importante —ownership, evidencia, aceptación, expected-head y cierre— mientras cada adapter usa sus herramientas reales.

El estado del trabajo debe poder nombrarse

R4.3-AG no introduce un state manager. Introduce un vocabulario para no confundir momentos distintos:

PLANNED

IMPLEMENTING

LOCAL_VALIDATED

PR_DRAFT

CI_DISPATCHED

PREVIEW_READY

IMPLEMENTER_STOP

HUMAN_ACCEPTED

DIRECTOR_AUDITED

CI_ACCEPTED

READY

MERGED

PROD_DEPLOYED

PROD_VERIFIED

CLOSED

CLEAN

No todos los cambios necesitan una máquina que persista cada transición. Sí necesitan un lenguaje que impida afirmar demasiado pronto que algo está «terminado».

implementation complete
≠ human accepted
≠ mergeable
≠ merged
≠ deployed
≠ production verified
≠ closed

Esta lista también aclara los límites del Implementer. Su turno termina en IMPLEMENTER_STOP, después de entregar evidencia, confirmar dispatch y dejar el preview listo. El producto todavía no está cerrado; ahora empieza el trabajo del humano y del Director.

Cierre verificable

En muchos flujos, el verbo «terminar» se usa para momentos incompatibles: hice commit, abrí PR, mergeé o vi el deployment. R4.3-AG reserva el cierre para una cadena completa.

El Director entra con un head_sha exacto. Audita ese HEAD, respeta la aceptación humana, observa e interpreta CI, enruta fallos y sólo entonces marca Ready. El merge usa expected-head: una auditoría de A no autoriza B.

Después del merge todavía quedan hechos que comprobar:

post-merge CI

Vercel production deployment

production verification

product-history closure

remote cleanup

single local/WSL sync

Una tag o release sólo aparece cuando añade valor real. No se crea por ritual. La Issue de historia se cierra cuando producción está verificada. La rama remota y el workspace se limpian al final, no antes de perder una referencia necesaria.

El objetivo no es alargar ceremonias. Es evitar que el sistema llame «cerrado» a algo cuyo estado todavía depende de una suposición.

El HO declara también cómo se ejecutará

Hasta ahora un HO podía explicar perfectamente el trabajo y dejar implícita una decisión importante: qué agente debía ejecutarlo y con qué configuración.

R4.3-AG hace explícita esa decisión mediante una cabecera mínima al inicio de cada HO:

Agente: Codex
Modelo: Sol
Modo: build
Esfuerzo: high

Cuatro ejes:

  • Agente → quién implementa.
  • Modelo → qué capacidad concreta se selecciona.
  • Modoplan o build.
  • Esfuerzolow, medium o high.

No todas las tareas necesitan el mismo implementador ni la misma profundidad. Un cambio pequeño y determinista como incorporar esta misma regla puede delegarse a Big Pickle con esfuerzo low. Una refactorización arquitectónica pertenece a un agente con mayor capacidad de navegación y razonamiento.

El catálogo de modelos evoluciona sin necesidad de versionar el protocolo. Lo que importa es que la selección sea explícita.

El primer dogfooding de R4.3-AG

Este artículo y el protocolo que describe se entregaron usando R4.3-AG.

Antes de escribir, el Implementer protegió el workspace, comprobó la base y ejecutó devx gitnexus analyze. La evolución recibió una Issue de producto propia. El runbook y la skill se actualizaron sin cambiar el schema v1 del handoff. La portada reutilizó la convención visual de la serie. El contenido pasó schema, checks, build y una validación real mediante playwright-docker.

Después del push, el Implementer confirmó CI DISPATCHED una sola vez, publicó un Evidence Pack ligado al HEAD, dejó localhost disponible y se detuvo. El humano conserva el gate visual. El Director conserva CI, Ready, merge, Vercel, producción, cierre de la Issue y limpieza.

Durante el proceso surgió esta misma mejora. El Director la detectó como delta, seleccionó Big Pickle con modo build y esfuerzo low para implementarla. La demostración es el propio delta:

task complexity → implementer selection → explicit execution profile

Dogfooding no significa que el protocolo se autoapruebe. Significa que se somete a sus propias fronteras:

el protocolo construye su entrega
pero no se concede su propia aceptación

R4.3-AG en una frase

R4 separó responsabilidades. R4.1 dio al handoff un hogar y al humano un gate útil. R4.3-AG hace que los agentes lleguen con contexto fresco, lancen CI sin quedarse esperando, usen el runtime visual existente y no confundan una implementación completa con un producto cerrado.

El loop resultante no busca automatizar cada gesto. Busca que cada gesto tenga propietario, evidencia y un final verificable.