---
name: peer-pump-stall-bhalf-confirmed
description: "Live peer-pump stall on HFENDULEAM (v0.8.2, 2026-06-16) CONFIRMED = the deferred B-half (broker-side unbounded QUIC op to a dead roster peer), DEFERRED.md:42 + KH 7.6 — NOT a new bug. Interim = daemon restart; real fix = mint REQ broker-side QUIC bound."
metadata: 
  node_type: memory
  type: project
  originSessionId: 9d0930b3-34c1-4dce-943f-72ccdc8fb726
---

**Peer-pump stall — diagnosed live 2026-06-16 (doyle, /diagnose), confirmed = known deferred gap.** A test agent's spt-claude-code `/setup` flagged "peer pump STALLED (5286s since last tick)" on HFENDULEAM. This is the MINOR carried in [[v082-templating-residency]] ("investigate peer-pump stall ~7-8min after daemon start") — now investigated, dispositioned as the **deferred B-half**, no scope-creep needed.

**Root cause = `docs/DEFERRED.md:42` "Broker-side bound on brain-waiting QUIC ops (the pump-IPC-deadline B-half)"** (first diagnosed 2026-06-11, doyle ruling A-now/B-deferred) + KH 7.6 Windows named-pipe reader-park aggravator. The pump fan-out dials every roster member every cadence; a DEAD roster peer makes the broker's `net_dial`/`net_open_stream`/`net_stream_send` handler block UNBOUNDED on the dead peer's QUIC op. The shipped A-half (REQ-HAZARD-PUMP-IPC-DEADLINE, v0.4.1) bounds only the pump's brain-IPC READS (30s→supervised loop-restart); it does NOT bound the broker-side await, so the restart re-dials the same dead peer and re-wedges → heartbeat (written only inside a live loop) freezes monotonically.

**Live evidence (read-only):** installed `spt 0.8.2` daemon (broker 222988→brain 227372, both started 18:52:31), heartbeat `pump-heartbeat.json` frozen at 18:54 ~93min monotonic; brain still `--generation 0 --start-reason cold` (never re-spawned — supervisor restarts the LOOP in-thread, not the process); broker still serves local sockets ("local use fine"). Trigger peer = **ENLYZEAM** in roster.json `last_seen 1781571780` ≈ 26h stale = dead. Signature that rules out the A-half cycling: monotonic 93min freeze (a working A-half restart would oscillate heartbeat 0–35s since each loop-restart writes it at loop-top before any wedge).

**Interim mitigation:** restart the spt-core adapter daemon (`%LOCALAPPDATA%\spt-core\bin\spt.exe`) — re-primes the pump until it hits another dead peer. SAFE re: live agents — that daemon is DISTINCT from the legacy-owl perches the live agents run on ([[spt-daemon-is-live-infra]]); restarting it won't drop them (confirm no spt-core-hosted live session attached first). Never machine-wide kill ([[no-machinewide-killon-shared-runner]]).

**Real fix (scoped, NOT yet minted):** mint a REQ for a broker-side QUIC-op bound so `net_dial`/`net_open_stream`/`net_stream_send` return an Error event promptly on a black-holed peer → dead peer = ordinary per-peer abort + redial, never a broker wedge. Needs the rare broker-update path (broker resident by design). doyle→todlando dispatch when the next broker-update batch opens. No new regression seam now (fix lives behind the deferred broker-update path; A-half already unit-covered).
