Faca seu agente de IA provar: um gate de entrega deterministico
O agente disse que tinha terminado. O gate discordou.
Um caso real desta semana: o builder reportou done, o crítico devolveu 55 e uma lista de lacunas com nomes e pesos. Dois checks falhavam, um deles um scan de segredo que achou um token no diff. Nenhuma opinião esteve envolvida — o relatório anexou a saída bruta de cada check. É assim que um gate de entrega determinístico se parece quando você para de perguntar ao modelo se o trabalho ficou bom e começa a medir.
Esta skill agora está publicada como pacote real. pip install agent-test-loop e npx ai-test-loop resolvem de verdade, o repositório é aberto (MIT) e a versão gratuita é download real — não teaser.
Por que o mesmo contexto mente
A falha clássica: um contexto escreve o código, roda os testes, lê o resultado e decide se terminou. O modelo que produziu o bug é o modelo que julga o conserto. O gate quebra esse ciclo movendo o julgamento para um processo separado que executa comandos reais e devolve números, não prosa.
- BuilderEscreve a mudança. Sem poder de veto sobre o veredito.
- CríticoRoda cada check declarado contra o artefato real. Pontua. Nunca pergunta a um modelo se está bom.
- RevisorContexto independente, fresco, sem justificativa do builder. Devolve JSON estrito.
- Gate de segurançaFail-closed. Um segredo, um achado de severidade alta ou uma falha de injeção bloqueia a entrega mesmo com pontuação perfeita. Inconclusivo conta como bloqueado.
Regra zero: builder ≠ crítico ≠ revisor. Se um contexto faz os três, o loop é teatro.
O gate, passo a passo
- Declare os checks antes de escrever códigoPara cada check: nome, comando, peso e o que “passar” significa. Os pesos somam 100.
{"checks":[{"name":"pytest","cmd":"set -o pipefail; pytest -q","weight":40},{"name":"no_secret_scan","cmd":"gitleaks detect --no-banner","weight":30}]}
- Rode o críticoEle executa cada comando de verdade, captura a evidência e nunca pergunta a um modelo se o trabalho está bom — mede.
python scripts/loop_runner.py --config loop.json --round 1
- Pontue, compare, decidaAcima do limiar vai para o revisor; abaixo, pegue a maior lacuna, conserte e rode de novo. Limite as rodadas (8 bastam): se nunca convergir, o conjunto de checks está errado, não o código.
- Revisão independente antes da entregaMesmo artefato, contexto fresco, sem justificativa do builder. Um painel de 2-3 especialistas (qualidade e segurança sempre) devolvendo JSON estrito.
- Gate de segurança, fail-closedUm segredo no diff ou histórico, um achado de severidade alta, um problema de auth/path traversal/injeção bloqueia a entrega mesmo com testes perfeitos. Inconclusivo conta como bloqueado, nunca como passou.
- Relatório com pontuação, evidência e o que não foi verificávelO relatório diz o que foi medido, com saída bruta, e o que não pôde ser checado — sem “provavelmente está bom”.
Quatro formas de um verde mentir
- Pipe esconde o exit code
pytest | tail devolve o exit code do tail (0), então o crítico pontua 100 com um teste falhando escondido na saída. Use set -o pipefail dentro de cada check.
- Timeout menor que o check é zero silenciosoO crítico é morto pelo próprio timeout, o orquestrador lê pontuação 0 com lista de lacunas vazia e entra em loop sem nada a consertar. Defina o timeout acima da duração real e sempre guarde o log bruto do crítico.
- Um “passou” de curto-circuitoUm servidor respondendo 200 pode ser o servidor errado: em colisão de porta o check testa outro app e falha pelo motivo errado. Afirme identidade (título, versão, payload conhecido), não só alcançabilidade.
- Baseline velha regenerada para ficar verdeRegenerar baseline visual “para passar” apaga a regressão que o teste existe para pegar. Baseline muda por decisão explícita, justificada no histórico — nunca para calar um check.
← todas as skills
Receba o próximo artigo
Sai quando eu publicar, junto com a skill grátis usada aqui. Sem spam, e o descadastro é de um clique.
Também estou aqui: Portfólio · LifeLog (blog pessoal) · X
Pagamento processado pelo
Stripe — nenhum dado de cartão passa por este servidor. Entrega imediata após a confirmação.
Termos, entrega e reembolso.