---
name: whole-test-wall-time-is-not-an-internal-budget-margin
description: "A test's total duration cannot establish how much of an INTERNAL poll/deadline budget it consumed — setup and teardown sit outside the window, and a FAIL truncates the path entirely."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 1f74e1f6-5968-4a83-a94b-b1fd8f62c4ee
  modified: 2026-09-10T08:11:27.744Z
---

**Total wall time and an internal budget's margin are different quantities. No amount of
whole-test timing history establishes budget headroom.** Three faces, all 2026-09-10, golden
34445961595, across two agents.

**Face 1 — setup/teardown sit OUTSIDE the window.** `live_agent_lifecycle_e2e` PASSed at 34.908s
on Windows against a 30s INTERNAL poll deadline (`contract_e2e.rs:393`). I read the 34.908s as
"passing with almost nothing to spare." It establishes nothing: bring-up and teardown are outside
the 30s window, so the poll may have consumed 3s or 29s and the total cannot say which.

**Face 2 — a FAIL and a PASS are DIFFERENT EXECUTION PATHS, so their totals are not comparable at
all.** Panel 2 PASSed at 61.304s pre-milestone and FAILed at 58.77s at head. I called "less time
and still failed" a signal. doyle read the call site: `wait_for_stream_except` is called at
`sync.rs:201`, and `serve_sync` + the puller join + every assertion come AFTER it — so a FAIL
TRUNCATES the test there. The failing path SHOULD cost less. The 2.5s gap carries nothing in
either direction.

**Face 3 — spread does not imply margin either.** I fell back to "16.8–35.0s spread means little
headroom against the 30s wall." Same conflation, one message after retracting it. Whole-test
VARIANCE is still whole-test.

⭐ **THE HARD LIMIT THIS IMPOSES:** nextest suppresses output for PASSING tests, so internal margins
are UNRECOVERABLE from CI history — every green run is silent about its own margin. The deeper
cause is ours, not nextest's: NEITHER budget prints a clock when it expires (panel 1 panics a
content claim with no elapsed; panel 2 panics "sync stream never appeared" with no elapsed and no
iteration count). A budget that cannot say how much it burned makes every run silent about its own
margin — IR-84's class.

**How to apply:** to speak about a budget's margin, INSTRUMENT it — elapsed inside the window,
iterations consumed, and the PRODUCER's progress (a poll's own timings cannot separate a slow
watcher from a slow producer). Run with `--success-output immediate` so a PASSING baseline still
prints them; a failing run is NOT required — my "it has to fail to be informative" was wrong and
would have cost a run. When writing a budget, make its expiry message carry the clock and the
count. Related: [[a-retraction-does-not-propagate-to-the-adjacent-claim]] ·
[[a-widened-wall-clock-margin-is-a-longer-coin]] · [[occupancy-is-not-contention]].
