docs(evidence): narrow the D0a conclusion; retire D0b as a precondition

Three findings, all upheld.

1. The causal conclusion overreached, in the same way this lane has
   overreached before. Uniform-red at both endpoints today proves only
   that the two commits DO NOT DISCRIMINATE UNDER CURRENT CONDITIONS.
   "Source hypothesis eliminated", "the interval cannot contain the
   transition" and "unreachable by source" are withdrawn from the
   framing, the manifest and the ledger: a historical regression could
   be masked by a later environmental effect, or by a source/environment
   interaction under which both commits now fail. Failing to
   discriminate is not the same as not differing. "No bisect is
   justified under current conditions" is what survives, and the
   approved endpoint table's two uniform-same rows are corrected to say
   the same thing.

2. D0b was still mandatory, and going to D1/D2 would have skipped an
   approved step. It is now RETIRED AS A PRECONDITION with the reason
   recorded: it existed to make the reduction matrix trustworthy so the
   subset-vs-full comparison could locate the mechanism indirectly,
   and D0a has since produced a reliable direct reproduction that D1/D2
   measure against. Re-running ten reduction rows to sharpen an
   indirect instrument while a direct one is in hand is the wrong order
   of work. The obligation is NOT discharged: A3 still binds, so if
   D1/D2 fail to account for why every subset passed, D0b runs before
   this lane closes.

3. Provenance is now portable. The exact per-run command and a
   transcribed ten-row table --- start time, class, red bins, load,
   freeMB, daemon count, log digest --- are committed, rather than
   delegated to a machine-local results.tsv. Raw logs stay local by
   design. The transcription also surfaces something the delegation hid:
   the leaked-daemon count climbs 72 -> 108, four per run, monotonically
   while every run classifies identically. Recorded, not implicated.

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-19 13:23:19 +02:00
parent 24a84b5381
commit 18b74d7a97
No known key found for this signature in database
2 changed files with 62 additions and 15 deletions

View File

@ -290,10 +290,14 @@ from #171 and #215.
detached worktrees with isolated target dirs, `dirty=0` per run, zero
voids, zero splits. **A (`7599661`) uniform-red; B (`724b785`)
uniform-red.** So `7599661`, which passed inside `sweep-crdt` on
08-15, fails 5/5 clean today: **the source hypothesis is eliminated
and no bisect will run.** The onset window is demoted to a true but
unreachable-by-source observation. No package activity in the window
(`pacman.log`), which is a cheap negative and not pursued further.
08-15, fails 5/5 clean today: **the two commits do not discriminate
under current conditions, so no bisect will run.** That is the whole
claim — "source hypothesis eliminated" and "unreachable by source"
are **withdrawn**, since a historical regression could be masked by a
later environmental effect or a source/environment interaction.
Failing to discriminate is not the same as not differing. The onset
window is deprioritised, not excluded. No package activity in the
window (`pacman.log`) — a cheap negative, not pursued further.
- **The useful product is a RELIABLE REPRODUCTION** — 10/10 across two
commits at ~4 min/run. D1/D2 no longer wait on a rare event and are
the next step. Per-run provenance in `docs/probe-sigint-evidence.md`
@ -439,7 +443,12 @@ from #171 and #215.
- **D0 precedes every other diagnostic**, in two parts: **(a)
reproduce the onset endpoints `7599661` and `724b785` clean, in
isolated target dirs**, under the N = 5 interleaved clean-split
contract below — a bare difference decides nothing; **(b)** re-run
contract below — a bare difference decides nothing. **(a) is DONE.**
**(b) is RETIRED as a precondition** (2026-08-19) because D0a yielded
a reliable direct reproduction and D1/D2 measure the mechanism
itself; **its obligation survives under A3** — if D1/D2 do not
account for the subset-vs-full difference, D0b runs before the lane
closes. It read: re-run
the matrix at `main` under a harness capturing provenance **and the
artifact hashes executed at run time**, since command shape silently
changed the binary once already and a hash computed later reflects

View File

@ -178,10 +178,39 @@ precondition then the `sweep-crdt` command. `dirty=0` verified per run.
| A#5 | A | `7599661` | **red** | 0 / 2 | 3 | `d0a/A-5.log` |
| B#5 | B | `724b785` | **red** | 0 / 2 | 2 | `d0a/B-5.log` |
Full per-run provenance — timestamp, HEAD, dirty count, exit, both copy
results, unrelated red-bin count, Cargo suffixes, `uptime`, `free`,
`/tmp` usage, leaked-daemon count, log digest — is in
`/home/jeans/build/pmacs-gate-targets/d0a/results.tsv`.
**Exact commands.** Per run, with `TMPDIR=…/tmp/d0a` and
`CARGO_TARGET_DIR=…/d0a-A` or `…/d0a-B`, executed in
`/home/jeans/Repos/personal/pmacs-d0a-A` (detached at `7599661`) or
`…-d0a-B` (detached at `724b785`):
```
cargo build --workspace --no-default-features --features luajit,crdt \
&& cargo test --workspace --features crdt --no-fail-fast -- --skip basedpyright
```
**Per-run provenance, transcribed** (all runs `exit=101`, `dirty=0`,
`ok=0 failed=2`, suffixes `-5d9105cb` / `-d4dae4f0`). Times are local
2026-08-19; `load` is the 1/5/15 average at run start; `freeMB` is
`MemFree`; `daemons` counts live `pmacs --daemon` processes:
| start | run | class | red bins | load | freeMB | daemons | log sha256/16 |
|---|---|---|---|---|---|---|---|
| 12:21:20 | A#1 | red | 3 | 2.51, 2.85, 3.57 | 1549 | 72 | `1c0fe47d55d8f5e…` |
| 12:26:55 | B#1 | red | 2 | 7.86, 13.48, 8.97 | 9405 | 76 | `105794d515e6ec3…` |
| 12:32:12 | B#2 | red | 2 | 8.04, 18.28, 13.23 | 9761 | 80 | `7a662fb5ca15687…` |
| 12:35:39 | A#2 | red | 4 | 11.34, 21.23, 16.20 | 8933 | 84 | `50aacb9d15244c9…` |
| 12:39:35 | A#3 | red | 3 | 13.40, 26.07, 20.45 | 10628 | 88 | `9156bbbc852e2d3…` |
| 12:43:26 | B#3 | red | 2 | 8.66, 22.18, 20.82 | 8778 | 92 | `f0d768a76ed9cb0…` |
| 12:47:20 | B#4 | red | 2 | 17.96, 33.10, 27.07 | 10403 | 96 | `5a043a3d5568598…` |
| 12:50:49 | A#4 | red | 3 | 10.99, 27.07, 26.52 | 10702 | 100 | `1b6d88c08764d9a…` |
| 12:54:47 | A#5 | red | 3 | 9.75, 28.50, 28.70 | 8494 | 104 | `ae21a3f53fc1a1a…` |
| 12:58:38 | B#5 | red | 2 | 11.43, 26.69, 28.97 | 8562 | 108 | `2c5baa0c7e49e37…` |
Note the leaked-daemon count climbing 72 → 108, four per run. Recorded,
not implicated: it rises monotonically while every run classifies the
same. Raw logs stay machine-local at
`/home/jeans/build/pmacs-gate-targets/d0a/`; the table above is the
portable record.
**Endpoint verdicts: A uniform-red, B uniform-red.** By the approved
table this is the *both endpoints uniform the same way* row:
@ -192,12 +221,21 @@ table this is the *both endpoints uniform the same way* row:
### What this settles
- **The source hypothesis is eliminated for this interval.** `7599661`
passed inside `sweep-crdt` on 08-15 and now fails **5/5** clean. No
bisect of `7599661..724b785` is justified, and none will be run.
- **The onset window is demoted as a lead.** It remains a true
observation, but since neither endpoint reproduces the old green, the
window cannot be probed by source at all.
- **The two commits do not discriminate under current conditions.**
`7599661` passed inside `sweep-crdt` on 08-15 and now fails **5/5**
clean. **No bisect of `7599661..724b785` is justified under current
conditions**, and none will be run.
- **That is the whole of the causal claim.** An earlier wording here
said "the source hypothesis is eliminated" and that "the interval
cannot contain the transition"; both are **withdrawn**. Uniform-red
today is silent about what was true on 08-15 — a historical source
regression could be **masked** by a later environmental effect, or by
a source/environment interaction that makes both commits fail now.
Not discriminating is not the same as not differing.
- **The onset window is deprioritised, not excluded.** It remains a
true observation, and it remains *possible* that source matters
within it; what is established is only that source cannot be
probed **by this comparison, now**.
- **A reliable reproduction now exists.** 10/10 today, on two different
commits, at ~4 minutes per run. **This is the most useful thing D0a
produced**: the mechanism diagnostics D1/D2 no longer depend on a