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.