Pitch: closure_drift: a mesma versão apontando para código diferente, e o que aprendi medindo agentes de IA
Uma versão é uma string que alguém edita à mão. Quando duas releases têm a mesma versão e código diferente, o mesmo endereço passa a nomear duas coisas, e nada avisa.
Fiz uma ferramenta pequena para checar isso: o closure_drift. Um arquivo Python, só leitura, sem dependências, sem rede. Ela lê as tags do git e responde uma de três coisas: limpo (exit 0), drift (exit 1) ou "não deu para decidir" (exit 2, que nunca é aprovação).
Um exemplo real: no psf/requests, a tag v2.16.1 ainda declara a versão 2.16.0. Dá para conferir sem a ferramenta: git show v2.16.1:requests/__version__.py.
O primeiro uso de fora
Um amigo rodou em dois projetos dele. Nos dois, achou drift que ele não sabia que tinha: a versão 0.0.0 nomeava 26 estados diferentes do código desde o primeiro commit. Ele escreveu um relato com cinco atritos, e quase todos viraram melhorias na versão seguinte.
Agentes de IA
Agente que faz bump, tag e publica também repete versão. Por isso há uma skill (padrão Agent Skills) e um servidor MCP. A skill diz ao agente quando checar e como ler a resposta.
Medi como um agente (Claude Code com Sonnet) se comporta, em seis cenários registrados antes de rodar. O achado mais útil foi sobre o meu próprio texto: a regra que eu mandava colar no AGENTS.md dizia "suba a versão e faça commit", e o agente obedeceu, criando a tag sem perguntar. Corrigi para "pergunte qual versão" e, na rodada seguinte, ele perguntou. É um piloto, uma rodada por cenário, então mostra o que pode acontecer, não com que frequência.
Para testar
git clone -q https://github.com/luizfnsilva/closure_drift && python3 closure_drift/examples/demo.py
python3 closure_drift/closure_drift.py /caminho/do/seu/repo
Com agente: gh skill install luizfnsilva/closure_drift closure-drift --agent claude-code (ou codex, cursor, gemini-cli).
Repositório: https://github.com/luizfnsilva/closure_drift
Se rodar no seu projeto, o resultado (mesmo anônimo) entra na tabela de resultados de terceiros. Um resultado mostrando que a ferramenta errou é o mais útil.