---
name: panic-message-is-preauthored-not-a-finding
description: "A failing test's panic text names a mechanism it did not measure — read the DATA in the gate line, not the story the assertion tells about it."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: af542e3e-b09f-4831-8947-e03c0c37926b
  modified: 2026-08-04T06:08:03.969Z
---

An assertion's failure message is written before the run. It names ONE mechanism — the one the
test was built to catch — and it prints that name whatever actually caused the predicate to fail.
Treating that text as the finding hands a whole triage window to a mechanism that never fired.

Measured 2026-08-04, golden 30873007187 attempt 4 @`4b37512`, victim
`spt::resume_no_control_steal_e2e brain_respawn_keeps_every_session_controller_and_still_promotes`
(`crates/spt/tests/resume_no_control_steal_e2e.rs:488`). Panic said resume_sessions "STOLE the
controller slot ... Failure A". The gate line refuted it three ways:

- `gained=[0, 15, 17]` — one session frozen, two advancing, through a SINGLE `resume_sessions`
  call. A displacement applies to the resumed SET, not to one of three.
- `ticks_before=[4, 17, 16]` is the POST-RESUME snapshot, and the frozen session attached FIRST
  (`CONN_LIFECYCLE conn=1` mono_ms=0, conn=2 at 37, conn=3 at 69). Earliest start, 4x fewest ticks
  BEFORE the window opened. **A steal inside the window cannot make a deficit that predates it.**
- The rig's immunity to the alternative was a COMMENT (`:246-247`, "the child keeps ticking either
  way ... a frozen tally is a displaced controller, not a dead child") with no check behind it: the
  baseline loop requires `ticks > 0` once, at the start, and nothing measures child liveness at t1.
  A starved ticker child yields byte-identical evidence.

The gater had already ruled it a candidate PRODUCT defect on the strength of the panic's own
taxonomy, and retracted on the measurement ("a rig cannot fabricate zero-frames-for-one-session-only"
— it can, and here is the path). Same tree passed the row 3/3 earlier the same night.

**Why:** the message is the test author's hypothesis, not the run's observation. Believing it skips
the discriminator question entirely — and it is most persuasive exactly when the shape looks
behavioral (per-session, not a deadline burn), which is when it costs the most.

**How to apply:** on any red, read the emitted gate/diagnostic line and reconstruct what the numbers
permit BEFORE quoting the panic. Ask what else produces this exact evidence; if the rig claims
immunity to that alternative, find the CHECK, and if it is only a comment, the rig cannot
discriminate. Then propose the cheapest measurement that splits the two (here: child pid liveness +
a producer-side counter at t1, plus per-session attach intent) rather than reading the seam the
message points at.

Kin: [[test-name-asserts-what-fixture-never-creates]] (same defect in the test's NAME),
[[discriminator-question]], [[instrument-soundness-guards]],
[[stable-anchor-is-not-a-recycling-defense]] (a comment asserting a defense is a claim),
[[verify-the-subject-not-just-the-measurement]], [[is-this-red-mine-delta-test]].
