---
name: v0251-interrupt-watch-window
description: "v0.25.1 deployah RCA — interrupt-watch heal widened from --last 1 to a 12-turn window; the \"trailer outage\" was my own 2>&1 artifact"
metadata: 
  node_type: memory
  type: project
  originSessionId: 14b1eaca-9ae1-4577-917a-c0109fc710a1
  modified: 2026-07-19T12:42:39.057Z
---

2026-07-18 `/diagnose` deployah stuck-interrupted (Esc, never re-idle, inbound black-holed). SHIPPED v0.25.1.

Root cause: the interrupt-watch heartbeat read `--last 1` and healed only if the LATEST turn was the interrupt marker. Three spt-update notifies landed in the Esc→heal-tick gap and became newer turns, burying the marker — the heal saw a notify, concluded the agent had moved on, and stood down. doyle/todlando healed fine because nothing arrived to bury theirs.

Fix: scan a WINDOW (`--last 12`); heal when the window CONTAINS a marker AND the latest turn shows no activity; re-arm on real output. (The activity test itself was still wrong — see [[v0252-interrupt-heal-agent-activity]].)

**Course-correction worth keeping:** I also reported a second "node-wide `--json` trailer outage" defect. doyle grounded it — the `DIGEST:<id> version=N` trailer is STDERR-only and `spt_capture` reads stdout ONLY, so it never reached the adapter. I had fabricated the symptom with `2>&1` in my own diagnostic probes. Corrected CHANGELOG, GH release notes, and code comments; the trailer tolerance stays as harmless defensive hardening, reframed as not-a-real-fix.

Lesson (durable): never diagnose a stdout-only capture path through a `2>&1` probe.

Recovery recipe (same for both incidents): `spt api --adapter claude-spt state idle <id> --session-id <sid>` → `IDLE_PARKED_DRAIN`.
