Example from the repository## 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
The tests deleted by the cheat came back: the loop reverted all three cycles and wrote three "revertido pelo loop" lines in failures.md.
Without the __pycache__/ line in .gitignore, pytest itself creates new files inside tests/. The loop sees an untracked file in a protected folder and counts the GOOD agent's cycle as cheating. Caught in the same rehearsal, without the .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)
It finished because the final test passed, but the cycle was marked as failed and went to failures.md. With the slow agent, three cycles like this would trigger stagnation. Before you turn the loop on: git status --short tests/ after running the tests must come out empty.