--- id: review-wave-4-fixes name: Review gate — wave-4 fix batch (review 002 resolutions) status: pending depends_on: [pg-fix-forwarder-reconnect, pg-fix-tx-wake, pg-fix-open-path, pg-fix-stale-unlisten, pg-fix-scheduler-resilience, pg-fix-dedupe-cleanup, pg-fix-docs-alignment] scope: moderate risk: low impact: phase level: review tags: [wave-4-fixes, review] --- ## Description Review the fix batch decomposed from the wave-4 general review (`docs/reviews/002-wave-4-general-review.md`) before wave 5 decomposes. The batch's own gate — distinct from the general review that found the issues: verify each finding's fix is *real* (code-read against the review's failure mechanism, not test-name-trust), and that the fixes didn't damage the postures the wave-4 gate pinned. Check: - **Finding 1 (forwarder reconnect)**: the loop survives repeated failed connects — code-read the restructured reconnect arm (no path back to the `take()`'s `else return`); the failed-connect arm is test-exercised (the seam/injection is real, not a mock that never fails); the fanout-sender release invariant (receivers terminal iff loop gone) holds on every exit path. - **Finding 2 (tx wake)**: `pg_notify` present in `publish_with_key_tx` (contract obligation) and the enqueue twins (parity), commit-atomic inside the caller's tx, empty payload (channel-only wakes); the no-ghost rollback arm pinned; the compose test's determinism evidence (repeated solo runs) recorded. - **Finding 3 (open path)**: `max_size` guard before any round trip; the DSN options append (or documented engine-wins) verified against the actual setter semantics. - **Finding 4 (stale UNLISTEN)**: the generation-drop/reconcile decision unit-pinned across all four command/staleness combinations; the invariant stated in the forwarder docs. - **Finding 5 (scheduler)**: quarantine + retry behavior vs the review's fix shape; the leadership exit-path posture documented; the doc claim corrected. - **Minor notes**: dedupe (one decode owner — grep-auditable), the const, the helper routing, the doc alignments in deployment.md. - **No regressions**: the wave-4 gate's pinned postures re-spot-checked where the fixes touched them — forwarder integrity (the two deadlock pitfalls still structurally excluded), seam integrity, close semantics (the pg arm: open across reconnects, close at shutdown only), the no-replay honesty pin, entry-point validation. - **Records**: `tasks/review-wave-4.md` F-1 note and `docs/plans/implementation.md`'s review-rounds line consistent with what landed. - **Gates**: full workspace build/test/clippy/fmt; the pg suite green against the harness server; the compose test run repeatedly (the determinism claim verified, not asserted). **Wave-5 gate**: per the general review's sequencing, wave 5 decomposes after Findings 1–2's fixes land (the suite's wake-driven rows would otherwise inherit a hang-shaped false failure). This gate confirms both landed; if only they have, say so explicitly — wave 5 may decompose with 3–7 still in flight only if this gate judges the remainder wake-independent (expected: yes — 3–7 touch no wake-driven suite surface). ## Acceptance Criteria - [ ] Each finding's fix verified against the review's failure mechanism (code-read + the new tests' actual coverage) - [ ] No regressions to the wave-4 gate's pinned postures (re-spot- checked at the touched sites) - [ ] Records consistent (F-1 retirement, review-rounds line) - [ ] All gates green (incl. against the harness server); compose-test determinism evidence recorded - [ ] Findings recorded; wave 5 decomposition disposition stated explicitly ## References - docs/reviews/002-wave-4-general-review.md (the findings this batch resolves) - tasks/review-wave-4.md (the wave-4 gate's pinned postures + F-1's record) - docs/plans/implementation.md (Review gates; Review rounds so far) - tasks/pg-fix-*.md (the batch's seven tasks) ## Notes > To be filled by implementation agent ## Summary > To be filled on completion