---
name: resume-rebind-wedge
description: "2026-07-07 (v0.15.7): CC in-TUI /resume wedges spt-hosted perches — SessionStart source=resume re-fires in the SAME broker child (SPT_ENDPOINT_ID still set). Fixed: spt-hosted bind now carries departed-sid proof + strict+loud."
metadata: 
  node_type: memory
  type: project
  originSessionId: 13712404-60aa-4dc9-957b-9e854ac0f73d
---

Operator hunch confirmed + fixed (v0.15.7, REQ-HAZARD-RESUME-REBIND-WEDGE). Non-obvious CC
behavior that drives it: **Claude Code's in-TUI `/resume` slash command ends the current session
(SessionEnd reason=resume) and re-fires SessionStart with `source=resume` in the SAME OS/broker
child process** — so `$SPT_ENDPOINT_ID` (broker-injected once at spawn) is STILL SET on the resume.

Bug chain: `register_verb` routes ONLY `clear`/`compact` → the proofed `boundary` rotation; every
other source with an endpoint id present (incl. `resume`) fell to a plain `bind`. That bind path
(a) presented NO ownership proof and (b) used the exit-ignored `spt` seam (silent). But the perch
was ALREADY bound (info.json records the departed pre-resume sid), so core squat-protected, refused
the proofless re-pin, and the refusal was swallowed → perch stranded on the departed sid, every
id-scoped call AUTH_REFUSED, delivery dead while the endpoint looked healthy. This is
[[checkpoint-wake-broken-postclear-forcenative]]'s SESSION-PIN-WEDGE class reached via `/resume`
instead of a missed `/clear`.

**Fix (adapter-only, no core change):** the live CLI proved `boundary <MODE>` is a HARD enum
`{clear,compact}` — so a new `resume` boundary mode is core-blocked. But `bind` accepts
`--session-id <SESSION_ID>` ("proving association, matches the perch info.json"), so the proof rides
`bind`, not a boundary mode. The spt-hosted bind now presents the departed sid from adapter state
(`state/session/<id>.sid`, the REQ-DIST-BOUNDARY-ROTATE carrier) as `--session-id <prior>` proof
whenever a prior sid exists AND differs from the current, and runs `spt_strict` + loud on refusal.
First fresh-spawn bind stays proofless (no recorded sid) but is now strict too.

**How to apply:** the "same broker child, env persists, source=resume" fact generalizes — any
in-TUI CC action that re-fires SessionStart in-process (resume) keeps the broker-injected env, so a
verb branch keyed on `SPT_ENDPOINT_ID` presence fires again on a perch that is ALREADY bound; treat
a re-fire of an already-bound perch as a rotation (needs the departed-sid proof), never a fresh
bind. OPEN: wedge-vs-stomp (does core bind REFUSE a proofless re-pin of a live-owned perch, or
silently stomp?) is out to doyle; live in-TUI /resume repro on a disposable broker endpoint deferred
to the live-verify window (heavy — interactive slash-command in a broker PTY, no transcript).
