SQLite opened with cache=shared, no busy_timeout, no WAL, unbounded database/sql pool (internal/database/database.go:140, internal/database/webhook_db_manager.go:237). The ingest handler's write transaction (internal/handlers/webhook.go:223) races engine workers writing results/status to the same per-webhook file (internal/delivery/engine.go:761, :778): under any concurrency, senders get 500s from SQLITE_BUSY/SQLITE_LOCKED and deliveries stick pending (write errors only logged). No test exercises concurrent writers.
Done: WAL + busy_timeout (or serialized writes), bounded pool, no cache=shared; a test with concurrent ingest + engine writers passes; failed status writes are not silently logged away.
From audit #303 (unfit for purpose).
SQLite opened with `cache=shared`, no `busy_timeout`, no WAL, unbounded `database/sql` pool (`internal/database/database.go:140`, `internal/database/webhook_db_manager.go:237`). The ingest handler's write transaction (`internal/handlers/webhook.go:223`) races engine workers writing results/status to the same per-webhook file (`internal/delivery/engine.go:761`, `:778`): under any concurrency, senders get 500s from `SQLITE_BUSY`/`SQLITE_LOCKED` and deliveries stick `pending` (write errors only logged). No test exercises concurrent writers.
Done: WAL + `busy_timeout` (or serialized writes), bounded pool, no `cache=shared`; a test with concurrent ingest + engine writers passes; failed status writes are not silently logged away.
Audit #303 read main. PR #111's next already landed this via #256 (WAL, busy timeout, _txlock=immediate, no cache=shared, bounded pool, verified under concurrent load). Closes on merge of #111; other #303-derived issues (#305-#310) should be re-checked against next before dispatch.
Audit #303 read `main`. PR #111's `next` already landed this via #256 (WAL, busy timeout, `_txlock=immediate`, no `cache=shared`, bounded pool, verified under concurrent load). Closes on merge of #111; other #303-derived issues (#305-#310) should be re-checked against `next` before dispatch.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
From audit #303 (unfit for purpose).
SQLite opened with
cache=shared, nobusy_timeout, no WAL, unboundeddatabase/sqlpool (internal/database/database.go:140,internal/database/webhook_db_manager.go:237). The ingest handler's write transaction (internal/handlers/webhook.go:223) races engine workers writing results/status to the same per-webhook file (internal/delivery/engine.go:761,:778): under any concurrency, senders get 500s fromSQLITE_BUSY/SQLITE_LOCKEDand deliveries stickpending(write errors only logged). No test exercises concurrent writers.Done: WAL +
busy_timeout(or serialized writes), bounded pool, nocache=shared; a test with concurrent ingest + engine writers passes; failed status writes are not silently logged away.Audit #303 read
main. PR #111'snextalready landed this via #256 (WAL, busy timeout,_txlock=immediate, nocache=shared, bounded pool, verified under concurrent load). Closes on merge of #111; other #303-derived issues (#305-#310) should be re-checked againstnextbefore dispatch.