From 4e84ff00506a8d330c4b26122cb469aa391b0418 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Wed, 19 Aug 2026 10:08:11 +0200 Subject: [PATCH] docs(framing): revision 8 --- the superseded one-run rule was still in force MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four findings on revision 7, all upheld. 1. The old one-run D0 rule survived in three durable places --- the manifest, this branch's ledger, and the framing's own §4a --- each still permitting a bisect when the endpoints merely "differ". That contradicts the N = 5 clean-split contract added in revision 7. All three now defer to that contract, and §4a's "needs only that the two clean endpoints differ now" is marked as the superseded rule it is. 2. D0a still overstated its evidence, in three ways now fixed: - "context-sensitive by construction, appearing only in the full sweep" is downgraded to what has been OBSERVED so far; - the historical 7/7 and 13/13 are stated as NOT endpoint-specific rates --- of seven reds only F6 ran at 724b785, of the greens only the last at 7599661, both with unknown cleanliness; - five runs are named a PREDEFINED EVIDENTIARY THRESHOLD chosen so the outcome cannot be argued after the fact, not something that mathematically separates intermittency. And the bisect now specifies its own classifier: every intermediate commit uses the identical N = 5 protocol, and a mixed classification ABORTS the bisect rather than being guessed, skipped, or rerun until it agrees. A bisect with cheaper steps than its endpoints would inherit the weakness the contract exists to remove. 3. The artifacts column is now exact per run, read from each log: R1/R2 UNKNOWN (no log preserved), R3 -5d9105cb/-d4dae4f0, R4 and R5 -6b4b8223 only, R6 -91f51d0b/-6b4b8223. R8's citation was half2.log:1; the executable lines are 438 and 459. The framing's last "not same binaries" is now "not the same compilations". 4. (Held ledger, 5274d6b.) It named a stale ledger tip and two different framing revisions on consecutive lines. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai --- docs/active-work.md | 9 ++++--- docs/gpu-probe-sigint-framing.md | 41 ++++++++++++++++++++++---------- docs/probe-sigint-evidence.md | 24 ++++++++++--------- 3 files changed, 48 insertions(+), 26 deletions(-) diff --git a/docs/active-work.md b/docs/active-work.md index 21ca140..1a68d85 100644 --- a/docs/active-work.md +++ b/docs/active-work.md @@ -279,7 +279,7 @@ 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 7 at `docs/gpu-probe-sigint-framing.md`; +- **No PR. Framing revision 8 at `docs/gpu-probe-sigint-framing.md`; 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 @@ -396,7 +396,9 @@ from #171 and #215. deterministically produce different outcomes, so the pair says nothing about determinism either. - **D0a is a decision procedure with no predicted outcome**, and one - run per endpoint decides nothing for a context-sensitive failure. + run per endpoint decides nothing. That the failure has appeared only + in the full sweep is **what has been observed so far**, not a + property established of the defect. **N = 5 full `sweep-crdt` runs per endpoint, interleaved A/B/A/B**, under the same captured conditions as D0b plus `uptime`, `free`, `/tmp` usage and leaked-daemon count. A bisect of @@ -408,7 +410,8 @@ from #171 and #215. separately cited a gate run the manifest never listed. - **D0 precedes every other diagnostic**, in two parts: **(a) reproduce the onset endpoints `7599661` and `724b785` clean, in - isolated target dirs** — not a bisect until they differ; **(b)** re-run + isolated target dirs**, under the N = 5 interleaved clean-split + contract below — a bare difference decides nothing; **(b)** 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 diff --git a/docs/gpu-probe-sigint-framing.md b/docs/gpu-probe-sigint-framing.md index a057fc7..9b1fd47 100644 --- a/docs/gpu-probe-sigint-framing.md +++ b/docs/gpu-probe-sigint-framing.md @@ -1,6 +1,6 @@ # GPU launcher / probe SIGINT teardown — framing -Revision 7. Status: **awaiting approval. No implementation.** +Revision 8. Status: **awaiting approval. No implementation.** Revisions 1 and 2 were each rejected on five findings. Every correction is recorded in place rather than quietly rewritten, because three of @@ -20,6 +20,10 @@ 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.** +- r7 → r8: the superseded one-run D0 rule survived in three places + (§4a, §7, manifest, ledger); D0a still overstated its rates and left + the bisect's own classifier unspecified (§7); residual artifact + wording and four wrong suffix attributions (§4, manifest). - r6 → r7: the ancestry supports **no** causal statement at all — the observations are non-comparable, and even "outcome is not determined by commit alone" is withdrawn (§4a); D0a was not yet a valid decision @@ -158,8 +162,8 @@ Revision 4 went further and called them "byte-different"; that is **withdrawn**, because the bytes a historical run executed are not knowable now — target directories have been overwritten, and a hash computed today is the hash of the current occupant. The weaker claim is -sufficient: R9 establishes **same target names and order**, not same -binaries. +sufficient: R9 establishes **same target names and order**, not the +same compilations. What the evidence is **consistent with** is an interaction. It does not isolate one, because the rows differ in more than the two columns shown @@ -248,9 +252,11 @@ distinguishes: `724b785`. And an older ancestor outside the interval behaving badly is simply -**irrelevant** to whether `7599661..724b785` contains a regression: a -bisect over that interval needs only that the two clean endpoints -differ *now*. +**irrelevant** to whether `7599661..724b785` contains a regression — +that question is settled by the endpoints themselves, under the N = 5 +clean-split contract in §7 D0a. (Revision 6 wrote "needs only that the +two clean endpoints differ *now*", which is the superseded one-run +rule; a bare difference decides nothing.) **This still supersedes the reduction matrix as the lane's first move**, as endpoint reproduction — which is a decision procedure, not a @@ -314,13 +320,18 @@ group. (last observed green) and `724b785` (first observed red), each checked out clean, each in its own isolated target directory. This is a **decision procedure with no predicted outcome**. One run per - endpoint decides nothing — this failure is context-sensitive by - construction, appearing only in the full sweep — so the procedure is + endpoint decides nothing: **so far** the failure has been observed + only in the full sweep, which is a statement about what has been run, + not a property established of the defect. The procedure is therefore specified rather than left to judgement: - - **N = 5 full `sweep-crdt` runs per endpoint**, since the observed - failure rate in the reproducing configuration is 7/7 and the - passing configuration 13/13; anything less cannot separate a real - difference from the intermittency that has not yet been excluded. + - **N = 5 full `sweep-crdt` runs per endpoint.** Five is a + **predefined evidentiary threshold, chosen in advance so the + outcome cannot be argued after the fact** — it does not + "mathematically separate" anything. The historical 7/7 red and + 13/13 green are **not endpoint-specific rates** and must not be + read as such: of the seven reds only F6 ran at `724b785`, and of + the greens only the last ran at `7599661`, both with **unknown + cleanliness**. - **Interleaved**, alternating endpoints A/B/A/B…, so any drift in machine state across the session hits both arms equally instead of landing entirely on whichever ran second. @@ -333,6 +344,12 @@ group. endpoint red and all N of the other green. A mixed result means the failure is intermittent under fixed source, and **no bisect is justified at all** — that outcome sends the lane back to D1/D2. + - **The bisect itself uses the same classifier.** Every intermediate + commit is classified by the identical N = 5 protocol under the same + captured conditions; a commit that classifies mixed **aborts the + bisect** rather than being guessed, skipped, or rerun until it + agrees. A bisect whose steps are cheaper than its endpoints would + inherit exactly the weakness this contract exists to remove. - **D0b — re-run the §4 matrix with captured provenance**, at `main`, recording the artifact hashes actually executed **at run time**. Revision 2's strongest claim collapsed because command shape silently diff --git a/docs/probe-sigint-evidence.md b/docs/probe-sigint-evidence.md index d8620a6..0bfc2fb 100644 --- a/docs/probe-sigint-evidence.md +++ b/docs/probe-sigint-evidence.md @@ -76,16 +76,16 @@ All in worktree `pmacs-mapping-gen` unless stated. `WT=mg` is `CARGO_TARGET_DIR=/home/jeans/build/pmacs-gate-targets/pmacs-mapping-gen-8cb089c8` except `WT=main`, which uses `…/pmacs-fdccc423`. -| id | exact command (after `cargo`) | WT | HEAD | clean | artifacts | result | log (sha256/16, bytes) | +| id | exact command (after `cargo`) | WT | HEAD | clean | Cargo suffixes executed | result | log (sha256/16, bytes) | |---|---|---|---|---|---|---|---| -| R1 | `test --features crdt --test gpu_invocation_acceptance ctrl_c_on_launcher_group` ×3 | mg | ~`724b785`–`5174f73` | UNKNOWN | reduction | green, 0.15–0.17 s | **none preserved** | -| R2 | `test --features crdt --test gpu_invocation_acceptance` | mg | ~`724b785`–`5174f73` | UNKNOWN | reduction | green, 15 passed | **none preserved** | -| R3 | `test --workspace --features crdt --no-fail-fast -- --skip basedpyright ctrl_c_on_launcher_group` | mg | ~`724b785`–`5174f73` | UNKNOWN | workspace | green | `e09a96512035284e` 33113 | -| R4 | `test --features crdt --lib --test gpu_invocation_acceptance --no-fail-fast` | mg | ~`724b785`–`5174f73` | UNKNOWN | reduction | green, 2145 + 15 | `89050c702de22d57` 158812 | -| R5 | `test --features crdt --no-fail-fast --test gate_script_acceptance --test gpu_invocation_acceptance` | mg | ~`5174f73`–`b72843a` | UNKNOWN | reduction | green | `31b3e5249b475479` 3706 | -| R6 | `test --features crdt --no-fail-fast --test gpu_font_acceptance --test gpu_initial_target_acceptance --test gpu_invocation_acceptance` | mg | ~`5174f73`–`b72843a` | UNKNOWN | reduction | green, 11+15+15 | `332693a39c73731a` 4569 | +| R1 | `test --features crdt --test gpu_invocation_acceptance ctrl_c_on_launcher_group` ×3 | mg | ~`724b785`–`5174f73` | UNKNOWN | **UNKNOWN** (no log) | green, 0.15–0.17 s | **none preserved** | +| R2 | `test --features crdt --test gpu_invocation_acceptance` | mg | ~`724b785`–`5174f73` | UNKNOWN | **UNKNOWN** (no log) | green, 15 passed | **none preserved** | +| R3 | `test --workspace --features crdt --no-fail-fast -- --skip basedpyright ctrl_c_on_launcher_group` | mg | ~`724b785`–`5174f73` | UNKNOWN | `-5d9105cb` / `-d4dae4f0` | green | `e09a96512035284e` 33113 | +| R4 | `test --features crdt --lib --test gpu_invocation_acceptance --no-fail-fast` | mg | ~`724b785`–`5174f73` | UNKNOWN | `-6b4b8223` only | green, 2145 + 15 | `89050c702de22d57` 158812 | +| R5 | `test --features crdt --no-fail-fast --test gate_script_acceptance --test gpu_invocation_acceptance` | mg | ~`5174f73`–`b72843a` | UNKNOWN | `-6b4b8223` only | green | `31b3e5249b475479` 3706 | +| R6 | `test --features crdt --no-fail-fast --test gpu_font_acceptance --test gpu_initial_target_acceptance --test gpu_invocation_acceptance` | mg | ~`5174f73`–`b72843a` | UNKNOWN | `-91f51d0b` / `-6b4b8223` | green, 11+15+15 | `332693a39c73731a` 4569 | | R7 | `test --features crdt --no-fail-fast --lib --bins --test acceptance --test ambient_isolation_acceptance --test auto_indent_acceptance --test auto_indent_crdt_acceptance --test auto_pair_acceptance --test auto_pair_crdt_acceptance --test autosave_acceptance --test bottom_panel_stage1_acceptance --test bottom_panel_stage2a_acceptance --test bottom_panel_stage2b_daemon_acceptance --test bottom_panel_stage2b_gpu_acceptance --test bottom_panel_stage2b_protocol_acceptance --test comment_toggle_acceptance --test compile_mode_acceptance --test gpu_invocation_acceptance` | mg | ~`b72843a` | UNKNOWN | `gpu_invocation…-6b4b8223` **only** — R7 does not select `gpu_initial_target` | green | `9e1ebc59ed9f0dd4` 187531 | -| R8 | `test --features crdt --no-fail-fast --test compile_mode_crdt_acceptance --test completion_popup_acceptance --test config_registry_acceptance --test cua_region_acceptance --test desktop_acceptance --test destination_capture_acceptance --test dired_acceptance --test discovery_acceptance --test discovery_stage2_acceptance --test editops_acceptance --test find_file_acceptance --test folding_acceptance --test folding_stage2_acceptance --test full_grid_resync_acceptance --test gate_script_acceptance --test git_status_stage1_acceptance --test gpu_font_acceptance --test gpu_initial_target_acceptance --test gpu_invocation_acceptance` | mg | ~`b72843a` | UNKNOWN | `-91f51d0b` (`half2.log:1`) / `-6b4b8223` | green | `8b26ebfcf5f871b4` 28677 | +| R8 | `test --features crdt --no-fail-fast --test compile_mode_crdt_acceptance --test completion_popup_acceptance --test config_registry_acceptance --test cua_region_acceptance --test desktop_acceptance --test destination_capture_acceptance --test dired_acceptance --test discovery_acceptance --test discovery_stage2_acceptance --test editops_acceptance --test find_file_acceptance --test folding_acceptance --test folding_stage2_acceptance --test full_grid_resync_acceptance --test gate_script_acceptance --test git_status_stage1_acceptance --test gpu_font_acceptance --test gpu_initial_target_acceptance --test gpu_invocation_acceptance` | mg | ~`b72843a` | UNKNOWN | `-91f51d0b` / `-6b4b8223` (`half2.log:438`, `:459`) | green | `8b26ebfcf5f871b4` 28677 | | R9 | `test --features crdt --no-fail-fast --lib --bins --test acceptance --test ambient_isolation_acceptance --test auto_indent_acceptance --test auto_indent_crdt_acceptance --test auto_pair_acceptance --test auto_pair_crdt_acceptance --test autosave_acceptance --test bottom_panel_stage1_acceptance --test bottom_panel_stage2a_acceptance --test bottom_panel_stage2b_daemon_acceptance --test bottom_panel_stage2b_gpu_acceptance --test bottom_panel_stage2b_protocol_acceptance --test comment_toggle_acceptance --test compile_mode_acceptance --test compile_mode_crdt_acceptance --test completion_popup_acceptance --test config_registry_acceptance --test cua_region_acceptance --test desktop_acceptance --test destination_capture_acceptance --test dired_acceptance --test discovery_acceptance --test discovery_stage2_acceptance --test editops_acceptance --test find_file_acceptance --test folding_acceptance --test folding_stage2_acceptance --test full_grid_resync_acceptance --test gate_script_acceptance --test git_status_stage1_acceptance --test gpu_font_acceptance --test gpu_initial_target_acceptance --test gpu_invocation_acceptance` | mg | ~`b72843a` | UNKNOWN | **`-91f51d0b` / `-6b4b8223`** (log `:3066`, `:3087`) | green | `b31d98ee2f427eca` 214566 | | R10 | `test --workspace --features crdt --no-fail-fast --test gpu_initial_target_acceptance --test gpu_invocation_acceptance -- --skip basedpyright` | mg | ~`b72843a` | UNKNOWN | **`-5d9105cb` AND `-d4dae4f0`** (log `:3`, `:24`) | green | `81b48fd7a0e261dc` 3553 | | F1 | `build --workspace --no-default-features --features luajit,crdt && test --workspace --features crdt --no-fail-fast -- --skip basedpyright` | **main** | `72da24a` | clean (verified `git status --porcelain` empty) | `-5d9105cb` / `-d4dae4f0`; today's occupants `e0578039…` / `00f06aeb…` | **red** | `10b55b8ba8741125` 334446 | @@ -174,9 +174,11 @@ log digest. Two constraints learned the hard way: - **first, reproduce the two candidate endpoints CLEANLY** — `7599661` (last observed green) and `724b785` (first observed red) — each checked out clean, each in its **own isolated target - directory**. A decision procedure with **no predicted outcome**: - endpoints differ → a regression lives in `7599661..724b785` and a - bisect over that interval is justified; endpoints agree → the + directory**. A decision procedure with **no predicted outcome**, and + **not decided by one run per endpoint** — see the N = 5 clean-split + contract in the framing's §7 D0a, which governs. In summary: a clean + split (all 5 red one side, all 5 green the other) permits a bisect of + `7599661..724b785`; **any mixed classification forbids it**; the difference is not captured by those two commits under current conditions, and the question becomes what else changed across the window.