docs(framing): revision 6 --- the ancestry argument shows less than claimed

Three findings on revision 5, all upheld.

1. The ancestry argument overreached. 72da24a failing today while its
   descendant 7599661 passed on 08-15 shows exactly one thing: outcome
   is not determined by commit alone, since the observations come from
   different environments at different times. Revision 5 said a source
   cause was "positively discouraged", that the ancestry "says to
   expect" equal endpoints, and that the change was environmental.
   None follows. It cannot discriminate an environmental change, a
   source/environment interaction, or a fix before 7599661 with a
   regression before 724b785 --- and an ancestor OUTSIDE the interval
   is irrelevant to whether the interval regressed, since a bisect over
   7599661..724b785 needs only that the clean endpoints differ now.

   D0a is unchanged as an action but is now stated as a decision
   procedure with NO predicted outcome: endpoints differ -> bisect that
   interval; endpoints agree -> ask what else changed across the window.

2. The byte-identity withdrawal was incomplete in both ledgers. This
   branch's said the artifacts "are byte-different" and then withdrew
   it two lines later, still said R9 ran "different binaries", and
   still promised an "artifact family". The held ledger still said
   "byte-different" and still called the window a bisect target with
   revision 4's onset conclusion. Both now say "different Cargo
   suffixes/compilations" throughout; historical byte identity is
   UNKNOWN and is never claimed.

3. Provenance slips: R9's observation-table row listed only -6b4b8223
   although it executed both -91f51d0b and -6b4b8223; R10's suffixes
   are at log lines 3 and 24, not 3 and 4; R9's are at 3066 and 3087,
   not 3066 alone. All corrected against the logs.

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-18 17:33:23 +02:00
parent 55053c601a
commit e2084fbba5
No known key found for this signature in database
3 changed files with 75 additions and 41 deletions

View File

@ -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 5 at `docs/gpu-probe-sigint-framing.md`;
- **No PR. Framing revision 6 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
@ -300,13 +300,13 @@ from #171 and #215.
R1–R10 is green.** Each run is enumerated with exact command, worktree, HEAD,
cleanliness and log digest in `docs/probe-sigint-evidence.md` — "0/N"
is not a record.
- **But R9 did NOT run the same binaries as the sweep.** It executed
`…-91f51d0b…` / `…-6b4b8223…`; the sweeps executed `…-5d9105cb…` /
`…-d4dae4f0…`, and those artifacts are byte-different. Command shape
changes Cargo's fingerprint. R9 establishes **same target names and
order**, not same compilations — and "byte-different" is withdrawn,
since the bytes a historical run executed are unknowable now; only
the differing Cargo suffixes are. What the evidence is **consistent
- **But R9 did NOT run the same compilations as the sweep.** It
executed `…-91f51d0b…` / `…-6b4b8223…`; the sweeps executed
`…-5d9105cb…` / `…-d4dae4f0…`. **Differing Cargo suffixes mean
differing metadata hashes — different compilations.** Historical byte
identity is **UNKNOWN** and is never claimed: target dirs have been
overwritten, so a hash computed today is the current occupant's. R9
establishes **same target names and order**, not same compilations. What the evidence is **consistent
with**, not what it isolates: prior targets alone (R9) green,
workspace selection alone (R10) green, both together (F1–F7) red.
That is an observation, not a finding. `--workspace` selection
@ -318,8 +318,8 @@ from #171 and #215.
available 27G→45G, still red); leaked daemons; inotify.
- **NOT ruled out, contrary to earlier entries here:** `--workspace`
artifact selection, and the preceding tests. R9 appeared to clear
them but ran **different binaries**, so the comparison was never
made. Both are open.
them but ran **different Cargo compilations**, so the comparison was
never made. Both are open.
- **Ground truth, and what it does NOT establish.** Neither binary
contains signal-handling code: `run_gpu` (`src/main.rs:324`) blocks
in `command.status()` with no handler, and grepping all of
@ -360,8 +360,8 @@ from #171 and #215.
default disposition" contradicted its own hypothesis and is
withdrawn; the assertion no longer appears above it either.
- **Run provenance is a pushed document**, `docs/probe-sigint-evidence.md`:
exact command, worktree, HEAD, cleanliness, artifact family, result
and log digest per physical run. Three caveats stated there rather
exact command, worktree, HEAD, cleanliness, the Cargo suffixes
executed, result and log digest per physical run. Three caveats stated there rather
than smoothed over — **R1 and R2 have no preserved log** (revision 2
double-counted one log as both R2 and R6), **cleanliness is UNKNOWN**
for every pre-manifest run, and **R1–R10 ran in the
@ -382,8 +382,13 @@ from #171 and #215.
08:45:41, after that run ended 08:42:01). **Cleanliness captured for
neither.** And `72da24a` is an **ancestor** of `7599661` yet fails
today while `7599661` passed — no source-monotonic cause does that.
So D0a reproduces clean endpoints first; a Git bisect is justified
only if they differ.
The ancestry shows only that **outcome is not determined by commit
alone**; it does NOT discriminate an environmental change, a
source/environment interaction, or a fix before `7599661` with a
regression before `724b785`, and an ancestor outside the interval is
irrelevant to whether the interval regressed. D0a is a **decision
procedure with no predicted outcome**: endpoints differ → bisect
`7599661..724b785`; endpoints agree → ask what else changed.
- **Red full-sweep count is SEVEN, not five** (F1–F7 in the manifest),
each with its own log digest; revision 3 said 5/5 while the framing
separately cited a gate run the manifest never listed.

View File

@ -1,6 +1,6 @@
# GPU launcher / probe SIGINT teardown — framing
Revision 5. Status: **awaiting approval. No implementation.**
Revision 6. 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.**
- r5 → r6: the ancestry argument overreached (§4a) — it shows outcome
is not determined by commit alone, and nothing more; residual
byte-identity and "artifact family" wording in both ledgers (§11);
and three provenance slips (§4, manifest).
- r4 → r5: the section summaries still carried revision-3 counts and
groupings (§4); the onset count was 13/1/3, not 14 (§4a); "byte-
different" overstated what is knowable about historical artifacts
@ -149,8 +153,8 @@ different Cargo compilations:
| prior targets execute | compilation set | result |
|---|---|---|
| yes | `-6b4b8223` (subset selection) | R9 green |
| no | `-5d9105cb` + `-d4dae4f0` (workspace selection) | R10 green |
| yes | `-91f51d0b` + `-6b4b8223` (subset selection; `prefix.log:3066`, `:3087`) | R9 green |
| no | `-5d9105cb` + `-d4dae4f0` (workspace selection; `wsonly.log:3`, `:24`) | R10 green |
| yes | workspace selection | **F1–F7 red (7)** |
Neither factor alone reproduced it **in these runs**. That is the
@ -203,14 +207,32 @@ after that run ended at 08:42:01. **Cleanliness was captured for
neither**, and the tree was under active edit throughout. So the window
dates a **machine/worktree-state transition**, not two clean revisions.
The evidence in fact argues *against* a source cause: `72da24a` is an
**ancestor** of `7599661` (verified by `git merge-base --is-ancestor`),
yet `72da24a` fails today while `7599661` passed on 08-15. No
source-monotonic cause produces that. Unless clean endpoints say
otherwise, whatever changed is environmental, cached, or uncommitted.
One further relationship is worth stating **only for what it shows**:
`72da24a` is an **ancestor** of `7599661` (verified by
`git merge-base --is-ancestor`), yet `72da24a` fails today while
`7599661` passed on 08-15. That establishes exactly one thing —
**outcome is not determined by commit alone** — because the two
observations are from different environments at different times.
**This still supersedes the reduction matrix as the lane's first move**
— but as endpoint reproduction, not as a bisect.
**Revision 5 drew more from it than it carries, and that is
withdrawn.** It said a source cause was "positively discouraged", that
the ancestry "says to expect" equal endpoints, and that "whatever
changed is environmental, cached, or uncommitted". None of that
follows. The observation cannot distinguish:
- an environmental change;
- a source/environment interaction; or
- a source fix landing before `7599661` and a regression landing before
`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*.
**This still supersedes the reduction matrix as the lane's first
move**, as endpoint reproduction — which is a decision procedure, not a
prediction.
## 5. Two retracted claims, both mine, kept as warnings
@ -268,11 +290,13 @@ group.
- **D0a — reproduce the onset endpoints CLEANLY** (§4a): `7599661`
(last observed green) and `724b785` (first observed red), each
checked out clean, each in its own isolated target directory. **Only
if they differ is a Git bisect justified.** If they agree, the
changed state is environmental, cached or uncommitted — which the
ancestry argument says to expect — and bisecting source would burn
runs proving nothing.
checked out clean, each in its own isolated target directory. This is
a **decision procedure with no predicted outcome**:
- **endpoints differ** → a regression lives in `7599661..724b785`
and a Git bisect over that interval is justified;
- **endpoints agree** → the difference is not captured by those two
commits under current conditions, and the next question is what
else changed across the window.
- **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

View File

@ -82,8 +82,8 @@ except `WT=main`, which uses `…/pmacs-fdccc423`.
| 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 |
| 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` / `-6b4b8223` per log | 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`) | 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`, `:4`) | green | `81b48fd7a0e261dc` 3553 |
| 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 |
| F2 | `test --workspace --features crdt --no-fail-fast -- --skip basedpyright` | mg | ~`b72843a` | UNKNOWN | `-5d9105cb` / `-d4dae4f0`; bytes UNKNOWN | **red** | `474f88f0dad581fe` 338555 |
| F3 | same argv as F2, with a resource sampler running | mg | ~`b72843a` | UNKNOWN | as F2; bytes UNKNOWN | **red** | `7b8519e7300e8bb3` 338555 |
@ -141,12 +141,15 @@ was captured for **neither**, and the tree was being edited throughout.
So the window dates a **machine/worktree-state transition**, not two
clean source revisions.
**A source bisect is in fact positively discouraged by the evidence.**
`72da24a` is an **ancestor** of `7599661` — verified with
`git merge-base --is-ancestor` — yet `72da24a` fails today (F1) while
`7599661` passed on 08-15. A source-monotonic cause cannot produce
that. Whatever changed is environmental, cached, or uncommitted unless
proven otherwise.
One relationship is worth recording **for exactly what it shows**:
`72da24a` is an **ancestor** of `7599661` (`git merge-base
--is-ancestor`), yet fails today (F1) while `7599661` passed on 08-15.
That shows **outcome is not determined by commit alone** — the two
observations come from different environments at different times — and
nothing further. It does **not** discriminate an environmental change,
a source/environment interaction, or a fix before `7599661` followed by
a regression before `724b785`. An ancestor outside the interval is
irrelevant to whether the interval contains a regression.
## D0 — re-run the matrix with captured provenance
@ -165,7 +168,9 @@ 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**. Only if those endpoints differ is a Git bisect
justified. If they do not differ, the changed state is environmental,
cached or uncommitted, and bisecting source would burn runs proving
nothing. The ancestry argument above says to expect the latter.
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
difference is not captured by those two commits under current
conditions, and the question becomes what else changed across the
window.