Real-PG CI gate caught a stack overflow (job 2352): deliverNotices re-invoked itself from a defer after requeuing a failed batch - persistent failures recursed without bound. Iterative rewrite + bounded regression test; full suite green on SQLite and real PostgreSQL 18.6 + Redis. Refs: Dev PR #333.
Real-PG CI gate caught a stack overflow (job 2352): deliverNotices re-invoked itself from a defer after requeuing a failed batch - persistent failures recursed without bound. Iterative rewrite + bounded regression test; full suite green on SQLite and real PostgreSQL 18.6 + Redis. Refs: Dev PR #333.
Why: deliverNotices re-invoked itself synchronously from a defer after a failed startNoticeRun requeued the batch - a persistently failing delivery (busy conversation, missing row, slow DB) recursed without bound and overflowed the stack (real-PG CI job 2352, internal/runmgr).
Evidence: regression test TestNoticeDeliveryFailureIsBounded (missing conversation row) hangs on the old code and passes with the fix; full backend suite green on SQLite and against real PostgreSQL 18.6 + Redis; clean-HEAD reproduction isolated an unrelated count=2 admin-login artifact.
Impact: failed batches now return after requeue (retried on the next enqueue or restart); notices arriving during delivery are picked up by a bounded loop tail instead of defer recursion; no behavior change on the success path.
Refs: Dev PR #333; plan R8 real-database gate.
weichen
merged commit c8d66ca3cd into main2026-10-11 08:12:14 +00:00
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.
Real-PG CI gate caught a stack overflow (job 2352): deliverNotices re-invoked itself from a defer after requeuing a failed batch - persistent failures recursed without bound. Iterative rewrite + bounded regression test; full suite green on SQLite and real PostgreSQL 18.6 + Redis. Refs: Dev PR #333.