---
name: no-run-warmup-does-not-build-the-fixtures-a-test-shells-out-to
description: cargo nextest run --no-run proves the test binary COMPILES and nothing about the sibling exes it shells out to; the precondition fails in 0.025s and looks like a red arm
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 6dff4e6a-bbb5-4514-8fc6-b3e1fe54943b
  modified: 2026-09-10T08:51:15.968Z
---

`cargo nextest run --no-run` builds the TEST BINARY. It does **not** build other packages' bins
that the test locates at runtime beside it.

MEASURED 2026-09-10 (doyle, releases#294 base-vs-head rig). I pre-warmed both arms with
`cargo nextest run --no-run -p spt --test contract_e2e -p spt-daemon --test sync`, exit 0, then ran
one smoke leg before committing to a 12-leg run. It failed in **0.025 s**:

```
required test fixture `mock-session` is missing at ...\target\debug\mock-session.exe
  (pre-build: cargo build -p mock-adapter --bin mock-session)
```

`crates/spt/tests/common/mod.rs:263` `sibling_bin()` asserts on a path beside `CARGO_BIN_EXE_spt`;
the fixtures come from **mock-adapter** (`capture-player`, `console-mode-probe`, `mock-session`,
`mock-shell`) and **spt-daemon** (`service_fixture`). Nothing in the `--no-run` selection builds
mock-adapter. All six contract legs would have red-flashed at 0.025 s.

**Two rules:**
1. A `--no-run` warm-up is not a rig readiness check. Assert the FIXTURE FILES exist before the
   first measured leg, and fail the driver if one is absent — a precondition red inside an arm is
   cheap to misread as an arm result.
2. **Run ONE smoke leg before any multi-leg measurement run.** This one cost 35 s and saved a full
   pass. It also proved the instrumentation actually printed, which was the other thing I could not
   have learned without running it.

Kin: [[open-the-subindex-before-running-a-gate]] (the act is the trigger),
[[a-stale-target-makes-a-check-pass-harder-not-fail]], IR-95 (the register entry this rig served).

Second, smaller trap from the same rig: **`bash driver.sh 2>&1 | tail -80` in the background hides
all progress until the script EXITS** — the task output file stays 0 bytes for the whole run. Write
per-leg logs to a directory and watch those, or drop the pipe.
