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) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
This commit is contained in:
Levi Neuwirth 2026-08-18 16:06:46 +02:00
parent 9332d5a616
commit 55053c601a
No known key found for this signature in database
3 changed files with 151 additions and 84 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 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

View File

@ -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

View File

@ -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.