Ir al contenido

Pipeline

Integración y entrega continua es donde el control deja de depender de que alguien se acuerde. Pero un pipeline armado para código escrito a mano no cubre lo que cambia cuando el que escribe es un agente.

Un pipeline no revisa código. Comprueba que la revisión ya ocurrió — y se planta si el contenido cambió después.

ComprobanteDespués de escribir01post-applyAntes del commit02pre-commitAntes del push03pre-pushAntes del PR04pre-prAntes del release05release
Los cinco puntos de salida

Los cinco puntos de salida

Un cambio no sale de un salto: pasa por puntos. Cada uno establece algo distinto, y el error más caro es pedirle a uno lo que le corresponde a otro. Estos son los nombres que usa gentle-ai, y sirven igual si tu pipeline se llama de otra forma.

  1. 01

    Después de escribir

    post-apply

    Qué deja probado

    Que el cambio está terminado y que lo miró algo que no es quien lo escribió.

    El error de siempre

    Saltearlo porque “lo fui mirando mientras lo escribía”. El que escribe es el peor ubicado para juzgar: el mismo razonamiento que produjo el error es el que está revisando.

    Qué corre acá

    • La revisión, una sola vez, sobre un objetivo congelado.
    • El análisis que corresponda al riesgo del cambio, no el mismo para todo.
    • El cierre con un comprobante atado a ese contenido exacto.
  2. 02

    Antes del commit

    pre-commit

    Qué deja probado

    Que lo que vas a guardar es exactamente lo que se revisó.

    El error de siempre

    Poner acá un formateador que modifica archivos. Si toca un byte, lo que se revisó ya no es lo que se commitea, y el comprobante deja de aplicar. Normalizá antes de revisar, no después.

    Qué corre acá

    • Formato, lint y tipos en modo verificación.
    • La validación del comprobante contra lo que está en el índice.
  3. 03

    Antes del push

    pre-push

    Qué deja probado

    Que lo que está por salir de tu máquina sigue siendo el contenido que se revisó, y que pasa entero y no por partes.

    El error de siempre

    Repetir acá todo lo que ya corriste en el commit. El gate se vuelve lento, la gente lo saltea con una bandera, y a partir de ahí no existe.

    Qué corre acá

    • Los chequeos que siguen siendo rápidos sobre lo que cambió — tipos, lint, los tests de alrededor.
    • La validación del mismo comprobante, sin abrir una revisión nueva.
  4. 04

    Antes del PR

    pre-pr

    Qué deja probado

    Que el cambio es revisable por una persona, y que la evidencia de CI corresponde a ese contenido y no a otro.

    El error de siempre

    Abrir un PR de dos mil líneas y esperar que la revisión humana encuentre lo que el pipeline no buscó. Un PR así no se revisa: se aprueba.

    Qué corre acá

    • La validación del comprobante contra el árbol candidato.
    • La atestación de CI para ese commit exacto.
    • El control de tamaño: si no entra en la cabeza del revisor, se parte.
  5. 05

    Antes del release

    release

    Qué deja probado

    Que lo que se publica es el árbol exacto que pasó todo lo anterior, y que la evidencia sigue siendo fresca.

    El error de siempre

    Etiquetar una rama en vez de un commit. Una rama se mueve; un release no puede moverse después de publicado.

    Qué corre acá

    • Procedencia del artefacto y del árbol publicado.
    • Verificación de que la evidencia no venció y de que la cabeza remota no se movió.
    • El límite de publicación: qué sale y qué no.

Qué cambia con un agente en el medio

Nada de esto es nuevo del todo. Lo nuevo es la frecuencia: comportamientos que antes aparecían una vez por sprint ahora aparecen varias veces por día, y a esa frecuencia dejan de ser anécdotas y pasan a ser el sistema.

Arregla el test, no el código

Cuando el pipeline falla, la salida más barata para un agente es tocar el test hasta que pase. Es la reparación correcta en una minoría de los casos y la que va a elegir en el resto. Un fix de CI se revisa al revés que otro cambio: primero mirás qué tocó, después si pasa.

El reintento como estrategia

Un test intermitente enseña que reintentar funciona. Un agente que puede reintentar lo va a hacer, y va a llegar a verde sin haber arreglado nada. Un test flaky dejó de ser una molestia: es una puerta abierta.

El cuello de botella se mudó

Generar cambios se abarató, así que hay más PRs, más chicos y más seguido. El límite del equipo pasó a ser la cola de CI y la capacidad de revisión. Optimizar la parte de escribir código ya no mueve la aguja.

CI ahora cuesta tokens

Si corrés agentes dentro del pipeline —revisión, triage, generación de tests— cada push tiene un precio variable además del tiempo. Sin un presupuesto declarado, el gasto lo descubrís a fin de mes.

Verde no significa correcto

El agente escribe código que pasa lo que hay. Si tu pipeline solo corre lint y tests, estás midiendo si el código es plausible, no si es correcto. Lo que agrega señal real es lo que el agente no puede anticipar: tipos estrictos, contratos, y una revisión que no la haga quien escribió.

Qué corre en tu máquina y qué corre en CI

El criterio no es la importancia, es el tiempo y el determinismo. Local va lo rápido y lo que da siempre el mismo resultado; en CI va lo lento, lo aislado y lo que necesita un entorno limpio. Un gate local que tarda dos minutos se saltea con una bandera y todos lo sabemos.

En tu máquina

  • Formato y lint en modo verificación, nunca en modo modificación.
  • Tipos: es la comprobación más barata que tenés.
  • Los tests de la unidad que tocaste, no la suite entera.
  • La validación del comprobante de revisión.

En CI

  • La suite completa, en un entorno que no es la máquina de nadie.
  • El build de producción, con las mismas versiones que se publican.
  • Integración, migraciones y todo lo que necesita servicios reales.
  • Auditoría de dependencias y la evidencia que después se cita en el PR.

Nada de esto reemplaza el juicio. Un gate determinista te dice que algo se rompió; nunca te va a decir que estás construyendo lo que no había que construir. Eso sigue siendo tuyo.