---
name: alarm-every-test-run
description: "STANDING: every test run/check gets an ETA + a self-owned timebox — silence looks identical to still-running. $OWL new-alarm is LEGACY/DEAD (prints success, never fires); use timeout-wrapped background runs, not alarms"
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 88df48e9-d18d-42cc-b535-aa2cd6cce078
  modified: 2026-08-03T09:37:22.353Z
---

**Merged 2026-08-03 from both memory roots ([[two-memory-roots-diverged]]) — one store held the
directive, the other its later correction. The correction is the operative half.**

## The standing directive (operator 2026-07-05)

Any time you launch OR check on a test run (local gate, matrix leg, CI job), determine an ETA and
own a timebox for ETA + margin.

**Why:** formalized after an hours-long wedge (harness stdin slurp) went unnoticed —
background-task completion notifications never fire if the run wedges, and **silence looks
identical to "still running"**. Related wedge classes:
[[daemon-lib-tests-deadlock-on-live-host]], [[test-subagent-stalls-on-hanging-test]],
[[seedmap-test-collides-live-daemon]] (cdb stack-sampler recipe lives there).

## ⚠ The mechanism the directive named is DEAD

- **2026-07-07 (operator):** `$OWL new-alarm` delivers to the LEGACY owl listener — a modern spt
  endpoint never receives it ([[legacy-psyche-migration-2026-07-06]]). Checked v0.28.0: modern
  `spt` has no alarm verb.
- **2026-07-09 (operator):** it **does not work at all**. It prints `NEW-ALARM-SCHEDULED` and never
  fires — ⭐ a success banner over a no-op, the worst shape of dead mechanism, because it reads as a
  backstop you now believe you have.
- **2026-07 fleet migration:** the legacy `$OWL`/`$LIVE` era ended entirely (AGENTS.md). Do not
  reach for an alarm verb.
- (Historical, now moot: the positional `-- <message>` form choked on parens/shell metachars — body
  had to be piped via stdin; SELF_ID auto-detect failed in doyle's session.)

⭐⭐ **The directive outlived its mechanism.** A rule that names a tool needs re-checking when the
tool dies, or it goes on being "followed" against nothing — the operator had to prod twice during
the f2a799e re-gate while the alarm supposedly guarding it had never existed. Same family as
[[rule-failed-its-author-needs-a-mechanism]] and [[a-predicate-without-its-tool-is-not-evidence]].

## How to apply NOW

1. **Timebox inside the command, not outside it.** Prefer `run_in_background` with a hard `timeout`
   wrapper so a wedge self-terminates and the completion notification always arrives.
2. **Push the rule down to subagents** — instruct test subagents to timeout-wrap every
   cargo/nextest invocation (600s cap) and to kill their own orphans.
3. **ScheduleWakeup / Monitor-side timing** is the surviving timer surface.
4. **When an ETA passes with no notification during an active turn, go look** — check output-file
   mtime/tail for liveness, then kill orphans (`spt_daemon-*` test bins, stray powershell) rather
   than continuing to wait.
5. On a fired timer with the run still going: liveness-check before concluding wedge. A slow run
   and a wedged run are the same silence until you measure the file.
