From 5f5fde6dde1700a0840de53cfdc68ffe6d0d7cfe Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Wed, 19 Aug 2026 13:39:46 +0200 Subject: [PATCH] docs(framing): revision 10 --- awaiting approval; fix the corrupted provenance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two findings, both upheld. 1. The portable provenance was corrupted and incomplete --- worse than the machine-local pointer it replaced, because it looked verifiable and was not. Every log digest had lost its leading hex character (A#1 recorded as 1c0fe47d55d8f5e... where the value is e1c0fe47d55d8f5e): the extraction started one byte late in `logsha=`. The captured /tmp and MemAvailable columns were dropped, and the command block used ellipsed paths. All ten digests are corrected, both columns restored, and the command is written out in full with only two named placeholders. Separately: `uptime` was NEVER CAPTURED. §7's condition list names it; the harness kept the load averages from it and discarded the elapsed time. It is now recorded as UNKNOWN for all ten runs, with the condition list marked as only partially satisfied rather than implied met. The classifications stand --- none depends on uptime --- and D1/D2's harness must capture the whole list. 2. Retiring D0b materially changes the approved diagnostic sequence, which made D0b mandatory before every other diagnostic. The document still claimed revision 9, approved at 15c25ec, for a decision that approval does not contain. Promoted to revision 10 and marked AWAITING APPROVAL; D0a's execution and result are reported under revision 9, and D1/D2 do not begin until revision 10 is approved. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai --- docs/active-work.md | 15 ++++++-- docs/gpu-probe-sigint-framing.md | 26 +++++++++++--- docs/probe-sigint-evidence.md | 62 +++++++++++++++++++++----------- 3 files changed, 75 insertions(+), 28 deletions(-) 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