🛠 Claude нашёл баг с каскадными внешними ключами в sqlite-utils 4.1.1 12 июля Саймон Уиллисон выпустил точечный патч для своего инструмента — ошибку в `table.transform()` выявил обычный чат с Claude, когда модель отвечала на вопрос про `ON DELETE`. Проблема проявлялась, если внутри открытой транзакции включён `PRAGMA foreign_keys`, а таблица связана внешними ключами с деструктивным каскадом — `CASCADE`, `SET NULL` или `SET DEFAULT`. Механика простая: прагму нельзя поменять посреди транзакции, и при удалении старой таблицы в ходе трансформации срабатывали те самые каскадные действия, беззвучно подчищая или портя ссылающиеся строки. Теперь `transform()` явно выбрасывает `TransactionError`, не давая незаметно похоронить данные. Сам Уиллисон в последние недели плотно использует Claude для написания кода sqlite-utils — версия 4.0rc2 вообще была написана моделью Fable примерно за $150. И вот теперь LLM нащупала краевой случай, который мог бы остаться незамеченным ещё долго: для воспроизведения требовались строгое стечение условий с foreign keys и транзакцией, которое редко попадает в модульные тесты. Показательно, что модель здесь сработала не как генератор нового кода, а как инструмент систематического перебора сценариев. Разработчик задавал вопрос про семантику `ON DELETE`, модель перебирала варианты взаимодействия с `transform()`, наткнулась на конфликт — и баг стал воспроизводимым. Это уже не магия, а расширение зоны тестирования туда, куда обычно не доходят руки. Simon Willison #sqlite #Claude #инструменты #тестирование