---
name: pre-authored-panic-names-an-unmeasured-mechanism
description: "A test's panic text is written before the run and names a mechanism the assertion never measured — the red's own words are the least reliable evidence in it; read the timeline, and check whether the rig's claimed immunity is a comment or a check"
metadata: 
  node_type: memory
  type: project
  originSessionId: 17201085-bcd8-41f9-88bb-4175da4aa853
  modified: 2026-08-05T01:15:30.586Z
---

**Mechanism.** An assertion message is authored when the test is written, not when it fires. So it
names the failure the AUTHOR expected — and it prints that name for EVERY way the predicate can go
false. A red whose message says "Failure A: the resumed session lost its controller" is telling you
what the author feared, not what happened. Treating the panic string as a mechanism claim imports the
author's hypothesis into your RCA as if it were a measurement.

**The instance (golden 30873007187 attempt 4, 2026-08-04, `4b37512`).**
`resume_no_control_steal_e2e::brain_respawn_keeps_every_session_controller_and_still_promotes` failed
naming a control-steal at resume. Gate line: `ticks_before=[4, 17, 16] ticks_after=[4, 32, 33]
gained=[0, 15, 17] promoted=true`. deployah's forensics broke the named story on three counts:

1. **One frozen, two advancing, through a SINGLE `resume_sessions` call.** A re-attach steal
   DISPLACES the resumed set; sessions 1 and 2 kept their controllers through the same call.
2. **The deficit PREDATES the measured window.** Session 0 was spawned FIRST (`CONN_LIFECYCLE`
   conn=1 controller-attach `mono_ms=0`; conn=2 at 37, conn=3 at 69) yet held 4 ticks against 17/16
   at the post-resume snapshot — already 4x behind before the window opened. **A steal AT resume
   cannot produce a PRE-resume deficit.** This one measurement is the whole disarm.
3. **The rig's immunity to a dead producer is a COMMENT, not a check.**
   `resume_no_control_steal_e2e.rs:246-247` asserts "the child keeps ticking either way ... a frozen
   tally is a displaced controller, not a dead child" — but nothing measures child liveness at t1,
   and the baseline loop only requires `ticks > 0` ONCE, at the start. A starved or dead ticker child
   produces BYTE-IDENTICAL evidence to the steal it claims to exclude.

doyle withdrew his "candidate product defect" framing on point 2 and reclassified the victim to
candidate family member. Standing order while it is open: nobody writes "control-steal recurrence"
anywhere until a discriminator speaks.

**Why:** the panic string, the test NAME, and the rig's own comments are all AUTHOR-TIME artifacts.
They survive into a run that falsifies them and read as findings. The gate is not fooled by any of
them — the READER is. Kin [[test-name-asserts-what-fixture-never-creates]] (the name asserts what the
fixture never creates), [[stable-anchor-is-not-a-recycling-defense]] (a comment asserting a defense is
a claim about a field — go check the field),
[[announce-token-from-the-failing-frame-not-the-register]],
[[cascade-red-from-a-skipped-driver-is-zero-information]].

**How to apply:**
- Before quoting a panic message as a mechanism, ask **what else makes this predicate false.** If the
  message names one cause and the predicate admits several, the message is a label, not evidence.
- **Build the timeline first.** Attach/spawn order and per-entity counters BEFORE the measured window
  routinely disarm the named mechanism outright — a deficit that predates the window cannot be caused
  inside it.
- **Grep the rig for the immunity it claims.** For every "this can't be X because Y" comment, find the
  line that MEASURES Y. No line ⇒ X is live and produces identical evidence.
- **Census the accused function's CALLERS before hunting its mechanism.** Measured 2026-08-04: the
  brain never calls `resume_sessions` at all — `run_brain` calls `resume_session_cursors`
  (`brainproc.rs:255`, cursor-only, no subscribe) at BOTH sighting shas and the tip; `resume_sessions`
  has ZERO production callers (4, all tests) and has bound `AttachIntent::Viewer` since v0.30.4. It
  left the daemon path at `03c7109` on 2026-07-09, **24 days before the first sighting**. The panic
  did not merely name an unmeasured mechanism — it named a **retired** one. See
  [[accused-mechanism-needs-a-production-caller]].
- **Fix it with a discriminator, not a seam read — and put the discriminator on the path actually
  taken.** Rig side WORKS: child-pid liveness plus a producer-side counter bracketing the same window
  (`session_output_seq`, landed `5833787`). Product side FAILED exactly this test: the
  `RESUME_ATTACH_INTENT` breadcrumb (`9c9e6c5`) was placed at `brain.rs:1374` **inside
  `resume_sessions`** — the uncalled function — so it can never emit in this rig or any daemon-brain
  run, and its absence from a log reads as "resume chose viewer, all clear" when it means the probe
  never ran. An instrument sited by the panic's accusation inherits the accusation's error. See
  [[discriminator-question]], [[refuse-mechanism-until-something-discriminates]],
  [[e2e-leaked-daemons-shared-box]], [[a-predicate-without-its-tool-is-not-evidence]].
