Як Claude Fable розробив реліз sqlite-utils 4.0rc2 за 150 доларів
Саймон Віллісон використав Claude Fable для аудиту, рефакторингу та документування критичного релізу sqlite-utils. Агент виявив п'ять критичних помилок, що блокували реліз (зокрема серйозну помилку із втратою даних).
Вплив: Середній
Чому це важливо
Це демонструє, як сучасні ШІ-агенти можуть автономно під керівництвом людини виконувати глибоке налагодження на рівні бази даних і документування, значно знижуючи витрати на розробку.
TL;DR
- 01Claude Fable успішно перевірив sqlite-utils 4.0rc2, класифікувавши 5 проблем як критичні для релізу, включно з великою помилкою втрати даних.
- 02Крос-модельна перевірка за допомогою GPT-5.5 xhigh та Codex Desktop виявила ще два крайові випадки, які Fable згодом виправив.
- 03Використовуючи інструмент agentsview всередині Claude Code, розробник розрахував вартість сесії без субсидій на рівні приблизно $149.25.
Ключові факти
- Загальні зміни коду
- +1,321 -190 рядків
- Змінені файли
- 30 окремих файлів
- Оцінка вартості Fable
- $149.25 (через agentsview)
- Запущено промптів
- 37 промптів
- Зроблено комітів
- 34 коміти
Виявлення багу з отруєнням транзакції
Під час передрелізного аудиту sqlite-utils 4.0 модель Claude Fable виявила серйозну проблему з втратою даних. Метод Table.delete_where() виконував DELETE безпосередньо через db.execute() без обгортки у транзакцію atomic():
db["t"].delete_where("id = ?", [0]) # Залишає conn.in_transaction = TrueЧерез те, що in_transaction залишався рівним True, усі наступні виклики atomic() переходили на гілку точок збереження (savepoints) і ніколи не фіксували зміни на диску. При закритті бази даних усі внесені зміни просто втрачалися.
Робочий процес крос-модельного рецензування
Щоб забезпечити максимальну надійність коду, Саймон Віллісон провів крос-модельний аудит роботи Fable. Він надіслав запит у Codex Desktop та GPT-5.5 xhigh: Review changes since the last RC. Also confirm that the changelog is up-to-date.
Цей перехресний аналіз виявив два нових баги: 1. Неочікуваний побічний ефект у верифікації запитів: виклик db.query("update...") викидав помилку ValueError для записів, але робив це вже *після* того, як зміни записувалися та фіксувалися в базі. 2. Зависла транзакція в генераторі: запит INSERT ... RETURNING фіксувався лише після повного проходження генератора. Виклик next() залишав транзакцію відкритию, що призводило до її скасування при закритті з'єднання.
Fable згодом успішно верифікував та виправив обидві крайові помилки.
Спробуй за 2 хвилини
db["t"].delete_where("id = ?", [0]) # conn.in_transaction is now Truepython
✓ Коли використовувати
- Коли ви хочете згрупувати кілька операцій запису в атомарні транзакції за допомогою db.atomic.
✕ Коли НЕ варто
- Якщо ви використовуєте стандартні параметри autocommit в Python, які інакше працюють у sqlite-utils.
Що зробити сьогодні
- Перевірте обробку транзакцій у вашому коді, особливо обгортки SQLite db.execute().
- Розгляньте можливість крос-модельного рецензування (наприклад, перевірка роботи Claude за допомогою GPT-5.5) для пошуку прихованих помилок.
- Використовуйте agentsview для моніторингу витрат на API під час роботи з ШІ-агентами.
Джерела