The bug that mattered: how delete_where() could silently lose your delete
The release-blocker with real teeth was a transaction-handling flaw in delete_where(). The function issued its DELETE through a bare execute() call with no atomic() wrapper, which meant the connection was left in an open transaction with the write uncommitted [1]. Because the delete never committed, that delete and any writes that followed it could be silently rolled back when the connection closed, a quiet path to data loss rather than a loud error [1]. The inconsistency was not new: the delete_where() auto-commit behavior had been sitting in the tracker as GitHub Issue #159 since 2020 [2]. Related commit-ordering problems showed up in db.query(), which rejected non-row statements only after execute() had already auto-committed the write, and where INSERT...RETURNING only committed once the returned generator was fully exhausted [1]. The fix was to make delete_where(), optimize() and rebuild_fts() all route through db.atomic(), bringing them in line with the other write methods [1].

