From 55053c601a8113b54a8d45558e0fa9943f70abe9 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Tue, 18 Aug 2026 16:06:46 +0200 Subject: [PATCH] docs(framing): revision 5 --- the onset is not a source boundary Four findings on revision 4, all upheld. The third changes what the lane should do next. 1. Section summaries still carried revision-3 language while the manifest carried revision 4's. Framing and ledger now agree: seven red runs (F1-F7), not five; the observation table is keyed on compilation set rather than an invented "workspace artifact family"; and it is labelled an observation, not an isolated interaction. 2. The onset count was wrong. Per test copy across the 17 sweep-crdt logs: 13 with both copies ok, 1 where NEITHER executed because the stage died compiling pmacs (error[E0308]), and 3 with both failed. Revision 4's "14 runs, 11 green, 3 red on other tests" mis-stated both the count and the kind --- one of those runs never reached the test. The two genuinely red-on-other-tests sweeps did execute ctrl_c, and it passed. 3. D0a cannot be a source bisect, and the evidence argues against one. Reflog and commit times put HEAD at 7599661 during the last green (3c06176 landed 40s after it finished) and at 724b785 during the first red (5174f73 landed 08:45:41, after that run ended 08:42:01; the manifest had recorded F6 at 5174f73, which was wrong). Cleanliness was captured at neither endpoint. And 72da24a is an ANCESTOR of the passing 7599661 yet fails today --- no source-monotonic cause produces that. D0a now reproduces the two endpoints CLEAN, in isolated target directories, and a bisect is justified only if they differ. 4. Manifest completed: R9 carries full argv rather than a recipe; R7 lists only gpu_invocation-6b4b8223, since R7 does not select gpu_initial_target; R10 lists both -5d9105cb and -d4dae4f0. Also withdraws "byte-different" everywhere. The bytes a historical run executed are not knowable --- target dirs have been overwritten, and a hash computed today is the current occupant's. Three levels are now kept apart in the manifest: suffix (known), today's bytes at a path (known), and the bytes a past run executed (UNKNOWN). Differing suffixes mean differing Cargo metadata hashes, which is enough to void the comparison and is all that is claimed. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai --- docs/active-work.md | 40 +++++++----- docs/gpu-probe-sigint-framing.md | 93 +++++++++++++++++----------- docs/probe-sigint-evidence.md | 102 ++++++++++++++++++++----------- 3 files changed, 151 insertions(+), 84 deletions(-) diff --git a/docs/active-work.md b/docs/active-work.md index 47926f0..2b64f9f 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 4 at `docs/gpu-probe-sigint-framing.md`; +- **No PR. Framing revision 5 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 @@ -296,17 +296,20 @@ from #171 and #215. - **`panel-mapping-generation` (§5b) is HELD BEHIND THIS LANE** by explicit instruction. That lane is code-complete at `5174f73` with its own fifteen stages green; its sixteenth stage is this defect. -- **Reproduction is 5/5 in the full sweep; every reduction R1–R10 is - green.** Each run is enumerated with exact command, worktree, HEAD, +- **Reproduction is 7/7 across full sweeps (F1–F7); every reduction + 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 binaries. What the evidence supports is an - **interaction**: prior targets alone (R9) green, workspace artifacts - alone (R10) green, both together (F1–F5) red. `--workspace` selection + 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 + 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 is **not sufficient by itself and not ruled out** — later-selected packages can affect the build graph before their tests ever run, so "their targets execute after the failure" does not exonerate them. @@ -367,17 +370,26 @@ from #171 and #215. `/home/jeans/build/pmacs-gate-targets/probe-sigint-evidence/`; `/tmp` is a tmpfs and they were nearly lost to a cleanup mid-lane. - **THE ONSET IS DATABLE, and it reframes the lane.** `sweep-crdt` - appears **17 times** in this target dir's gate logs; `ctrl_c` fails - in exactly the **last three** and passed — both copies — before them. - Last green `20260815T185708Z`, first red `20260816T063330Z`, no - reboot between. The three earlier red sweeps failed on unrelated - rows. So "pre-existing on `main`" holds (F1 at `72da24a` reproduces - it) but **"always broken" is contradicted**. + has **17** logs here. Counted per test copy: **13** with both copies + `... ok`, **1** where neither executed (stage died compiling `pmacs`, + `error[E0308]`, `…-708693`), **3** with both `FAILED`. Last observed + green `20260815T185708Z`, first observed red `20260816T063330Z`; boot + began 08-14 09:30, so no reboot between. "Pre-existing on `main`" + holds (F1 at `72da24a`) but **"always broken" is contradicted**. +- **The onset is NOT a source boundary.** Reflog/commit times put HEAD + at `7599661` during the last green (`3c06176` landed 40s after it + finished) and `724b785` during the first red (`5174f73` landed + 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. - **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. -- **D0 precedes every other diagnostic**, in two parts: **(a) bisect - the onset window** — the sharpest lead the lane has; **(b)** re-run +- **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 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 9379fbb..ead3aa6 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 4. Status: **awaiting approval. No implementation.** +Revision 5. 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.** +- 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 + (§4, manifest); and **the onset is not a source boundary** (§4a). ## 1. The problem, stated as what is observed @@ -125,29 +129,29 @@ cleanliness and artifact family per run: `docs/probe-sigint-evidence.md`. | R8 | `--test`×18 (targets 20–37) + the suite | 1 | green | `half2.log` | | R9 | `--lib --bins` + `--test`×32 (targets 6–37) + the suite | 1 | green (**reduction artifacts**) | `prefix.log` | | R10 | `--workspace ... --test gpu_initial_target_acceptance --test gpu_invocation_acceptance` | 1 | green (**workspace artifacts**) | `wsonly.log` | -| F1–F5 | full `--workspace --no-fail-fast -- --skip basedpyright` | 5 | **red, 5/5** | `base-sweep.log` (at `72da24a`), `postclean.log`, `sweep-inst.log`, `sweep-diag.log`, gate `…-2144707` | +| F1–F7 | full `--workspace --no-fail-fast -- --skip basedpyright`, plus three gate `sweep-crdt` stages | **7** | **red, 7/7** | `base-sweep.log` (at `72da24a`), `postclean.log`, `sweep-inst.log`, `sweep-diag.log`, gates `…-1977433`, `…-2144707`, `…-2375685` | -**Correction to revision 2: R9 did not run the same binaries.** It -executed `gpu_initial_target_acceptance-91f51d0b5303ff9f` and -`gpu_invocation_acceptance-6b4b8223dea45247`; the failing sweeps -executed `-5d9105cb7047aab8` and `-d4dae4f01bcdef62`. Those artifacts -are **byte-different** (sha256/16 `36912fa2…` vs `1b3cc86c…`, and -`858d7148…` vs `ede0c07d…`; see `docs/probe-sigint-evidence.md`). -Cargo's target selection changes the fingerprint, so command shape -changes the executable. R9 therefore establishes **same target names -and order**, not same binaries. +**Correction to revision 2: R9 did not run the same compilations.** It +executed `gpu_invocation_acceptance-6b4b8223dea45247`; the failing +sweeps executed `-d4dae4f01bcdef62`. **Differing Cargo suffixes mean +Cargo computed different metadata hashes — different compilations.** +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. What the evidence is **consistent with** is an interaction. It does not -isolate one, because the three rows differ in more than the two columns -shown — different source heads, different worktrees, unknown -cleanliness, and, as above, different bytes behind identical Cargo -suffixes: +isolate one, because the rows differ in more than the two columns shown +— different source heads, different worktrees, unknown cleanliness, and +different Cargo compilations: -| prior targets execute | workspace artifact family | result | +| prior targets execute | compilation set | result | |---|---|---| -| yes | no | R9 green | -| no | yes | R10 green | -| yes | yes | **F1–F5 red** | +| yes | `-6b4b8223` (subset selection) | R9 green | +| no | `-5d9105cb` + `-d4dae4f0` (workspace selection) | R10 green | +| yes | workspace selection | **F1–F7 red (7)** | Neither factor alone reproduced it **in these runs**. That is the whole of the claim. `--workspace` artifact selection is **not @@ -171,16 +175,19 @@ per sweep, green runs already at 46–60); inotify (47 of 1024). `ctrl_c` fails in **exactly the last three**, and passed — both copies, `... ok` — in the runs before them. -| window | runs | `ctrl_c` | -|---|---|---| -| 08-14 → 08-15 19:57 | 14 (11 green; 3 red on *other* tests) | **passes** wherever the stage ran | -| 08-16 06:33 `…-1977433` | red, 2 bins | **fails, both copies** | -| 08-16 06:45 `…-2144707` | red, 2 bins | **fails, both copies** | -| 08-17 17:25 `…-2375685` | red, 3 bins | **fails, both copies** | +Counted **per test copy** across the 17 `sweep-crdt` logs: -The three earlier red sweeps failed on unrelated rows — protocol and -version tests, and `composition_overhead_under_ten_percent`. None -involved `ctrl_c`. +| outcome | runs | +|---|---| +| both copies `... ok` | **13** | +| **neither copy executed** — stage died compiling `pmacs` (`error[E0308]`), `…-708693` | **1** | +| both copies `FAILED` | **3** (`…-1977433`, `…-2144707`, `…-2375685`) | + +Revision 4 said "14 runs, 11 green, 3 red on other tests" and that the +earlier reds failed on unrelated tests. **Both wrong.** The count is +13 / 1 / 3, and one earlier non-passing run is a **compile failure that +never reached either copy**. The two genuinely red-on-other-tests +sweeps did execute `ctrl_c`, and it passed. **So the failure is not long-standing.** "Pre-existing on `main`" remains true — F1 at `72da24a` reproduces it — but "always broken" was @@ -188,10 +195,22 @@ never established and is now contradicted. Last green containing it: `20260815T185708Z`. First red: `20260816T063330Z`. The machine was not rebooted across that boundary. -**This supersedes the reduction matrix as the lane's first move.** A -test that passed in this stage fourteen times and then failed three -times running has a change behind it, and identifying that change is -worth more than further reduction — which, per §4, has isolated nothing. +**But the onset is NOT a source boundary, and a Git bisect is not yet +justified.** Reflog and commit times put HEAD at `7599661` during the +last green — `3c06176` was committed 40 s after that run finished — and +at `724b785` during the first red, since `5174f73` landed at 08:45:41, +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. + +**This still supersedes the reduction matrix as the lane's first move** +— but as endpoint reproduction, not as a bisect. ## 5. Two retracted claims, both mine, kept as warnings @@ -247,9 +266,13 @@ diagnostic only, and it must **discriminate** the three live candidates: blocked delivery, inherited ignore, and an escaped or wrong process group. -- **D0a — bisect the onset window** (§4a): `20260815T185708Z` green → - `20260816T063330Z` red, no reboot between. This is the sharpest lead - the lane has and comes before any further reduction. +- **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. - **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 0d53af4..f4b2e80 100644 --- a/docs/probe-sigint-evidence.md +++ b/docs/probe-sigint-evidence.md @@ -44,12 +44,25 @@ sweeps — yet the bytes at those paths differ by worktree: | `pmacs-fdccc423` (main) | `e057803988c34cf7` | `00f06aeb089ce38d` | | `pmacs-mapping-gen-…` (§5b) | `1b3cc86cbb8d6092` | `ede0c07dd9abb456` | -Same suffix, different source head, different bytes. So **"workspace -artifact family" was not an identity class** and is withdrawn as a -grouping. Each run below records the suffix its log shows, and byte -identity as `UNKNOWN` unless contemporaneously captured — which, for -every pre-manifest run, it was not. R1 and R2 have no preserved log at -all and so cannot claim even a suffix. +Same suffix, different source head, different bytes **today**. So +**"workspace artifact family" was not an identity class** and is +withdrawn as a grouping. + +Three levels of knowledge, kept apart: + +1. **Suffix — known**, from each log. A differing suffix means Cargo + computed a different metadata hash, i.e. it treated the two as + distinct compilations. +2. **Today's bytes at a path — known**, and shown above. +3. **The bytes a historical run executed — UNKNOWN.** Target + directories have been overwritten repeatedly since; a hash computed + now is the hash of the current occupant. + +So statements of the form "R9 and the sweeps ran byte-different +binaries" are **withdrawn everywhere**. What is established is that +they ran **different Cargo compilations** (different suffixes), which +is enough to void the comparison and is all that is claimed. R1 and R2 +have no preserved log and cannot claim even a suffix. ## Runs @@ -67,17 +80,17 @@ except `WT=main`, which uses `…/pmacs-fdccc423`. | 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 | -| 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 | `-91f51d0b` / `-6b4b8223`; bytes UNKNOWN | 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 | suffixes per log; bytes UNKNOWN | green | `8b26ebfcf5f871b4` 28677 | -| R9 | R7's argv with R8's eighteen `--test` names spliced in before `--test gpu_invocation_acceptance` — i.e. `test --features crdt --no-fail-fast --lib --bins` then `--test` for each of targets 6–37 in sweep order, then `--test gpu_invocation_acceptance`. Full list = R7's ∪ R8's, deduplicated, order preserved. | mg | ~`b72843a` | UNKNOWN | **`-91f51d0b` / `-6b4b8223`** (log `:3066`); bytes UNKNOWN | 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`** (log `:3`); bytes UNKNOWN | 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`; bytes at those paths **today** `e0578039…` / `00f06aeb…`, i.e. NOT the panel worktree's | **red** | `10b55b8ba8741125` 334446 | +| 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 | +| 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 | | F4 | same argv as F2, with a process-table sampler running | mg | ~`b72843a` | UNKNOWN | as F2; bytes UNKNOWN | **red** | `5ccdefc5d89eece3` 338555 | | F5 | stage 15 of `./scripts/gate --protocol --acceptance bottom_panel_stage1_acceptance --acceptance bottom_panel_stage2a_acceptance --acceptance bottom_panel_stage2b_daemon_acceptance --acceptance bottom_panel_stage2b_gpu_acceptance --acceptance bottom_panel_stage2b_protocol_acceptance --acceptance gui_stage1a_wire_acceptance` | mg | `5174f73` + uncommitted docs | UNKNOWN | suffixes per log; bytes UNKNOWN | **red** (3 bins: both ctrl_c copies + `m6_1_pty_mode_lifecycle`) | `20260817T172537Z-2375685/15-sweep-crdt.log`, sha `e5bdc911e366` | -| F6 | stage 9 of `./scripts/gate --protocol` | mg | `5174f73` | UNKNOWN | suffixes per log; bytes UNKNOWN | **red** (2 bins, both ctrl_c copies) | `20260816T063330Z-1977433/09-sweep-crdt.log`, sha `7a75d999ac4f` | -| F7 | stage 9 of `./scripts/gate --protocol` | mg | `5174f73` | UNKNOWN | suffixes per log; bytes UNKNOWN | **red** (2 bins, both ctrl_c copies) | `20260816T064549Z-2144707/09-sweep-crdt.log`, sha `9d3c6ad1bfc9` | +| F6 | stage 9 of `./scripts/gate --protocol` | mg | **`724b785`** (see below) | UNKNOWN | suffixes per log | **red** (2 bins, both ctrl_c copies) | `20260816T063330Z-1977433/09-sweep-crdt.log`, sha `7a75d999ac4f` | +| F7 | stage 9 of `./scripts/gate --protocol` | mg | `5174f73` (committed 08:45:41, run began 08:45:49) | UNKNOWN | suffixes per log | **red** (2 bins, both ctrl_c copies) | `20260816T064549Z-2144707/09-sweep-crdt.log`, sha `9d3c6ad1bfc9` | Supporting, not a reduction: `9b8a01076b44bb7c` 98838 (`proc-sample.log`) is the process-table sampler output behind the @@ -97,27 +110,43 @@ than backfilled. ## The onset is datable — and this supersedes the reduction matrix -`sweep-crdt` has run 17 times in this target directory's gate logs. The -`ctrl_c` failure appears in **exactly the last three**, and the test -**passed inside `sweep-crdt`** — both copies, `... ok` — in the runs -before them. +`sweep-crdt` has 17 log files in this target directory. Counted **per +test copy**, not per stage: -| date | gate run | sweep-crdt | ctrl_c | -|---|---|---|---| -| 08-14 → 08-15 19:57 | 14 runs | 11 green; 3 red on *other* tests | **passes** where the stage ran it | -| 08-16 06:33 | `…-1977433` | red, 2 bins | **fails, both copies** | -| 08-16 06:45 | `…-2144707` | red, 2 bins | **fails, both copies** | -| 08-17 17:25 | `…-2375685` | red, 3 bins | **fails, both copies** | +| outcome | runs | +|---|---| +| both copies `... ok` | **13** | +| **neither copy executed** — the stage died compiling `pmacs` (`error[E0308]: mismatched types`), log `20260815T182846Z-708693` | **1** | +| both copies `FAILED` | **3** (`…-1977433`, `…-2144707`, `…-2375685`) | -The three earlier red sweeps failed on unrelated tests — protocol and -version rows on 08-15 09:55, and `composition_overhead_under_ten_percent` -plus a v21/v20 row on 08-15 18:37. **None involved `ctrl_c`.** +Revision 4 said "14 runs, 11 green, 3 red on other tests" and that the +earlier reds "failed on unrelated tests". **Both were wrong**: the +count is 13 / 1 / 3, and one of the earlier non-passing runs is a +**compile failure that never reached either copy**, not a red on +another test. Of the genuinely red-on-other-tests sweeps, `…-2839374` +(08-15 09:55) failed protocol and version rows and `…-830195` +(08-15 18:37) failed `composition_overhead_under_ten_percent` and a +v21/v20 row — those two did execute `ctrl_c`, and it passed. -So the failure is **not long-standing**. Last green containing it: -`20260815T185708Z`. First red: `20260816T063330Z`. Something changed in -that window, on a machine that was not rebooted (uptime spans it). -**Bisecting that boundary is a sharper lead than any reduction**, and -D0 is amended to do it first. +So the failure is **not long-standing**. Last observed green: +`20260815T185708Z`. First observed red: `20260816T063330Z`. The machine +was not rebooted across it — the current boot began 08-14 09:30. + +**But this is not yet a source boundary.** Reflog and commit times put +HEAD at `7599661` during the last green (`3c06176` was committed 40 s +*after* that run finished) and at `724b785` during the first red +(`5174f73` was committed 08:45:41, after that run ended at 08:42:01 — +revision 4's manifest wrongly recorded F6 at `5174f73`). Cleanliness +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. ## D0 — re-run the matrix with captured provenance @@ -133,7 +162,10 @@ log digest. Two constraints learned the hard way: changes it — the reason R9's result did not mean what it appeared to mean — and since a hash computed later reflects only what occupies that path now; -- **first, bisect the 08-15 19:57 → 08-16 06:33 onset window.** A test - that passed in this stage fourteen times and then failed three times - in a row has a change behind it, and finding that change is worth - more than any further reduction. +- **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.