Jesús Erro
Explorar conexiones
Flujo Director–Implementer Loop Revisión 3 desde LOCAL y GitHub CI hasta Azure DEV, promoción del mismo artefacto, Azure PROD y Release.

Director–Implementer Loop, Revisión 3: del código a una versión verificable

La Revisión 1 separó implementar de aprobar. La Revisión 2 separó integrar, desplegar y verificar. Esta tercera fotografía amplía el mismo contrato hasta el punto en el que una mutación puede convertirse en una versión verificable: no sólo código en main, sino un artefacto identificado, promovido, validado en producción y, sólo entonces, publicado.

La tesis ya no cabe en una sola desigualdad. El recorrido completo es:

implemented
  ≠ integrated
  ≠ deployed to DEV
  ≠ promoted
  ≠ deployed to PROD
  ≠ verified in PROD
  ≠ released

Cada transición exige evidencia distinta. Superar una no autoriza a asumir la siguiente.

Qué no cambia

El Director sigue fijando intención, arquitectura, alcance e invariantes. El Implementer propone una mutación y aporta evidencia sin autoaprobarla. El desarrollo permanece Trunk-Based Development PR-gated, con main como trunk, auditoría del HEAD_SHA antes de integrar y correcciones quirúrgicas cuando aparece un defecto material.

También se conservan BASE_SHA y HEAD_SHA como identidades del trabajo, la separación Integration Gate / Deployment Gate, y la distinción entre Core reutilizable y Project Profile. La Revisión 3 no sustituye ese núcleo: lo extiende hasta el Release Gate.

Qué cambia en la Revisión 3

Revisión 2 Revisión 3
merged ≠ deployed ≠ verified cadena completa hasta released
Deployment Gate genérico DEV, promoción y PROD como estados distintos
Artefacto implícito en el despliegue identidad explícita del artefacto oficial
Verificación del entorno validación PROD antes de versionar
Cierre próximo al deployment Release Gate + aprobación humana
Tag/release no formalizados Milestone, estados de release y GitHub Release

La ampliación no añade ceremonia por gusto. Hace visibles estados que ya existían cuando el proyecto despliega a varios entornos, construye un artefacto oficial y decide cuándo una historia de trabajo merece un número de versión público.

El flujo completo

El diagrama central resume la política vigente. En el Project Profile de IXATU, la Release se publica después de validar PROD. No se trata el tag como prerrequisito de la promoción.

LOCAL / WSL

Implementación

QA local

────────────────
GITHUB / CI

Director Audit

PASS

main @ SHA

────────────────
AZURE DEV

build oficial

artefacto :SHA

DEV VALIDADO

────────────────
PROMOCIÓN

mismo artefacto
sin rebuild
mismo digest

────────────────
AZURE PROD

activación

PROD VALIDADO

────────────────
RELEASE GATE

READY TO RELEASE

aprobación humana

tag vX.Y.Z
+ GitHub Release

RELEASED

La secuencia visible es LOCAL → GitHub / CI → Azure DEV → Promoción → Azure PROD → Release. Cada bloque responde a una pregunta distinta: ¿funciona en el workspace?, ¿puede integrarse?, ¿el artefacto oficial es aceptable?, ¿es el mismo contenido el que llega a PROD?, ¿PROD lo confirma?, ¿merece publicarse una versión?

Doble cadena de custodia

Hay dos trazabilidades que no deben confundirse.

Código

BASE_SHA

HEAD_SHA

Director Audit

merge protegido

MAIN_SHA

Esta cadena responde: ¿qué commit exacto entró en main tras una auditoría aceptada?

Artefacto

MAIN_SHA

build oficial

imagen Docker :SHA

digest sha256

DEV

promoción

mismo digest en PROD

revisión / runtime PROD

Esta cadena responde: ¿qué bytes exactos se validaron y se están ejecutando?

La versión humana cierra ambas:

vX.Y.Z
   → MAIN_SHA
   → artefacto validado
   → estado que funcionó y se validó en PROD

Un Git tag apunta a un commit. Un Docker tag etiqueta una imagen. No son el mismo objeto. Confundirlos borra la frontera entre historia del código e identidad del binario desplegado.

Milestone y Release Gate

Un Milestone define alcance: ¿qué queremos terminar? Sin esa pregunta, cualquier SHA puede parecer «casi una versión».

El Release Gate define aceptación: ¿está realmente terminado y aceptado lo que el milestone prometía? No basta con que CI esté verde o con que PROD responda. Hay que poder afirmar que la historia de esa versión se sostiene con evidencia.

Estados explícitos:

NO RELEASE
READY TO RELEASE
RELEASED

READY TO RELEASE no es un sentimiento. Es una decisión auditable del Director que fija, como mínimo:

  • versión recomendada;
  • SHA exacto;
  • milestone cubierto;
  • gates satisfechos;
  • pendientes no bloqueantes.

La publicación final —crear el tag y el GitHub Release— requiere aprobación humana. El Director puede recomendar; no convierte automáticamente una recomendación en una versión pública.

Tags y GitHub Release

Los tags de versión son inmutables. Apuntan a un SHA ya integrado. No se mueven para «corregir» una versión publicada. Si hace falta una corrección, se produce otra versión.

El GitHub Release publica y explica el hito asociado al tag: qué historia cuenta, qué SHA la sostiene y qué artefacto quedó validado. Antes de crear esa versión debe poder responderse:

¿Qué historia cuenta esta versión?

Si la respuesta es vaga, el Release Gate todavía no está cerrado.

Core universal frente a Project Profile

No todo lo anterior es un requisito de Azure.

Core reutilizable

  • implementación y aceptación separadas;
  • cadena de custodia por SHA;
  • Integration Gate;
  • Deployment Gate(s);
  • Release Gate;
  • identidad del artefacto;
  • no asumir estados posteriores por superar uno anterior;
  • tag de versión inmutable;
  • aprobación humana cuando el proyecto la requiera.

Project Profile — IXATU (sanitizado)

  • LOCAL / WSL;
  • GitHub y GitHub Actions;
  • Azure DEV y Azure PROD;
  • Docker, ACR y Container Apps;
  • OIDC / Microsoft Entra;
  • promoción DEV → PROD del mismo artefacto;
  • validación de digest;
  • Release después de PROD.

Azure no es un requisito universal del Director–Implementer Loop. Es el perfil que permitió formular con nitidez la cadena artefacto → promoción → validación → release. Otro proyecto puede materializar los mismos estados con otra plataforma, siempre que no colapse estados distintos bajo una sola etiqueta.

Relación con build once / promote

La promoción sin rebuild no es un detalle de plataforma: es la forma concreta de no romper la cadena de custodia del artefacto. El artículo Construir una vez, promover el mismo artefacto desarrolla esa invariante. Aquí basta fijar la regla operativa: DEV valida el candidato; PROD ejecuta ese mismo contenido; sólo después el Release Gate puede recomendar una versión.

La configuración por entornos completa el cuadro: cambiar URLs, secretos o datos no autoriza a reconstruir el binario. El recorrido Docker → ACR → Container Apps muestra cómo se materializa esa identidad en el perfil Azure.

Una versión es un cierre, no un atajo

La Revisión 1 hizo visible que implementar y aprobar no son la misma responsabilidad. La Revisión 2 llevó esa idea hasta integrar, desplegar y verificar. La Revisión 3 añade la consecuencia que faltaba cuando el trabajo cruza varios entornos y pretende convertirse en una versión pública:

un SHA integrado no es un artefacto; un artefacto en DEV no es PROD; PROD validado no es todavía una release.

Sólo cuando la historia, el commit, el digest y la evidencia de producción se sostienen juntos —y un humano lo aprueba— tiene sentido declarar RELEASED.