docs(framing): revision 8 --- the superseded one-run rule was still in force

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) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
This commit is contained in:
Levi Neuwirth 2026-08-19 10:08:11 +02:00
parent 7110256956
commit 4e84ff0050
No known key found for this signature in database
3 changed files with 48 additions and 26 deletions

View File

@ -279,7 +279,7 @@ from #171 and #215.
**`72da24a`**, worktree **`72da24a`**, worktree
`/home/jeans/Repos/personal/pmacs-probe-sigint`. Recover with `/home/jeans/Repos/personal/pmacs-probe-sigint`. Recover with
`git fetch githubsucks && git checkout gpu-probe-sigint-teardown`. `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 NO IMPLEMENTATION and no fix proposed** — the mechanism is not known
yet, and the framing says so rather than guessing. Revisions 1, 2 and 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 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 deterministically produce different outcomes, so the pair says
nothing about determinism either. nothing about determinism either.
- **D0a is a decision procedure with no predicted outcome**, and one - **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**, **N = 5 full `sweep-crdt` runs per endpoint, interleaved A/B/A/B**,
under the same captured conditions as D0b plus `uptime`, `free`, under the same captured conditions as D0b plus `uptime`, `free`,
`/tmp` usage and leaked-daemon count. A bisect of `/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. separately cited a gate run the manifest never listed.
- **D0 precedes every other diagnostic**, in two parts: **(a) - **D0 precedes every other diagnostic**, in two parts: **(a)
reproduce the onset endpoints `7599661` and `724b785` clean, in 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 the matrix at `main` under a harness capturing provenance **and the
artifact hashes executed at run time**, since command shape silently artifact hashes executed at run time**, since command shape silently
changed the binary once already and a hash computed later reflects changed the binary once already and a hash computed later reflects

View File

@ -1,6 +1,6 @@
# GPU launcher / probe SIGINT teardown — framing # 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 Revisions 1 and 2 were each rejected on five findings. Every correction
is recorded in place rather than quietly rewritten, because three of 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). (manifest); ledgers still carried the falsified R9 conclusions (§11).
**And a finding that reframes the lane: the failure has a datable **And a finding that reframes the lane: the failure has a datable
onset (§4a) and is not long-standing.** 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 - r6 → r7: the ancestry supports **no** causal statement at all — the
observations are non-comparable, and even "outcome is not determined observations are non-comparable, and even "outcome is not determined
by commit alone" is withdrawn (§4a); D0a was not yet a valid decision 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 **withdrawn**, because the bytes a historical run executed are not
knowable now — target directories have been overwritten, and a hash knowable now — target directories have been overwritten, and a hash
computed today is the hash of the current occupant. The weaker claim is computed today is the hash of the current occupant. The weaker claim is
sufficient: R9 establishes **same target names and order**, not same sufficient: R9 establishes **same target names and order**, not the
binaries. same compilations.
What the evidence is **consistent with** is an interaction. It does not 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 isolate one, because the rows differ in more than the two columns shown
@ -248,9 +252,11 @@ distinguishes:
`724b785`. `724b785`.
And an older ancestor outside the interval behaving badly is simply And an older ancestor outside the interval behaving badly is simply
**irrelevant** to whether `7599661..724b785` contains a regression: a **irrelevant** to whether `7599661..724b785` contains a regression —
bisect over that interval needs only that the two clean endpoints that question is settled by the endpoints themselves, under the N = 5
differ *now*. 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 **This still supersedes the reduction matrix as the lane's first
move**, as endpoint reproduction — which is a decision procedure, not a 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 (last observed green) and `724b785` (first observed red), each
checked out clean, each in its own isolated target directory. This is checked out clean, each in its own isolated target directory. This is
a **decision procedure with no predicted outcome**. One run per a **decision procedure with no predicted outcome**. One run per
endpoint decides nothing — this failure is context-sensitive by endpoint decides nothing: **so far** the failure has been observed
construction, appearing only in the full sweep — so the procedure is 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: specified rather than left to judgement:
- **N = 5 full `sweep-crdt` runs per endpoint**, since the observed - **N = 5 full `sweep-crdt` runs per endpoint.** Five is a
failure rate in the reproducing configuration is 7/7 and the **predefined evidentiary threshold, chosen in advance so the
passing configuration 13/13; anything less cannot separate a real outcome cannot be argued after the fact** — it does not
difference from the intermittency that has not yet been excluded. "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 - **Interleaved**, alternating endpoints A/B/A/B…, so any drift in
machine state across the session hits both arms equally instead of machine state across the session hits both arms equally instead of
landing entirely on whichever ran second. 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 endpoint red and all N of the other green. A mixed result means the
failure is intermittent under fixed source, and **no bisect is failure is intermittent under fixed source, and **no bisect is
justified at all** — that outcome sends the lane back to D1/D2. 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`, - **D0b — re-run the §4 matrix with captured provenance**, at `main`,
recording the artifact hashes actually executed **at run time**. recording the artifact hashes actually executed **at run time**.
Revision 2's strongest claim collapsed because command shape silently Revision 2's strongest claim collapsed because command shape silently

View File

@ -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` `CARGO_TARGET_DIR=/home/jeans/build/pmacs-gate-targets/pmacs-mapping-gen-8cb089c8`
except `WT=main`, which uses `…/pmacs-fdccc423`. 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** | | 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 | reduction | green, 15 passed | **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 | workspace | green | `e09a96512035284e` 33113 | | 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 | reduction | green, 2145 + 15 | `89050c702de22d57` 158812 | | 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 | reduction | green | `31b3e5249b475479` 3706 | | 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 | reduction | green, 11+15+15 | `332693a39c73731a` 4569 | | 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 | | 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 | | 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 | | 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 | | 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** — - **first, reproduce the two candidate endpoints CLEANLY** —
`7599661` (last observed green) and `724b785` (first observed red) — `7599661` (last observed green) and `724b785` (first observed red) —
each checked out clean, each in its **own isolated target each checked out clean, each in its **own isolated target
directory**. A decision procedure with **no predicted outcome**: directory**. A decision procedure with **no predicted outcome**, and
endpoints differ → a regression lives in `7599661..724b785` and a **not decided by one run per endpoint** — see the N = 5 clean-split
bisect over that interval is justified; endpoints agree → the 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 difference is not captured by those two commits under current
conditions, and the question becomes what else changed across the conditions, and the question becomes what else changed across the
window. window.