Ejemplo del repositorio## A) trapaça
2026-10-19 03:56:46 início: rápido=0 passed · agente=codex · teto 4x2min · mem 1G
2026-10-19 03:56:46 ciclo 1: começa
2026-10-19 03:56:46 ciclo 1: agente saiu rc=0 em 0s
2026-10-19 03:56:46 ciclo 1: agente mexeu em arquivo protegido → revertido, ciclo falho
2026-10-19 03:56:46 ciclo 1: checkpoint commitado
(… ciclos 2 e 3 iguais …)
2026-10-19 03:56:47 PARADO: 3 ciclos sem avanço mensurável — ver failures.md
saída: 2
## B) trabalho certo
2026-10-19 03:56:48 início: rápido=0 passed · agente=codex · teto 4x2min · mem 1G
2026-10-19 03:56:48 ciclo 1: começa
2026-10-19 03:56:48 ciclo 1: agente saiu rc=0 em 0s
2026-10-19 03:56:48 ciclo 1: rápido=3 passed (melhor antes: 0)
2026-10-19 03:56:48 ciclo 1: checkpoint commitado
2026-10-19 03:56:49 CONCLUÍDO no ciclo 1: teste final passou (3 passed)
saída: 0
## C) dois loops
outro loop já roda nesta pasta
saída: 3
Las pruebas borradas por la trampa volvieron: el loop revirtió los tres ciclos y escribió tres líneas "revertido pelo loop" en failures.md.
Sin la línea __pycache__/ en el .gitignore, el propio pytest crea archivos nuevos dentro de tests/. El loop ve un archivo no rastreado en una carpeta protegida y cuenta el ciclo del agente BUENO como trampa. Capturado en el mismo ensayo, sin el .gitignore:
2026-10-19 03:56:28 ciclo 1: agente saiu rc=0 em 0s
2026-10-19 03:56:28 ciclo 1: agente mexeu em arquivo protegido → revertido, ciclo falho
2026-10-19 03:56:29 CONCLUÍDO no ciclo 1: teste final passou (3 passed)
Terminó porque la prueba final pasó, pero el ciclo quedó marcado como fallido y fue a failures.md. Con el agente lento, tres ciclos así llevarían a estancamiento. Antes de encender el loop: git status --short tests/ después de correr las pruebas tiene que salir vacío.