Cada clase aportó una pieza: evaluador, criterios, guardia, atajos, evals, juez. La compuerta las pone en cola, de las baratas a las caras: lo que el código reprueba no llega a gastar cuota con modelo. En esta clase montas la compuerta, la conectas al loop headless del curso 2 y sales con el plan con fechas para hacer el tuyo.
1Las cinco capas y el orden: lo barato primero, el modelo al final
2portao.env fuera del repo: el agente no edita el juez
3La compuerta como test final del loop-longrun.sh
4El mapa del curso y tu plan con fechas
Objetivo: montar la compuerta en capas (criterios, guardia, atajos, evals, evaluador) y conectarla a tu loop, con el plan con fechas.
01 · Cinco capas, una salida
Haz clic en cada capa. Todas corren; el evaluador por modelo solo si las baratas pasan.
Haz clic en cada bloque del diagrama para ver qué hace.
Una capa sin configuración aparece como omitida, nunca como aprobada en silencio.
02 · Mira la compuerta correr
Cada capa es una etapa. En la primera ejecución la guardia reprueba: corrige y corre de nuevo.
capas por correr
capa en curso
aprobada
reprobada
Simulación ilustrativa en el navegador. La compuerta de verdad, con agentes falsos, está justo debajo.
03 · Ensayo: la compuerta contra el chumba y el bom
El portao.env queda fuera del proyecto. AVALIADOR_CMD apunta al evaluador falso: cero llamadas.
Terminal · compuerta
K=~/projetos/loop-r-eng-verificacao-v72/kit
cat > /tmp/ensaio-verif-portao.env <<EOF
GOAL=/tmp/ensaio-verif/goal.md
GUARDA_DIR=/tmp/ensaio-verif/guarda
ESCONDIDOS=/tmp/ensaio-verif/escondidos
AVALIADOR_CMD=$K/avaliador-falso.sh
EOF
for modo in chumba bom; do
bash $K/ensaio.sh > /dev/null && cd /tmp/ensaio-verif/proj
cp $K/goal-ensaio.md ../goal.md && sed -i '/limpo e bem documentado/d' ../goal.md
GUARDA_DIR=/tmp/ensaio-verif/guarda python3 $K/guarda-testes.py congelar . > /dev/null
$K/agente-falso.sh $modo < /dev/null > /dev/null
echo "## $modo"; $K/portao.sh . /tmp/ensaio-verif-portao.env; echo "saída: $?"
done
Ejemplo del repositorio
## chumba
criterios REPROVADO → /tmp/portao/criterios.log
guarda OK
atalhos REPROVADO → /tmp/portao/atalhos.log
evals pulada (sem configuração)
avaliador pulada (camada barata já reprovou: não gaste cota)
PORTÃO: REPROVADO em criterios atalhos
saída: 1
## bom
criterios OK
guarda OK
atalhos OK
evals pulada (sem configuração)
avaliador OK
PORTÃO: APROVADO
saída: 0
En el chumba la guardia pasa (el juez está intacto); quien reprueba es el criterio de función con entrada nueva (acao-reacao) y los tests ocultos.
Si el portao.env, el goal.md o los tests ocultos quedan dentro del repositorio, el agente puede editarlos, y la compuerta pasa a ser suya. Guarda los tres fuera (en el ensayo, en /tmp; en tu proyecto, en una carpeta tipo ~/portoes/[projeto]/).
04 · La compuerta como test final del loop headless
En el loop-longrun.sh del curso 2, TESTE_FINAL decide el "terminado". Pon la compuerta ahí. Ejecútalo después del bloque anterior (usa el mismo portao.env).
Terminal · loop con compuerta (agentes falsos)
K=~/projetos/loop-r-eng-verificacao-v72/kit; L=~/projetos/execucao-longa/tools
bash $K/ensaio.sh > /dev/null && cd /tmp/ensaio-verif/proj
cp $K/goal-ensaio.md ../goal.md && sed -i '/limpo e bem documentado/d' ../goal.md
GUARDA_DIR=/tmp/ensaio-verif/guarda python3 $K/guarda-testes.py congelar . > /dev/null
for m in chumba bom; do printf '#!/usr/bin/env bash\nexec %s/agente-falso.sh %s\n' $K $m > /tmp/agente-$m.sh; chmod +x /tmp/agente-$m.sh; done
$L/novo-longrun.sh $PWD slug > /dev/null && D=$(ls -d $PWD/longrun/*)
echo "Implementa slug() en slug.py. No toques tests/." > $D/prompt.md
cat > $D/loop.env <<ENV
TESTE_RAPIDO="python3 -m pytest -q"
TESTE_FINAL="$K/portao.sh . /tmp/ensaio-verif-portao.env"
PROTEGIDOS="tests/ pytest.ini *conftest.py"
PERMITIDOS="slug.py"
MAX_CICLOS=2
MIN_CICLO=2
MEM=1G
ESTAGNACAO=3
ENV
git add -A && git commit -qm "longrun: pasta"
CODEX_BIN=/tmp/agente-chumba.sh $L/loop-longrun.sh $D; echo "saída: $?"
CODEX_BIN=/tmp/agente-bom.sh $L/loop-longrun.sh $D; echo "saída: $?"
Ejemplo del repositorio
2026-10-19 06:19:56 início: rápido=0 passed · agente=codex · teto 2x2min · mem 1G
2026-10-19 06:19:56 ciclo 1: começa
2026-10-19 06:19:56 ciclo 1: agente saiu rc=0 em 0s
2026-10-19 06:19:56 ciclo 1: rápido=3 passed (melhor antes: 0)
2026-10-19 06:19:56 ciclo 1: checkpoint commitado
(… ciclo 2 igual, rápido=3 passed …)
2026-10-19 06:19:58 PARADO: teto de 2 ciclos atingido sem passar o teste final
saída: 1
2026-10-19 06:19:59 início: rápido=3 passed · agente=codex · teto 2x2min · mem 1G
2026-10-19 06:19:59 ciclo 1: começa
2026-10-19 06:19:59 ciclo 1: agente saiu rc=0 em 0s
2026-10-19 06:19:59 ciclo 1: rápido=3 passed (melhor antes: 3)
2026-10-19 06:19:59 ciclo 1: checkpoint commitado
2026-10-19 06:20:00 CONCLUÍDO no ciclo 1: teste final passou ()
saída: 0
El chumba hizo que el test rápido pasara de 0 a 3 passed: por el test visible, parecía progreso. La compuerta sostuvo el "terminado". Los paréntesis vacíos solo dicen que la compuerta no imprime "N passed".
El loop-longrun.sh hace commit del checkpoint antes de ejecutar el TESTE_FINAL. Cuando la compuerta corre, el git diff HEAD ya está vacío: las líneas CHUMBADO y SILENCIA del atalhos.py y el diff del evaluador no ven el trabajo del ciclo. En el ensayo quienes reprobaron fueron los criterios y los tests ocultos. Si dependes de la lectura del diff en el loop, compara con el commit base (antes del primer ciclo), no con HEAD.
05 · Práctica final
La compuerta en el ensayo y en tu loop.
E21 · Compuerta contra chumba y bom
10 min
Ejecuta el bloque de la compuerta y después el del loop con compuerta.
Listo cuando: la compuerta imprime PORTÃO: REPROVADO em criterios atalhos (saída: 1) para el chumba y PORTÃO: APROVADO (saída: 0) para el bom; el loop termina primero con PARADO: teto de 2 ciclos y después con CONCLUÍDO no ciclo 1.
E22 · La compuerta de tu loop
60 min
En tu proyecto: goal.md conferido (clase 2), guardia congelada en el commit de base (clase 3), 3 tests ocultos (clase 4) y, si la tarea toca el comportamiento de un agente, el conjunto de oro (clase 5). Escribe el portao.env fuera del repo (con el conjunto de oro: EVAL_AGENTE, EVAL_BASE, EVAL_CASOS y EVAL_PROMPT apuntando a tus archivos de la clase 5) y corre la compuerta antes y después del trabajo.
Listo cuando: antes del trabajo, $K/portao.sh . [tu portao.env]; echo $? → PORTÃO: REPROVADO y 1; después, → PORTÃO: APROVADO y 0, con como máximo una capa pulada.
06 · El mapa del curso
Cuatro entregas, en orden. Haz clic en un ejercicio para ver el "listo cuando".
Lección 806 · El mapa del cursoCuatro entregas, en orden. Haz clic en un ejercicio para ver el "listo cuando".
Día 1Quien verifica
clases 1 y 2
3 ejercicios
Evaluador separado y goal.md verificado por comando.
Acertaste {a} de {n}. Si aciertas todas, la clase se marca como completada.
Elige una alternativa. La explicación aparece después de tu intento.
09 · El curso en tres frases
Quien lo hizo no lo revisaEvaluador separado, criterio por comando y prueba impresa: el relato del agente no decide nada.
El juez queda fuera de su alcanceTests congelados con todo lo que lee pytest, ocultos y portao.env fuera del repo; un test sospechoso se convierte en reporte, nunca en ajuste.
Medir con honestidadConjunto de oro con regresión, juez calibrado y pass^k con varianza; y la compuerta en capas como test final del loop.