d10d3d7b42
Three durable ledgers used `with _connect() as conn:` where the sqlite3 connection context manager commits/rolls back but never closes, leaking the db/-wal/-shm file descriptors on every call. On a long-running gateway this exhausts RLIMIT_NOFILE and fails unrelated components with `[Errno 24] Too many open files`. Same bug class as the cron execution ledger (#69567 / PR #69594), which the connection helpers here are modeled on. Fix: route every ledger operation through a `_transaction()` context manager that guarantees `conn.close()` on exit. `_connect()` keeps its schema-on-connect contract (several tests call it directly) and now self-closes if schema init fails. Adds per-module regression tests asserting every opened connection is closed, including the no-op-update and exception-mid-transaction paths. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>