docs: the m4 red is environmental --- signature-level pair, and a green gate

The `/tmp/.git` diagnosis, finished properly.

**Compared on SIGNATURE, not test name**, which is what the ledger's own
CI-triage rule requires. The contaminated leg panics at
`m4_acceptance.rs:5668:5` and `:6615:5` with `.received = ""` ---
byte-identical to the gate red's own signature --- and the clean leg has
ZERO panics. Same binary, same commit, one variable.

**All nine gates pass under an isolated `TMPDIR`**: m4 168/0/3 by the
mandated command, and the 117-target `--workspace --no-fail-fast` sweep
with zero failures anywhere, `m4_acceptance` running all 171 inside it.

**The marker is left in place.** It is foreign, isolating is sufficient,
and deleting it is not this lane's call. Recorded with the constraint
that matters: the isolated `TMPDIR` must be outside `/tmp` AND outside
every git worktree, because a child of `/tmp` is not isolated ---
`/tmp/.git` is still its ancestor.

**One hazard this cost a round, worth the bullet it gets.** A libtest
filter that matches nothing prints `0 passed; 0 failed; N filtered out`
and exits ZERO. This shell is zsh, which does not word-split unquoted
parameter expansions, so `NAMES="a b"; cargo test -- $NAMES` passes one
argument, matches no test, and reports green. The contaminated leg
"passed" that way and briefly looked like the hypothesis collapsing.
The fix is to read the `running N tests` line, which is the only place
a filter's actual reach is stated --- the same family as the
`feature-census` trap already recorded two bullets above, and the same
lesson as "a probe must fail loudly".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
This commit is contained in:
Levi Neuwirth 2026-08-12 00:04:12 +02:00
parent 41a08b8237
commit b7fea705a0
No known key found for this signature in database
2 changed files with 38 additions and 4 deletions

View File

@ -338,14 +338,28 @@ waits for a signal that is not coming.
was created at 20:14 CEST, **3.5 h before** the gate run at 23:45;
`/tmp` held 8,920 entries. That is handoff §1's recorded hazard
exactly.
- **A discriminating pair, same binary and commit, one variable:**
`TMPDIR=/tmp` → **0/2**, `TMPDIR=<marker-free>` → **2/2**. A rerun
would have established nothing; this establishes the cause.
- **A discriminating pair compared on SIGNATURE, not test name**, same
binary and commit, one variable. `TMPDIR=/tmp` → **0/2**, panicking
at `m4_acceptance.rs:5668:5` and `:6615:5` with `.received = ""` —
**byte-identical to the gate red's own signature**.
`TMPDIR=<marker-free>` → **2/2 with zero panics**. A rerun would
have established only intermittence; the pair establishes the cause.
**`scripts/gate` isolates the target dir and five ambient roots but
NOT `TMPDIR`** — recorded in handoff §1, where the standing fix is
assigned to the gate lane rather than to this PR.
**The marker was left in place**: it is foreign, deleting it is
unnecessary, and the isolated `TMPDIR` is the correct remedy. It must
be **outside `/tmp` and outside every git worktree** — a child of
`/tmp` is not isolated, because `/tmp/.git` remains its ancestor.
- **GREEN under an isolated `TMPDIR`: all nine gates pass** (log
`20260811T215605Z-2664352`). fmt, clippy, lib, lib-crdt,
`gpu_invocation_acceptance`, **m4 168/0/3**, `PMACS_REQUIRE_GPU=1 -p
pmacs-gpu`, the **117-target `--workspace --no-fail-fast` sweep with
zero failures anywhere** (`m4_acceptance` running all 171 in it), and
`diff-check`.
## The GUI arc — Stage 0 MERGED as #236 (`f8ad3e7`)
**Written at the branch's first commit**, with the framing, which is

View File

@ -230,10 +230,30 @@ commands, read `docs/active-work.md` immediately after this file.
```
Check the ancestors of the temp root for `.git`, `Cargo.toml` and
friends before believing any markerless-fixture red. **Isolating
friends before believing any markerless-fixture red, and **compare
SIGNATURES, not test names** — here both runs matched on panic site
(`:5668:5`, `:6615:5`) and on `.received = ""`, which is what makes
the pair evidence rather than coincidence.
**The isolated `TMPDIR` must be outside `/tmp` AND outside every git
worktree.** A child of `/tmp` is not isolated: `/tmp/.git` is still
its ancestor. Verify with `git -C <dir> rev-parse --show-toplevel`
failing, not by eye. **Do not delete a foreign marker** — isolating
is sufficient and deletion is someone else's call. **Isolating
`TMPDIR` inside `scripts/gate` is the standing fix and belongs to
the gate lane**, not to whichever feature PR happens to trip over
it.
- **A libtest filter that matches nothing reports `test result: ok`.**
`0 passed; 0 failed; N filtered out` and a zero exit code are what a
*typo'd or mis-quoted filter* looks like, and it is indistinguishable
from success at a glance. **This shell is zsh, which does NOT
word-split unquoted parameter expansions**, so `NAMES="a b"; cargo
test -- $NAMES` passes ONE argument `"a b"`, matches no test, and
prints a green line. Seen 2026-08-11 while running a
contaminated/clean pair: the contaminated leg "passed" and briefly
looked like the environmental hypothesis collapsing. **Read the
`running N tests` line, not just `test result`** — it is the only
place the filter's actual reach is stated.
- **Deliberately unbuilt**: kernel notification (framing option E) —
a framed option, not residue; its trigger is the 4 s worst-case
external-change latency mattering in practice.