Simon Willison lanzó sqlite-utils 4.0rc2 escrito casi todo por IA
El desarrollador usó Claude Fable para revisar la librería antes del lanzamiento estable y detectó un bug grave de pérdida de datos. El costo total del trabajo fue de 149,25 dólares.

El programador Simon Willison publicó la versión candidata sqlite-utils 4.0rc2, una actualización que corrige un error crítico detectado gracias a una revisión final hecha con el modelo de IA Claude Fable. El hallazgo evitó que un bug capaz de causar pérdida de datos llegara a la versión estable de la librería.
Willison, creador de sqlite-utils, ya había presentado la versión 4.0rc1 semanas atrás. Antes de que venciera su suscripción a Claude Max, decidió aprovechar los días restantes para pedirle a Fable una revisión final del código, con el objetivo de evitar cambios incompatibles que obligaran a romper el versionado semántico que sigue en el proyecto.
Un bug que arruinaba la base de datos
La revisión, iniciada desde Claude Code para web en un iPhone, identificó cinco problemas que el propio modelo clasificó como bloqueantes para el lanzamiento. El más grave afectaba al método delete_where(): al ejecutar un borrado, la operación no quedaba envuelta correctamente en una transacción, a diferencia de lo que sí ocurría con el método delete() regular. Como resultado, la conexión a la base de datos quedaba marcada como abierta en modo transaccional, lo que hacía que cualquier operación posterior tomara un camino de código que nunca terminaba de confirmarse en disco.
En la práctica, esto significaba que un borrado podía revertirse solo, y que inserciones o incluso tablas enteras creadas después del delete_where() desaparecían al reabrir la base de datos, sin ningún aviso de error. Willison señaló que, de haber llegado a producción, hubiera sido un defecto serio pero corregible en una actualización menor; el riesgo mayor era no detectarlo a tiempo y verse forzado a un cambio de diseño más profundo en una futura versión mayor.
37 instrucciones, 34 commits
A lo largo de 37 instrucciones (prompts) sucesivas, el proceso generó 34 commits con más de 1.300 líneas agregadas y cerca de 190 eliminadas, distribuidas en 30 archivos distintos. Además de resolver los cinco bloqueantes, el trabajo incorporó otras mejoras de diseño surgidas durante la revisión.
Willison describió que, al tratarse de tareas más complejas, el agente necesitaba entre 10 y 15 minutos para completar cada paso, tiempo que aprovechó para asistir al desfile del 4 de julio en Half Moon Bay, California, revisando el progreso y enviando la siguiente instrucción desde el teléfono. La revisión final del pull request la hizo ya desde su computadora, usando la interfaz de GitHub.
Documentación del nuevo modelo transaccional
El cambio más relevante de esta versión candidata tiene que ver con el manejo de transacciones, la función central que ya había introducido la versión rc1 anterior. La nueva rc2 suma documentación detallada sobre este modelo: cualquier operación que modifique la base de datos, ya sea insertar registros, actualizar filas, borrar datos, transformar una tabla o crear un índice, se ejecuta dentro de su propia transacción y queda confirmada en disco apenas termina de ejecutarse, sin pasos adicionales de parte de quien usa la librería.
sqlite-utils es una herramienta ampliamente usada para manipular bases de datos SQLite desde la línea de comandos y desde Python, y forma parte del ecosistema de proyectos que Willison mantiene junto a Datasette.

