---
name: hallb-attach-stall-rca
description: hall-b attach-stall (zero events in 30s grace) after exit→re-run on 0.21.0 — same-id session-slot lifecycle family; not reproducible on 0.22.0 (wave
metadata: 
  node_type: memory
  type: project
  originSessionId: 66c61acf-bb34-4e39-8679-20cd1dd1cafd
---

RCA 2026-07-03 (operator /diagnose, HFENDULEAM): after resume→/exit→confirm-offline→`spt endpoint run` Start-now, hall-b showed ONLINE but every attach hit `[no output from 'hall-b' … Detached]` (PumpEnd::Stalled — rc.rs FIRST_EVENT_GRACE 30s, ZERO broker events; not a refusal, not an exit). Harness side always healthy: claude.exe alive, hooks stamped sessions.log, digest ingested boot.

**Verdict:** same-endpoint-id session-slot lifecycle family, observed on 0.21.0. Exact operator flow (create→/exit→offline→re-run same id→attach) NOT reproducible on 0.22.0 (psmux end-to-end repro paints) — plausibly healed by wave #2 broker-reap-on-exit; state also cleared by the 0.22.0 daemon bounce, so healing ≠ 100% attributed.

**Still LIVE on 0.22.0 (verified first-hand, next-triage items):**
1. `endpoint run --id X --create` while X has a live session mints a DUPLICATE session (no refuse/reattach) — and the attach viewport can render the OTHER session's screen (crossed attach output, seen live: dg1 create-attach rendered the older session's UI). Also the origin of triplicate `launch --id ball-b` processes on enlyzeam.
2. Daemon respawn/`--resume <spt-session-id>` builds `claude -r <SPT-session-id>` — an spt id fed to claude's OWN session search → claude hangs forever at "No sessions match" resume-picker while the endpoint reads online. Hits after EVERY daemon bounce (adapter [session.resume] {session_id} substitution semantics).
3. #11 dead-pid presence with a deliberate repro: /exit → all processes dead → list still ■ ONLINE for a decay window (then OFFLINE). CONFIRMED sticky: CONTROLLED stamp persists ≥5min after attach-client SIGKILL with NO spt client process alive (caveat: may reflect claude's own --remote-control channel, not the PTY attach — disambiguate at RCA).
4. `--resume` respawns a second harness on the SAME session id without reaping the first (two claude.exe stacks one session).

**Loop recipe (the debugging superpower here):** psmux new-session running `spt endpoint run … --attach`, capture-pane for paint-vs-stall; send-keys `/exit` needs `MSYS_NO_PATHCONV=1` + `-l` (Git Bash converts leading `/` to `C:/Program Files/Git/…`) and verify the input line before Enter (slash-menu fuzzy-match can select a WRONG command — one stray Enter ran /gsd:update). Headless `spt … --attach </dev/null` detaches instantly (stdin EOF); `tail -f /dev/null |` holds it but pipe buffering hides frames — psmux is the real answer.
