---
name: v0256-compact-receive-heal
description: "2026-07-21 SHIPPED v0.25.6 — /compact left endpoints stuck ACTIVE (hertz deployah RCA: GO sat 46m45s in msgpark until a human typed). SessionStart(compact) now idles + redrives the park, trigger-gated manual-vs-auto via the transcript's compactMetadata.trigger. Field collision verify OWED to hertz."
metadata: 
  node_type: memory
  type: project
  originSessionId: 66f829b9-b55e-4e0b-89f4-1053391a6d32
  modified: 2026-07-22T00:59:45.438Z
---

v0.25.6 (2026-07-21, commit `cc37047`): the **fourth stuck-ACTIVE black-hole entry point** — a
completed `/compact`. hertz RCA (deployah): doyle's RELEASE GO was `SENT` 79–88ms before the operator
submitted `/compact`; the delivery stub died in the compact collision (bounded inference), the body
stayed committed in msgpark (custody held), and SessionStart(source=compact) rebound the boundary but
never marked idle or re-drove the park (source-certain) → 46m45s silence until the next human prompt.
Interrupt watcher can't see it (no marker). Class siblings: never-first-turn (v0.15.9), StopFailure,
Esc-interrupt ([[v0251-interrupt-watch-window]]).

**Fix shape** (`REQ-HAZARD-COMPACT-STUCK-BUSY`, KNOWN-HAZARDS 2.10):
- Trigger from the transcript's LAST `"subtype":"compact_boundary"` record's
  `compactMetadata.trigger` — the SessionStart payload has NO trigger, and PreCompact/PostCompact
  hooks are NOT in our hooks.json (adding them = skeleton bump + stale-plugin exposure; rejected).
  A transcript line merely QUOTING `compact_boundary` (hertz's RCA landed exactly so in mine) must
  fail the subtype check — substring prefilter + real-record check.
- manual OR undetermined → `state idle` + (park non-empty) `--force-native` self-send redrive whose
  stub opens the turn whose UPS drains the park. Undetermined biases to HEAL (46min black hole beats
  one queued stub turn).
- auto → skip loudly: same SessionStart fires MID-TURN; idle/redrive = busy-injection, and the
  running turn's next PreToolUse drains the park anyway (REQ-STUB-PARK-NO-STALL).
- Empty park never redrives (no dead prompt). Custody untouched: new `HookEnv::msg_park_pending`
  non-destructive PEEK — SessionStart never drains (drain STAGES `.pending` that only a UPS commit
  destroys).

**OWED: field collision verify (hertz's spec)** — after node update + endpoint bounce: direct SENT →
manual `/compact` immediately after → NO human prompt → body surfaces exactly once post-compact
(healthy path; at-least-once under hook kill, by design — duplicates beat silent loss). hertz cannot
run it (OMP adapterless) and will NOT bounce deployah mid-release (cutting v0.39.4) — needs a
disposable claude-spt live endpoint, or deployah after its release turn parks.

**Doyle's standing rider (2026-07-21):** the stuck-ACTIVE family is now closed BY ENUMERATION (four
handlers, four entry points). If a FIFTH shape shows, do not extend the list — the family is
predicate-shaped: a mechanism that idles on ANY session-start that isn't mid-turn beats another
special case ([[list-vs-predicate-assertions]] applied to the healer itself, not just its tests).
