docs(ci-reds): R7 --- a third in-gate run was green, and my "exclusions" were not

The gate run immediately after the seventh occurrence passed all eight
stages with zero failures anywhere, R7's selector included. So "in-gate
always fails" is false, and the previous entry --- written before that
run --- is corrected rather than deleted.

The correction that matters is a reasoning error, not a data one. I
called seventeen green out-of-gate runs "four hypotheses excluded". They
exclude nothing: NOTHING outside the gate has ever reproduced this
failure, so matching one gate condition at a time outside the gate
cannot isolate an in-gate cause. All those runs establish is that none
of the four conditions reproduces it BY ITSELF.

Stated at the strength it carries: in-gate is 2 failures in 3 runs,
out-of-gate is 0 in 17. Suggestive, and not a clean split.

The method follows from that and is written down for the next
occurrence: varying conditions outside the gate cannot answer this
question, so the gate's ambient root, its exported environment, and
process state across stage boundaries each need a gate run with that one
thing changed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
This commit is contained in:
Levi Neuwirth 2026-08-29 17:27:43 +02:00
parent 68a16f9058
commit 2d769846dc
No known key found for this signature in database
2 changed files with 42 additions and 24 deletions

View File

@ -324,11 +324,14 @@ from #171 and #215.
- **GATE RUN 2: 7/8, `gpu` red on R7 again** (head `45d438c`, log - **GATE RUN 2: 7/8, `gpu` red on R7 again** (head `45d438c`, log
`20260829T150011Z-429115`). `sweep` ran fully green this time. `20260829T150011Z-429115`). `sweep` ran fully green this time.
**Two consecutive in-gate R7 failures prompted a narrowing**: 17 green **Two consecutive in-gate R7 failures prompted a narrowing**: 17 green
runs outside the gate excluded the selector being flaky, the gpu runs outside the gate, in four configurations, never reproduced it.
binary's own concurrency, the gate's TMPDIR, and residue from the **A third in-gate run was then GREEN**, so "in-gate always fails" is
preceding `m4` stage. The discriminator is in-gate versus out, and false and the registry's first write-up — which called those runs
the three obvious runner differences are ruled out. Recorded in the *exclusions* — is corrected there: nothing outside the gate has ever
registry; **not this lane's to solve**. reproduced this, so matching one gate condition at a time outside it
cannot isolate an in-gate cause. In-gate is 2 failures in 3;
out-of-gate is 0 in 17. Recorded in the registry; **not this lane's
to solve**.
- **Still owed, separately:** `workflow_dispatch` on `ci.yml`, and U9's - **Still owed, separately:** `workflow_dispatch` on `ci.yml`, and U9's
discriminating control — pin test-binary concurrency to 1, then load discriminating control — pin test-binary concurrency to 1, then load
a lone `--lib` binary — which has been named since 2026-08-09 and a lone `--lib` binary — which has been named since 2026-08-09 and

View File

@ -538,30 +538,45 @@ sixth was.
five were spread across lanes and months. It prompted a narrowing, and five were spread across lanes and months. It prompted a narrowing, and
the narrowing is the useful part. the narrowing is the useful part.
**Four hypotheses EXCLUDED, 17 green runs, all at head `45d438c` on the **A THIRD IN-GATE RUN WAS GREEN** (head `68a16f9`, log
failing worktree:** `20260829T152024Z-563254`, all eight stages, zero failures anywhere).
So "in-gate always fails" is **false**, and the paragraph below was
written before that run and is corrected rather than deleted.
| hypothesis | test | result | **Seventeen green runs outside the gate, in four configurations, all at
head `45d438c` on the failing worktree:**
| condition reproduced outside the gate | runs | result |
|---|---|---| |---|---|---|
| the selector is simply flaky | isolated selector | **3 green** | | isolated selector | 3 | green |
| the full `-p pmacs-gpu` binary's own concurrency | full binary, outside the gate | **6 green** | | full `-p pmacs-gpu` binary | 6 | green |
| the gate's isolated `TMPDIR` (this project already knows socket-path length matters) | full binary under a gate-shaped 61-character `TMPDIR` | **6 green** | | full binary under a gate-shaped 61-character `TMPDIR` (tested because this project already knows socket-path length matters) | 6 | green |
| residue from `m4`, which the gate runs immediately before `gpu` and which spawns fake LSP servers and PTYs | `m4` then `gpu` back to back, twice | **2 pairs green** | | `m4` then `gpu` back to back, as the gate orders them | 2 pairs | green |
**So the discriminator is "inside `scripts/gate`" versus "outside it", **THESE ARE NOT EXCLUSIONS, and an earlier version of this entry called
and it is NOT the TMPDIR, NOT the preceding stage, and NOT the them that.** The reasoning was wrong: **nothing outside the gate has
binary's own concurrency.** Something else about the gate's execution ever reproduced this failure**, in 17 runs across four configurations —
context remains, and this row does not guess at it. so matching one gate condition at a time *outside* the gate cannot
isolate an in-gate cause. All these runs establish is that none of the
four conditions **by itself** reproduces the failure. They do not show
that any of them is uninvolved when the gate supplies the rest.
**Causal status: still UNRESOLVED.** What these two occurrences add is **What the observations actually support**, stated at the strength they
a sharper question than the row had before: previous entries compared carry: in-gate is **2 failures in 3 runs**; out-of-gate is **0 failures
lanes and trees, and this one says the difference is in the *runner*, in 17**. That asymmetry is suggestive and it is not a clean split,
with the three most obvious runner differences already ruled out. because the third in-gate run passed.
* **Next occurrence should start from that**, not from another tree **The method for the next occurrence follows from that.** Varying
exclusion. The remaining candidates are the gate's ambient root, its conditions outside the gate cannot answer this question. It has to be
exported environment, and process state carried across stage varied INSIDE — the gate's ambient root, its exported environment, and
boundaries — none of which has been isolated. process state carried across stage boundaries are the uneliminated
candidates, and each would need a gate run with that one thing changed.
**Causal status: still UNRESOLVED.** What these occurrences add is a
sharper question and a method, not a cause: previous entries compared
lanes and trees, and these locate the asymmetry in the *runner* while
showing that the obvious way to probe it — reproducing gate conditions
outside the gate — cannot work.
**Fifth occurrence — panel cell-mapping generation (§5b) framing, **Fifth occurrence — panel cell-mapping generation (§5b) framing,
2026-08-15, local (Linux).** The `scripts/gate` **`gpu` step** again, 2026-08-15, local (Linux).** The `scripts/gate` **`gpu` step** again,