Saltar al contenido

Test con ejemplos para copiar

¿Cuántas de las 10 puertas frenan el código de IA malo en su CI?

El código malo de un agente de IA lo frenan en la CI diez puertas: lint, comprobación de tipos, tests obligatorios, patrones prohibidos, escaneo de secretos, guardián de migraciones, control de dependencias, plantilla de PR con sección sobre IA, regla de review y rama protegida. Marque las que tiene y verá al momento su puntuación y las que faltan, de mayor a menor riesgo. Debajo de la lista, cada puerta tiene un ejemplo para GitHub Actions.

Lo que rellena y marca se queda solo en esta ventana del navegador. No enviamos nada salvo que pida la evaluación por correo. Al cerrar la página desaparece, así que imprima su resultado.

Para CTO y tech leads cuyo equipo ya escribe código con Claude Code, Codex o Cursor. Una regla en AGENTS.md el agente se la puede saltar. Una puerta en la CI, no. Los ejemplos son para GitHub Actions y pnpm. En GitLab CI cada puerta es el mismo comando dentro de script:.

Hoy la IA escribe todo nuestro código y un senior responde del resultado. La mayoría de los ejemplos sale de nuestro repositorio público claude-code-production-starter, donde los encontrará completos.

1. ¿Qué puertas tiene ya?

Marque solo lo que de verdad bloquea la fusión. Una puerta que solo avisa no cuenta.

2. Diez puertas con ejemplos

El lint bloquea la fusión

Un lint que solo avisa, el agente lo ignora. Ejecútelo en la CI y deje que falle. Cuando introduzca una regla estricta nueva en código antiguo, registre las infracciones de hoy y haga que la CI falle si aumentan.

- run: pnpm lint --max-warnings 0

Comprobación de tipos en modo strict

Al agente le gusta cambiar un tipo a any para que el código pase. El modo strict y un paso propio en la CI lo impiden.

# tsconfig.json: "strict": true
- run: pnpm exec tsc --noEmit

Los tests son obligatorios y demuestran algo

Un test que también pasa en la rama principal no demuestra nada. El código fuente cambiado necesita un test cambiado, y ese test debe fallar en la rama principal y pasar en la suya. Una excepción (un refactor puro) la aprueba una persona con una etiqueta, no el agente.

- name: Los tests cambiados fallan en base y pasan aquí
  if: "!contains(github.event.pull_request.labels.*.name, 'skip-red-proof')"
  run: bash scripts/gate.sh red-proof "origin/${{ github.base_ref }}"

Patrones prohibidos

Algunos atajos de los agentes se encuentran con una búsqueda simple: .only en un test, la comprobación de tipos desactivada, el lint desactivado. Haga que fallen en la CI.

- name: Patrones prohibidos
  run: "! git grep -nE '(it|test|describe)\\.only\\(|@ts-ignore|eslint-disable' -- src tests"

Escaneo de secretos

Una clave en un commit sigue siendo un problema aunque la borre, porque queda en el historial. Escanee antes del commit (hook) y en la CI.

- uses: actions/checkout@v5
  with:
    fetch-depth: 0
- run: docker run --rm -v "$PWD:/repo" ghcr.io/gitleaks/gitleaks:latest git /repo --redact

Guardián de migraciones

Una migración de base de datos no se deshace tan fácil como el código. Un PR que cambia migraciones solo pasa con una etiqueta puesta por una persona. Ejecutar una migración en producción requiere confirmación en la configuración del agente.

- name: Migraciones solo con etiqueta
  if: "!contains(github.event.pull_request.labels.*.name, 'migration-ok')"
  run: "! git diff --name-only origin/${{ github.base_ref }}... | grep -E '(^|/)migrations/'"

Control de dependencias

El agente añade un paquete cuando la tarea lo necesita. Compruebe que no tiene ninguna vulnerabilidad grave conocida y mantenga las dependencias actualizadas con regularidad.

- run: pnpm audit --audit-level high
# .github/dependabot.yml: package-ecosystem npm, schedule weekly

Plantilla de PR con sección sobre IA

El PR debe decir cómo se verificó el cambio y qué no hizo el autor. Así el revisor sabe dónde mirar.

## Cómo se verificó
- [ ] el gate está en verde, incluido red-proof
- [ ] ningún test se debilitó, se saltó ni se borró

## Qué escribió el agente y qué revisó el autor
<!-- Qué partes generó el agente, qué revisó usted línea por línea. -->

## Qué no está hecho

Regla de review

Un cambio lo aprueba alguien que no lo escribió. Las reglas para agentes y la CI solo las cambian sus dueños; si no, con el tiempo el agente afloja sus propias puertas.

# .github/CODEOWNERS
*             @su-empresa/equipo
/.claude/     @su-empresa/dueno-reglas
/.github/     @su-empresa/dueno-reglas
/AGENTS.md    @su-empresa/dueno-reglas

Rama protegida

Todo lo anterior solo vale si la rama principal no se puede saltar. Una comprobación resumen ci, PR obligatorio, aprobación del dueño del código y reglas también para los administradores.

gh api -X PUT repos/SU-EMPRESA/REPO/branches/main/protection \
  -F 'required_status_checks[strict]=true' -f 'required_status_checks[contexts][]=ci' \
  -F 'required_pull_request_reviews[required_approving_review_count]=1' \
  -F 'required_pull_request_reviews[require_code_owner_reviews]=true' \
  -F enforce_admins=true -F restrictions=null

Más herramientas para usted

¿A qué distancia está de un SDLC AI-native? 12 preguntas

12 preguntas sobre reglas para agentes de IA, controles de CI y responsabilidad. Vea dónde está hoy su equipo.

IA en el SDLC en 30 días: un plan semana a semana

Reglas en AGENTS.md, puertas de CI y hooks, review y medición. Cuatro semanas con ejemplos de nuestro repositorio público.

Preguntas frecuentes

¿Qué es una puerta de CI?
Un control en la CI que bloquea un cambio en lugar de solo avisar. Un lint, un test o un escaneo que falla ante un error y sin el que el PR no se puede fusionar.
¿Qué es un test red-proof?
La comprobación de que un test cambiado falla en la rama principal y pasa en la suya. Un test que pasa también sin su cambio no demuestra nada. Así el agente no puede escribir un test que pase siempre.
¿Qué puertas implantar primero?
Rama protegida, tests obligatorios y escaneo de secretos. Sin rama protegida todas las demás se pueden saltar, sin tests la CI no demuestra nada y una clave filtrada queda en el historial aunque la borre.
¿Sirve también fuera de GitHub Actions?
Sí. Los ejemplos son para GitHub Actions y pnpm, pero cada puerta es un comando normal que falla. Lo ejecuta igual en GitLab CI, Bitbucket Pipelines o en su propio servidor.

¿Por dónde se cuela el código de IA?

El siguiente paso es IA en el SDLC: configuramos las puertas y las reglas junto con su equipo.