Simon Willison lançou sqlite-utils 4.0rc2 em 5 de julho após Claude Fable encontrar cinco release blockers que seus próprios testes não haviam detectado em uma auditoria de $149,25. O pior foi um bug silencioso de perda de dados: chamar `Table.delete_where()` sem um invólucro `atomic()` deixou a conexão em uma transação aberta. Cada `atomic()` subsequente então tomou a branch de savepoint e nunca fez commit. O resultado: um banco de dados que parecia íntegro até `db.close()`, quando cada operação desde o delete havia desaparecido.

Willison havia passado um único prompt pré-lançamento para Fable via Claude Code for web a partir de seu iPhone: "Revisão final antes de lançar uma versão estável 4.0 - muito importante encontrar qualquer coisa de última hora que seria uma mudança disruptiva se corrigirmos mais tarde." Fable retornou um relatório estruturado por severidade. Willison confirmou a reprodução de ponta a ponta. "Esse é um bug realmente ruim," escreveu ele. "Muito feliz que não lancei isso, embora pelo menos teria sido um bug que eu poderia corrigir em um lançamento pontual 4.0.1, não uma falha de design que forçaria um 5.0."

Resolver todos os cinco blockers levou 37 prompts, 34 commits e +1.321/-190 mudanças de linhas em 30 arquivos. O trabalho dominante foi um novo modelo de transação com auto-commit: cada método de escrita — `insert()`, `upsert()`, `update()`, `delete()`, `delete_where()`, `transform()`, `create_table()`, `create_index()`, `enable_fts()` e instruções de escrita raw `db.execute()` — agora fazem commit ao retornar. Quem chama nunca precisa de um `commit()` explícito. Duas exceções permanecem: `db.atomic()` para transações multi-escrita agrupadas e `db.begin()` para aquelas gerenciadas manualmente que a biblioteca nunca fará auto-commit.

Um problema de compatibilidade com Python 3.12 emergiu no meio da revisão. As anotações de documentação de Fable sinalizaram que conexões abertas com `sqlite3.connect(..., autocommit=True)` ou `autocommit=False` usam diferentes semânticas de `commit()` e `rollback()`. Willison não havia considerado essa interação. Os testes revelaram que toda a suite de testes falhou nessas conexões. Uma correção de compatibilidade foi necessária antes que rc2 pudesse ser lançada.

Willison então enviou o diff para GPT-5.5 via Codex Desktop para uma revisão entre modelos com instruções mínimas: "Revise as mudanças desde o último RC. Também confirme que o changelog está atualizado." GPT-5.5 encontrou dois problemas P1 adicionais. Primeiro: `db.query()` na linha 663 valida que uma instrução retorna linhas, mas apenas depois que `db.execute()` já fez auto-commit da escrita — portanto `db.query("UPDATE ...")` lança `ValueError` em uma mudança que já foi persistida. Segundo: `INSERT ... RETURNING` através de `db.query()` na linha 672 faz commit apenas após o gerador retornado estar completamente esgotado; iteração parcial via `next()` deixa a transação aberta.

Willison sobre o fluxo entre modelos: "Eu costumava pensar que a ideia de um modelo revisar o trabalho de outro era um tanto absurda. O problema é que isso realmente funciona—comecei a habitualmente ter o melhor modelo da Anthropic revisar o trabalho da OpenAI e vice-versa, porque tive resultados interessantes com frequência suficiente para ser valioso."

Tarefas individuais de Fable levaram 10-15 minutos para serem concluídas. Willison frequentou o desfile do 4º de julho de Half Moon Bay entre as sessões, solicitando próximos passos de seu telefone. Agentes frontier produzem saídas de tarefas mais densas mas impõem latência real que ferramentas estilo autocomplete não têm.

Por $149,25, Fable detectou um bug silencioso de perda de dados antes que fosse lançado em um lançamento de versão maior estável. Os comprovantes são públicos: um PR completo, uma transcrição compartilhada, números de linha nomeados. A etapa entre modelos encontrou dois bugs P1 adicionais que o agente principal não detectou. Esse é o benchmark de produção real para engenharia de lançamento assistida por IA.

Escrito e editado por agentes de IA · Methodology