Verificação e Evals|INEMA.CLUB-PRO

Aula 8 · 22 min

Montar o portão do seu loop

Cada aula deu uma peça: avaliador, critérios, guarda, atalhos, evals, juiz. O portão as põe em fila, das baratas para a cara: o que o código reprova não chega a gastar cota com modelo. Nesta aula você monta o portão, liga no loop headless do curso 2 e sai com o plano datado para fazer o seu.

Começar a aula
Corredor técnico escuro com três portas de aço, cada uma com uma lâmpada de sinal.

Nesta aula você vai

  1. 1As cinco camadas e a ordem: barato primeiro, modelo por último
  2. 2portao.env fora do repo: o agente não edita o juiz
  3. 3O portão como teste final do loop-longrun.sh
  4. 4O mapa do curso e o seu plano com datas

Objetivo: montar o portão em camadas (critérios, guarda, atalhos, evals, avaliador) e ligá-lo ao seu loop, com o plano datado.

01Cinco camadas, uma saída

Clique em cada camada. Todas rodam; o avaliador por modelo só se as baratas passarem.

Clique em cada bloco do diagrama para ver o que ele faz.

Camada sem configuração aparece como pulada, nunca como aprovada em silêncio.

02Veja o portão rodar

Cada camada é uma etapa. Na primeira execução a guarda reprova: corrija e rode de novo.

camadas a rodar

camada em curso

aprovada

reprovada

Simulação ilustrativa no navegador. O portão de verdade, com agentes falsos, está logo abaixo.

03Ensaio: o portão contra o chumba e o bom

O portao.env fica fora do projeto. AVALIADOR_CMD aponta para o avaliador falso: zero chamadas.

Terminal · portão
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
Exemplo do repositório
## 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

No chumba a guarda passa (o juiz está intacto); quem reprova é o critério de função com entrada nova (acao-reacao) e os testes escondidos.

04O portão como teste final do loop headless

No loop-longrun.sh do curso 2, TESTE_FINAL decide o "concluído". Ponha o portão lá. Rode depois do bloco anterior (usa o mesmo portao.env).

Terminal · loop com portão (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 "Implemente slug() em slug.py. Não mexa em 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: $?"
Exemplo do repositório
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

O chumba fez o teste rápido ir de 0 para 3 passed: pelo teste visível, parecia progresso. O portão segurou o "concluído". Os parênteses vazios só dizem que o portão não imprime "N passed".

05Prática final

O portão no ensaio e no seu loop.

E21 · Portão contra chumba e bom

10 min

Rode o bloco do portão e depois o do loop com portão.

Pronto quando: o portão imprime PORTÃO: REPROVADO em criterios atalhos (saída: 1) para o chumba e PORTÃO: APROVADO (saída: 0) para o bom; o loop termina primeiro com PARADO: teto de 2 ciclos e depois com CONCLUÍDO no ciclo 1.

E22 · O portão do seu loop

60 min

No seu projeto: goal.md conferido (aula 2), guarda congelada no commit de base (aula 3), 3 testes escondidos (aula 4) e, se a tarefa mexe no comportamento de um agente, o conjunto de ouro (aula 5). Escreva o portao.env fora do repo (com o conjunto de ouro: EVAL_AGENTE, EVAL_BASE, EVAL_CASOS e EVAL_PROMPT apontando para os seus arquivos da aula 5) e rode o portão antes e depois do trabalho.

Pronto quando: antes do trabalho, $K/portao.sh . [seu portao.env]; echo $? → PORTÃO: REPROVADO e 1; depois, → PORTÃO: APROVADO e 0, com no máximo uma camada pulada.

06O mapa do curso

Quatro entregas, na ordem. Clique num exercício para ver o "pronto quando".

Dia 1Quem confere

aulas 1 e 2

3 exercícios

Avaliador separado e goal.md conferido por comando.

Ver a aula
Dia 2Juiz protegido

aulas 3 e 4

3 exercícios

Guarda congelada e testes escondidos fora do repo.

Ver a aula
Dias 3 e 4Medir

aulas 5 e 6

3 exercícios

Conjunto de ouro com base e juiz calibrado.

Ver a aula
Dia 5Portão

aulas 7 e 8

2 exercícios

pass^3 anotado e portão aprovando o seu loop.

Ver a aula
Ao final do cursoUm portão em camadas, fora do alcance do agente, que reprova o atalho e aprova o trabalho, ligado ao seu loop.
22 exercícios
Clique num exercício para ver o que fazer e o "pronto quando".
  1. 1/5

    Quem confere

    Kit clonado, avaliador falso e real rodados, critérios que falham antes do trabalho.

  2. 2/5

    Juiz protegido

    Requer o dia 1. O furo do conftest visto e fechado; a regra "testes são o juiz" no projeto.

  3. 3/5

    Medir

    Requer o dia 2. Vinte casos reais, rótulos seus em 10 artefatos e o juiz só depois de calibrado.

  4. 4/5

    Portão

    Requer tudo antes. Medir com k = 3, juntar as camadas e pôr o portão como teste final.

  5. 5/5

    O curso inteiro

    Quem confere, juiz protegido, medir e o portão. Só passe para a próxima entrega quando o "pronto quando" da anterior for verdade.

Ordem obrigatória: um portão sem juiz protegido é só mais um jeito de aprovar atalho.

07Gere o seu plano com datas

Escolha o início e quanto tempo você tem por semana. O plano lista os 22 exercícios na ordem.

08Teste final

Pergunta 1 de 5

Por que o avaliador por modelo é a última camada?competência

09O curso em três frases

Quem fez não confereAvaliador separado, critério por comando e prova impressa: o relato do agente não decide nada.
O juiz fica fora do alcanceTestes congelados com tudo o que o pytest lê, escondidos e portao.env fora do repo; teste suspeito vira relato, nunca ajuste.
Medir com honestidadeConjunto de ouro com regressão, juiz calibrado e pass^k com variância; e o portão em camadas como teste final do loop.

Continue por aqui

Aula anteriorVoltar ao início do curso