diff --git a/docs/active-work.md b/docs/active-work.md index 1dfa8a3..ea073cd 100644 --- a/docs/active-work.md +++ b/docs/active-work.md @@ -279,8 +279,11 @@ from #171 and #215. **`72da24a`**, worktree `/home/jeans/Repos/personal/pmacs-probe-sigint`. Recover with `git fetch githubsucks && git checkout gpu-probe-sigint-teardown`. -- **No PR. Framing revision 9 at `docs/gpu-probe-sigint-framing.md`, - APPROVED 2026-08-19 at `15c25ec`; NO IMPLEMENTATION and no fix +- **No PR. Framing revision 10 at `docs/gpu-probe-sigint-framing.md`, + AWAITING APPROVAL** — revision 9 was approved at `15c25ec`, but that + approval does **not** cover retiring D0b, which changes the approved + diagnostic sequence. **D1/D2 do not begin until revision 10 is + approved.** Also: NO IMPLEMENTATION and no fix proposed** — the mechanism is not known yet, and the framing says so rather than guessing. Revisions 1, 2 and 3 were each rejected on findings, all upheld; run provenance lives in @@ -301,7 +304,13 @@ from #171 and #215. - **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` - §D0a and `/home/jeans/build/pmacs-gate-targets/d0a/results.tsv`. + §D0a, transcribed in full into that committed document — after the + first transcription corrupted every log digest by one hex character + and dropped `/tmp` and `MemAvailable`. **`uptime` was never captured** + and is `UNKNOWN` for all ten runs: §7 names it, the harness kept only + the load averages, so that condition list was **not fully + satisfied**. The classifications stand; D1/D2's harness must capture + the whole list. - **Why it exists.** `ctrl_c_on_launcher_group_does_not_reach_spawned_daemon` fails in gate stage `sweep-crdt` with "child did not exit within 5s". **Pre-existing on `main`** — `72da24a` fails it in a clean worktree diff --git a/docs/gpu-probe-sigint-framing.md b/docs/gpu-probe-sigint-framing.md index 499b9b2..ca46744 100644 --- a/docs/gpu-probe-sigint-framing.md +++ b/docs/gpu-probe-sigint-framing.md @@ -1,8 +1,14 @@ # GPU launcher / probe SIGINT teardown — framing -Revision 9, approved 2026-08-19 at `15c25ec`. -Status: **D0a EXECUTED — see §4b. No fix implemented; mechanism still -unknown.** +Revision 10. Status: **AWAITING APPROVAL. No fix implemented; +mechanism still unknown.** + +Revision 9 was approved 2026-08-19 at `15c25ec`. **That approval does +not extend to this revision**, because retiring D0b (§7) materially +changes the approved diagnostic sequence — the approved text made D0b +mandatory before every other diagnostic. D0a's execution and result +(§4b) are reported under it, and D1/D2 do not begin until this revision +is approved. Revisions 1 and 2 were each rejected on five findings. Every correction is recorded in place rather than quietly rewritten, because three of @@ -22,6 +28,15 @@ them were claims this document itself had advanced: (manifest); ledgers still carried the falsified R9 conclusions (§11). **And a finding that reframes the lane: the failure has a datable onset (§4a) and is not long-standing.** +- r9 → r10: **D0b retired as a precondition** (§7), which changes the + approved sequence and is why this revision needs its own approval; + D0a executed and its causal conclusion narrowed twice — "source + hypothesis eliminated" withdrawn in favour of "the commits do not + discriminate under current conditions" (§4b, and the endpoint + table's two uniform-same rows); portable provenance corrected after + it corrupted every log digest and silently dropped `/tmp` and + `MemAvailable`; and `uptime` recorded as **UNKNOWN**, since §7 names + it but the harness kept only the load averages. - r8 → r9: D0a's classifier was not total — it named only "clean split" and "mixed", leaving both-green, both-red, non-execution, copy-disagreement and unrelated-failure outcomes unprescribed, all of @@ -381,7 +396,10 @@ group. confounding*; with an even run count one arm still holds the last slot, and that residue is accepted and stated rather than papered over. - - **Identical captured conditions per run**: same harness as D0b — + - **Identical captured conditions per run** — and D0a satisfied this + list only **partially**: it captured everything below except + `uptime`, keeping the load averages and discarding elapsed time. + D1/D2's harness must capture the whole list. Same harness as D0b — argv, worktree, `git rev-parse HEAD`, `git status --porcelain` emptiness, the Cargo suffixes executed, result, log digest — plus the machine facts that have already misled this lane once diff --git a/docs/probe-sigint-evidence.md b/docs/probe-sigint-evidence.md index 38db8b8..e1fe659 100644 --- a/docs/probe-sigint-evidence.md +++ b/docs/probe-sigint-evidence.md @@ -178,33 +178,53 @@ 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` | -**Exact commands.** Per run, with `TMPDIR=…/tmp/d0a` and -`CARGO_TARGET_DIR=…/d0a-A` or `…/d0a-B`, executed in +**Exact commands.** Every run, in full. `` is `/home/jeans/Repos/personal/pmacs-d0a-A` (detached at `7599661`) or -`…-d0a-B` (detached at `724b785`): +`/home/jeans/Repos/personal/pmacs-d0a-B` (detached at `724b785`); +`` is `/home/jeans/build/pmacs-gate-targets/d0a-A` or `…/d0a-B` +correspondingly: ``` -cargo build --workspace --no-default-features --features luajit,crdt \ - && cargo test --workspace --features crdt --no-fail-fast -- --skip basedpyright +env TMPDIR=/home/jeans/build/pmacs-gate-targets/tmp/d0a \ + CARGO_TARGET_DIR= \ + sh -c 'cd \ + && 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: +**Per-run provenance, transcribed.** All runs: `exit=101`, `dirty=0`, +`ok=0 failed=2`, suffixes `-5d9105cb` / `-d4dae4f0`, `/tmp` 3 G of 30 G. +Times are local 2026-08-19. `load` is the 1/5/15 average at run start; +`MemFree`/`MemAvail` in MB; `daemons` counts live `pmacs --daemon`: -| 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…` | +| start | run | class | red bins | load | MemFree | MemAvail | daemons | log sha256/16 | +|---|---|---|---|---|---|---|---|---| +| 12:21:20 | A#1 | red | 3 | 2.51 2.85 3.57 | 1549 | 42069 | 72 | `e1c0fe47d55d8f5e` | +| 12:26:55 | B#1 | red | 2 | 7.86 13.48 8.97 | 9405 | 42725 | 76 | `3105794d515e6ec3` | +| 12:32:12 | B#2 | red | 2 | 8.04 18.28 13.23 | 9761 | 43370 | 80 | `07a662fb5ca15687` | +| 12:35:39 | A#2 | red | 4 | 11.34 21.23 16.20 | 8933 | 43281 | 84 | `450aacb9d15244c9` | +| 12:39:35 | A#3 | red | 3 | 13.40 26.07 20.45 | 10628 | 42989 | 88 | `19156bbbc852e2d3` | +| 12:43:26 | B#3 | red | 2 | 8.66 22.18 20.82 | 8778 | 43588 | 92 | `6f0d768a76ed9cb0` | +| 12:47:20 | B#4 | red | 2 | 17.96 33.10 27.07 | 10403 | 43617 | 96 | `75a043a3d5568598` | +| 12:50:49 | A#4 | red | 3 | 10.99 27.07 26.52 | 10702 | 43335 | 100 | `c1b6d88c08764d9a` | +| 12:54:47 | A#5 | red | 3 | 9.75 28.50 28.70 | 8494 | 43053 | 104 | `2ae21a3f53fc1a1a` | +| 12:58:38 | B#5 | red | 2 | 11.43 26.69 28.97 | 8562 | 43122 | 108 | `82c5baa0c7e49e37` | + +**Two defects in the previous transcription of this table, recorded +rather than silently fixed.** Every digest had lost its leading hex +character — A#1 read `1c0fe47d55d8f5e…` where the value is +`e1c0fe47d55d8f5e` — because the extraction started one byte late in +`logsha=`. And `/tmp` and `MemAvailable` were captured by the +harness but dropped from the table. A transcription that silently +corrupts its own digests is worse than a pointer to the raw file, since +it looks verifiable and is not. + +**`uptime` was NOT captured, and is `UNKNOWN` for all ten runs.** §7's +condition list names `uptime`; the harness recorded only the load +averages from it and discarded the elapsed time. The classifications +stand — none of them depends on it — but the condition list was **not +fully satisfied**, and D1/D2's harness must capture it. Recorded rather +than quietly treated as met. Note the leaked-daemon count climbing 72 → 108, four per run. Recorded, not implicated: it rises monotonically while every run classifies the