docs(framing): revision 4 --- and the failure has a datable onset

Four findings on revision 3, all upheld. Answering finding 1 turned up
something that reframes the lane.

THE ONSET. sweep-crdt appears SEVENTEEN times in this target directory's
gate logs. The ctrl_c failure appears in exactly the LAST THREE, and the
test passed --- both copies, "... ok" --- inside the stage 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" was never established and is now contradicted. D0 gains a first
part: bisect that window. A test that passed fourteen times in this
stage and then failed three times running has a change behind it, and
that is worth more than further reduction --- which has isolated
nothing.

1. Both ledgers still carried the falsified R9 conclusions. This branch
   listed --workspace unification and preceding tests as ruled out
   while the section above described an interaction; said "five call
   sites" immediately before correcting to six; and labelled the
   framing revision 2. The held branch was worse: --workspace refuted,
   R9 "same binaries", later packages not implicable, cause cumulative
   across 37 binaries. All corrected and pushed (5b9abd8). §11 no
   longer asserts the held lane is clean; it records a re-verified
   checklist, since asserting that prematurely is what went wrong.

2. Manifest now carries complete argv for R7-R9 and F5 --- abbreviations
   are not reconstructable invocations. F5 is disambiguated: the
   framing cited gate ...-2144707 while the manifest cited ...-2375685,
   two distinct real runs. Enumerating them gives F1-F7: the red count
   is SEVEN, not five, each with its own log digest. F5 also carries an
   extra failing binary the others do not.

3. "Workspace artifact family" conflated Cargo suffix with byte
   identity and is withdrawn as a grouping. Demonstrated: F1 in the
   main worktree executed the same suffixes -5d9105cb and -d4dae4f0,
   but the bytes there are e0578039/00f06aeb versus the panel
   worktree's 1b3cc86c/ede0c07d. Each run now records the suffix its
   log shows and byte identity as UNKNOWN, since target dirs have been
   overwritten and a hash computed today is not the hash that ran.

4. The interaction table is demoted to a description of what was
   observed. Revision 3 disclaimed its inputs and then asserted a
   finding from them, which cannot both hold. A3 no longer speaks of an
   established "R9 paradox" --- there is none to explain, because the
   comparison was never made; it requires D0 to recreate it first.

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 15:50:53 +02:00
parent 4e1ca68b4c
commit 9332d5a616
No known key found for this signature in database
3 changed files with 178 additions and 60 deletions

View File

@ -279,10 +279,11 @@ from #171 and #215.
**`72da24a`**, worktree **`72da24a`**, worktree
`/home/jeans/Repos/personal/pmacs-probe-sigint`. Recover with `/home/jeans/Repos/personal/pmacs-probe-sigint`. Recover with
`git fetch githubsucks && git checkout gpu-probe-sigint-teardown`. `git fetch githubsucks && git checkout gpu-probe-sigint-teardown`.
- **No PR. Framing revision 2 at `docs/gpu-probe-sigint-framing.md`; - **No PR. Framing revision 4 at `docs/gpu-probe-sigint-framing.md`;
NO IMPLEMENTATION and no fix proposed** — the mechanism is not known NO IMPLEMENTATION and no fix proposed** — the mechanism is not known
yet, and the framing says so rather than guessing. Revision 1 was yet, and the framing says so rather than guessing. Revisions 1, 2 and
rejected on five findings, all upheld. 3 were each rejected on findings, all upheld; run provenance lives in
`docs/probe-sigint-evidence.md`.
- **Why it exists.** `ctrl_c_on_launcher_group_does_not_reach_spawned_daemon` - **Why it exists.** `ctrl_c_on_launcher_group_does_not_reach_spawned_daemon`
fails in gate stage `sweep-crdt` with "child did not exit within 5s". fails in gate stage `sweep-crdt` with "child did not exit within 5s".
**Pre-existing on `main`** — `72da24a` fails it in a clean worktree **Pre-existing on `main`** — `72da24a` fails it in a clean worktree
@ -311,8 +312,11 @@ from #171 and #215.
"their targets execute after the failure" does not exonerate them. "their targets execute after the failure" does not exonerate them.
- **Ruled out by measurement — do not re-run:** machine load; tmpfs - **Ruled out by measurement — do not re-run:** machine load; tmpfs
starving RAM (settled by experiment, not argument — `/tmp` 21G→1.2G, starving RAM (settled by experiment, not argument — `/tmp` 21G→1.2G,
available 27G→45G, still red); leaked daemons; inotify; available 27G→45G, still red); leaked daemons; inotify.
`--workspace` feature unification; any specific preceding test. - **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.
- **Ground truth, and what it does NOT establish.** Neither binary - **Ground truth, and what it does NOT establish.** Neither binary
contains signal-handling code: `run_gpu` (`src/main.rs:324`) blocks contains signal-handling code: `run_gpu` (`src/main.rs:324`) blocks
in `command.status()` with no handler, and grepping all of in `command.status()` with no handler, and grepping all of
@ -333,9 +337,9 @@ from #171 and #215.
about **5.1s** — inside what the sampler saw, and a ">6s" selector about **5.1s** — inside what the sampler saw, and a ">6s" selector
would have captured nothing, repeating the error it was meant to would have captured nothing, repeating the error it was meant to
correct. (a) is therefore not refuted by (b); it stays **unproven for correct. (a) is therefore not refuted by (b); it stays **unproven for
a different reason** — the suite spawns launchers from five call a different reason** — under `--features crdt` the suite spawns root
sites, so command line alone cannot attribute one to this test. launchers from **six** call sites, so command line alone cannot
Under `--features crdt` that is **six** sites (`:509, :534, :544, attribute one to this test. The six (`:509, :534, :544,
:574, :725, :1097`, all inside `#[cfg(feature = "crdt")] mod crdt`); :574, :725, :1097`, all inside `#[cfg(feature = "crdt")] mod crdt`);
the other two `--gpu` arguments sit under `#[cfg(not(…))]` and are the other two `--gpu` arguments sit under `#[cfg(not(…))]` and are
compiled out. **Do not key on process age. Key on the PID the test compiled out. **Do not key on process age. Key on the PID the test
@ -362,10 +366,22 @@ from #171 and #215.
machine-local under machine-local under
`/home/jeans/build/pmacs-gate-targets/probe-sigint-evidence/`; `/tmp` `/home/jeans/build/pmacs-gate-targets/probe-sigint-evidence/`; `/tmp`
is a tmpfs and they were nearly lost to a cleanup mid-lane. is a tmpfs and they were nearly lost to a cleanup mid-lane.
- **D0 precedes every other diagnostic:** re-run the matrix at `main` - **THE ONSET IS DATABLE, and it reframes the lane.** `sweep-crdt`
under a harness that captures provenance **and the artifact hashes appears **17 times** in this target dir's gate logs; `ctrl_c` fails
actually executed**, since command shape silently changed the binary in exactly the **last three** and passed — both copies — before them.
once already. 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**.
- **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
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
only what occupies that path now.
- **Coherence: journey step 12(a), "closing is clean", IS touched** — - **Coherence: journey step 12(a), "closing is clean", IS touched** —
Ctrl-C teardown of a GPU session is that step, grade movement or not. Ctrl-C teardown of a GPU session is that step, grade movement or not.
Revision 1 claimed no journey step, reasoning from grade movement, Revision 1 claimed no journey step, reasoning from grade movement,

View File

@ -1,6 +1,6 @@
# GPU launcher / probe SIGINT teardown — framing # GPU launcher / probe SIGINT teardown — framing
Revision 3. Status: **awaiting approval. No implementation.** Revision 4. Status: **awaiting approval. No implementation.**
Revisions 1 and 2 were each rejected on five findings. Every correction Revisions 1 and 2 were each rejected on five findings. Every correction
is recorded in place rather than quietly rewritten, because three of is recorded in place rather than quietly rewritten, because three of
@ -14,6 +14,12 @@ them were claims this document itself had advanced:
never blocks indefinitely" (§3); the launcher call-site count (§5); never blocks indefinitely" (§3); the launcher call-site count (§5);
reduction provenance, now in `docs/probe-sigint-evidence.md`; and reduction provenance, now in `docs/probe-sigint-evidence.md`; and
ledger corrections that had not been made portable (§11). ledger corrections that had not been made portable (§11).
- r3 → r4: the interaction table overstated (§4); the red count was 7,
not 5, and abbreviated argv were not argv (manifest); "workspace
artifact family" conflated Cargo suffix with byte identity
(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.**
## 1. The problem, stated as what is observed ## 1. The problem, stated as what is observed
@ -131,8 +137,11 @@ Cargo's target selection changes the fingerprint, so command shape
changes the executable. R9 therefore establishes **same target names changes the executable. R9 therefore establishes **same target names
and order**, not same binaries. and order**, not same binaries.
What the evidence actually supports is an **interaction**, and only What the evidence is **consistent with** is an interaction. It does not
that: 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:
| prior targets execute | workspace artifact family | result | | prior targets execute | workspace artifact family | result |
|---|---|---| |---|---|---|
@ -140,19 +149,50 @@ that:
| no | yes | R10 green | | no | yes | R10 green |
| yes | yes | **F1–F5 red** | | yes | yes | **F1–F5 red** |
Neither factor alone reproduces it. So `--workspace` artifact Neither factor alone reproduced it **in these runs**. That is the
selection is **not sufficient by itself** — and, importantly, **not whole of the claim. `--workspace` artifact selection is **not
ruled out either**, which is how revision 2 phrased it. Later-selected sufficient by itself and not ruled out**; later-selected packages can
packages can influence Cargo's build graph and fingerprints *before* influence Cargo's build graph and fingerprints *before* their test
their test executables ever run, so "their targets execute after the executables run, so "their targets execute after the failure at line
failure at line 3066" does not exonerate them. The same applies to the 3066" does not exonerate them — that claim is withdrawn. And since
claim that other packages "cannot be implicated": withdrawn. §4's own preamble says no historical row should be relied on until D0,
**this table is a description of what was observed, not a finding**.
Revision 3 asserted it as an interaction while simultaneously
disclaiming its inputs, which cannot both be true.
Also refuted, by measurement: machine load (red on a quiet box, load Also refuted, by measurement: machine load (red on a quiet box, load
2.77); tmpfs starving RAM (**tested by experiment** — `/tmp` 21 G → 2.77); tmpfs starving RAM (**tested by experiment** — `/tmp` 21 G →
1.2 G, available 27 G → 45 G, still red); leaked daemons (peak 58, +8 1.2 G, available 27 G → 45 G, still red); leaked daemons (peak 58, +8
per sweep, green runs already at 46–60); inotify (47 of 1024). per sweep, green runs already at 46–60); inotify (47 of 1024).
## 4a. The onset is datable — and it reframes the lane
`sweep-crdt` appears **17 times** in this target directory's gate logs.
`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** |
The three earlier red sweeps failed on unrelated rows — protocol and
version tests, and `composition_overhead_under_ten_percent`. None
involved `ctrl_c`.
**So the failure is not long-standing.** "Pre-existing on `main`"
remains true — F1 at `72da24a` reproduces it — but "always broken" was
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.
## 5. Two retracted claims, both mine, kept as warnings ## 5. Two retracted claims, both mine, kept as warnings
**Claim A — "mechanism located".** Reported the launcher blocked in **Claim A — "mechanism located".** Reported the launcher blocked in
@ -207,11 +247,14 @@ diagnostic only, and it must **discriminate** the three live candidates:
blocked delivery, inherited ignore, and an escaped or wrong process blocked delivery, inherited ignore, and an escaped or wrong process
group. group.
- **D0 — re-run the §4 matrix with captured provenance**, at `main`, - **D0a — bisect the onset window** (§4a): `20260815T185708Z` green →
recording the artifact hashes actually executed. Revision 2's `20260816T063330Z` red, no reboot between. This is the sharpest lead
strongest claim collapsed because command shape silently changed the the lane has and comes before any further reduction.
binary; no further reduction should be trusted until each row names - **D0b — re-run the §4 matrix with captured provenance**, at `main`,
the executable it ran. recording the artifact hashes actually executed **at run time**.
Revision 2's strongest claim collapsed because command shape silently
changed the binary; no further reduction should be trusted until each
row names the executable it ran.
- **D1 — key on the PID this test records.** The test already owns - **D1 — key on the PID this test records.** The test already owns
`launcher.id()`. Capture around its own `kill`, not by scanning for `launcher.id()`. Capture around its own `kill`, not by scanning for
age or command line. age or command line.
@ -246,10 +289,13 @@ Written now so the fix cannot quietly become "make the test pass".
unobtainable before this lane is approved, gated and merged, and unobtainable before this lane is approved, gated and merged, and
revision 1 stated an impossible precondition. Post-merge revision 1 stated an impossible precondition. Post-merge
confirmation on `main` is a follow-up, not a gate on the fix. confirmation on `main` is a follow-up, not a gate on the fix.
- **A3.** The R9 paradox is explained, or explicitly recorded as - **A3.** There is no established "R9 paradox" to explain — R9 ran
unexplained. A fix that greens the sweep without accounting for why different binaries, so the comparison it appeared to make was never
every subset passed leaves a gap, and the gap is stated rather than made. What A3 requires instead: **D0 recreates the subset/full
left for the next reader. comparison under captured provenance**, and whatever it then shows is
either explained by the fix or explicitly recorded as unexplained. A
fix that greens the sweep without that comparison having been made
properly leaves the gap stated, not hidden.
- **A4.** No deadline raised, no test skipped, retried, or serialised - **A4.** No deadline raised, no test skipped, retried, or serialised
to obtain green. to obtain green.
- **A5.** **Conditional on D4.** If bet 1 holds, this is unconditional: - **A5.** **Conditional on D4.** If bet 1 holds, this is unconditional:
@ -292,9 +338,13 @@ when revision 2 was reviewed, and both are closed by this revision:
processes "should both die at once" and then withdrew that same claim processes "should both die at once" and then withdrew that same claim
further down. The assertion is removed; only the withdrawal and its further down. The assertion is removed; only the withdrawal and its
reasoning remain. reasoning remain.
- **`panel-mapping-generation` @ `16cf3a2`** still carried "119 - **`panel-mapping-generation`** carried "119 binaries green, one
binaries green, one red", the ≥8 s arithmetic, the "default action" red", the ≥8 s arithmetic, the "default action" claim and the ">6 s
claim and the ">6 s selector". Pushing `16cf3a2` made the *retraction* selector"; `779a6bd` corrected those. **It still carried more**,
portable but not the *correction*. That ledger is corrected on its own found on re-review: `--workspace` unification "refuted", R9 running
branch and pushed, so the held lane no longer transports falsified the "same binaries", later packages that "cannot be implicated", and
claims. a cause "cumulative across the preceding 37 binaries". Revision 3's
claim here that the held lane no longer transports falsified claims
was **premature**; those are corrected now, and this section should
be read as a checklist that has been re-verified rather than an
assurance.

View File

@ -11,7 +11,10 @@ identified here by SHA-256 prefix and byte count.
These runs were made **before** this manifest existed, so their These runs were made **before** this manifest existed, so their
provenance is **reconstructed, not captured**. Specifically: provenance is **reconstructed, not captured**. Specifically:
- **Commands** are exact — they are the literal invocations issued. - **Commands** are exact and complete argv. Revision 3 abbreviated
R7–R9 as "`--test` ×N (targets 6–37)" and F5 as "`--acceptance` ×6",
which are descriptions, not reconstructable invocations. They are
written out in full below.
- **Worktree** is exact. - **Worktree** is exact.
- **HEAD** is given as a range where the run cannot be pinned to one - **HEAD** is given as a range where the run cannot be pinned to one
commit, and marked `~`. It is never guessed at single-commit commit, and marked `~`. It is never guessed at single-commit
@ -22,20 +25,31 @@ provenance is **reconstructed, not captured**. Specifically:
**D0 (below) exists because of this.** No conclusion in §4 should rest **D0 (below) exists because of this.** No conclusion in §4 should rest
on a `UNKNOWN`-cleanliness row once D0 has replaced it. on a `UNKNOWN`-cleanliness row once D0 has replaced it.
## The artifact-identity column, and why it exists ## Artifact identity — suffix is NOT byte identity
Reduction and sweep runs did **not** always execute the same compiled Two distinct things were conflated in revision 3 and are separated here.
test executables. Cargo's target selection changes the fingerprint, so
`--test a --test b` and `--workspace` can produce byte-different
binaries for the same source. Verified:
| family | `gpu_initial_target_acceptance` | `gpu_invocation_acceptance` | **Cargo suffix** is recorded in each log and is therefore *known* per
run. **Byte identity** is not: target directories have been overwritten
many times since, so a hash computed today is the hash of whatever
occupies that path now, not of what a given run executed.
That the two differ is demonstrated, not assumed. F1 ran in the `main`
worktree (`pmacs-fdccc423`) and executed suffixes `-5d9105cb7047aab8`
and `-d4dae4f01bcdef62` — **the same suffixes** as the panel-worktree
sweeps — yet the bytes at those paths differ by worktree:
| worktree | `gpu_initial_target…-5d9105cb` | `gpu_invocation…-d4dae4f0` |
|---|---|---| |---|---|---|
| reduction (R7–R9) | `-91f51d0b5303ff9f`, sha `36912fa25a72ffc7` | `-6b4b8223dea45247`, sha `858d71486d0b66f0` | | `pmacs-fdccc423` (main) | `e057803988c34cf7` | `00f06aeb089ce38d` |
| workspace (R10, F1–F5) | `-5d9105cb7047aab8`, sha `1b3cc86cbb8d6092` | `-d4dae4f01bcdef62`, sha `ede0c07dd9abb456` | | `pmacs-mapping-gen-…` (§5b) | `1b3cc86cbb8d6092` | `ede0c07dd9abb456` |
They are byte-different. Any claim of the form "the same binaries pass Same suffix, different source head, different bytes. So **"workspace
as a subset" is therefore **unsupported by these runs**. 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.
## Runs ## Runs
@ -53,25 +67,58 @@ 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 | | 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 | | 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 | | 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` ×14 (targets 6–19) + `--test gpu_invocation_acceptance` | mg | ~`b72843a` | UNKNOWN | reduction | green | `9e1ebc59ed9f0dd4` 187531 | | R7 | `test --features crdt --no-fail-fast --lib --bins --test acceptance --test ambient_isolation_acceptance --test auto_indent_acceptance --test auto_indent_crdt_acceptance --test auto_pair_acceptance --test auto_pair_crdt_acceptance --test autosave_acceptance --test bottom_panel_stage1_acceptance --test bottom_panel_stage2a_acceptance --test bottom_panel_stage2b_daemon_acceptance --test bottom_panel_stage2b_gpu_acceptance --test bottom_panel_stage2b_protocol_acceptance --test comment_toggle_acceptance --test compile_mode_acceptance --test gpu_invocation_acceptance` | mg | ~`b72843a` | UNKNOWN | `-91f51d0b` / `-6b4b8223`; bytes UNKNOWN | green | `9e1ebc59ed9f0dd4` 187531 |
| R8 | `test --features crdt --no-fail-fast --test` ×18 (targets 20–37) + `--test gpu_invocation_acceptance` | mg | ~`b72843a` | UNKNOWN | reduction | green | `8b26ebfcf5f871b4` 28677 | | R8 | `test --features crdt --no-fail-fast --test compile_mode_crdt_acceptance --test completion_popup_acceptance --test config_registry_acceptance --test cua_region_acceptance --test desktop_acceptance --test destination_capture_acceptance --test dired_acceptance --test discovery_acceptance --test discovery_stage2_acceptance --test editops_acceptance --test find_file_acceptance --test folding_acceptance --test folding_stage2_acceptance --test full_grid_resync_acceptance --test gate_script_acceptance --test git_status_stage1_acceptance --test gpu_font_acceptance --test gpu_initial_target_acceptance --test gpu_invocation_acceptance` | mg | ~`b72843a` | UNKNOWN | suffixes per log; bytes UNKNOWN | green | `8b26ebfcf5f871b4` 28677 |
| R9 | `test --features crdt --no-fail-fast --lib --bins` + `--test` ×32 (targets 6–37) + `--test gpu_invocation_acceptance` | mg | ~`b72843a` | UNKNOWN | **reduction** | green | `b31d98ee2f427eca` 214566 | | 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 | **workspace** | green | `81b48fd7a0e261dc` 3553 | | R10 | `test --workspace --features crdt --no-fail-fast --test gpu_initial_target_acceptance --test gpu_invocation_acceptance -- --skip basedpyright` | mg | ~`b72843a` | UNKNOWN | **`-5d9105cb`** (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) | workspace | **red** | `10b55b8ba8741125` 334446 | | F1 | `build --workspace --no-default-features --features luajit,crdt && test --workspace --features crdt --no-fail-fast -- --skip basedpyright` | **main** | `72da24a` | clean (verified `git status --porcelain` empty) | `-5d9105cb` / `-d4dae4f0`; bytes at those paths **today** `e0578039…` / `00f06aeb…`, i.e. NOT the panel worktree's | **red** | `10b55b8ba8741125` 334446 |
| F2 | `test --workspace --features crdt --no-fail-fast -- --skip basedpyright` | mg | ~`b72843a` | UNKNOWN | workspace | **red** | `474f88f0dad581fe` 338555 | | F2 | `test --workspace --features crdt --no-fail-fast -- --skip basedpyright` | mg | ~`b72843a` | UNKNOWN | `-5d9105cb` / `-d4dae4f0`; bytes UNKNOWN | **red** | `474f88f0dad581fe` 338555 |
| F3 | same as F2, with resource sampler | mg | ~`b72843a` | UNKNOWN | workspace | **red** | `7b8519e7300e8bb3` 338555 | | F3 | same argv as F2, with a resource sampler running | mg | ~`b72843a` | UNKNOWN | as F2; bytes UNKNOWN | **red** | `7b8519e7300e8bb3` 338555 |
| F4 | same as F2, with process sampler | mg | ~`b72843a` | UNKNOWN | workspace | **red** | `5ccdefc5d89eece3` 338555 | | F4 | same argv as F2, with a process-table sampler running | mg | ~`b72843a` | UNKNOWN | as F2; bytes UNKNOWN | **red** | `5ccdefc5d89eece3` 338555 |
| F5 | gate stage 15 of `./scripts/gate --protocol --acceptance ×6` | mg | `5174f73` + docs | UNKNOWN | workspace | **red** | gate log `20260817T172537Z-2375685/15-sweep-crdt.log` | | 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` |
Supporting, not a reduction: `9b8a01076b44bb7c` 98838 Supporting, not a reduction: `9b8a01076b44bb7c` 98838
(`proc-sample.log`) is the process-table sampler output behind the (`proc-sample.log`) is the process-table sampler output behind the
retracted "mechanism located" claim. retracted "mechanism located" claim.
**The red count is 7, not 5.** Revision 3 said "F1–F5, red 5/5" while
the framing separately cited gate `…-2144707`, a *different* physical
run the manifest never listed. Both exist, both are red, and there is a
third gate run too. F1–F7 above enumerate all seven, each with its own
log digest. F5 also has an extra failing binary
(`m6_1_pty_mode_lifecycle_started_then_exited`) that F6/F7 do not.
**R2 and R6 are distinct runs.** Revision 2's §4 cited `gpu3.log` for **R2 and R6 are distinct runs.** Revision 2's §4 cited `gpu3.log` for
both; that log is R6's three-suite run only, and R2's log was never both; that log is R6's three-suite run only, and R2's log was never
preserved. R1 likewise has no log. Both are marked accordingly rather preserved. R1 likewise has no log. Both are marked accordingly rather
than backfilled. 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.
| 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** |
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`.**
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.
## D0 — re-run the matrix with captured provenance ## D0 — re-run the matrix with captured provenance
Before any §4 row is relied on for a conclusion, re-run the reductions Before any §4 row is relied on for a conclusion, re-run the reductions
@ -82,6 +129,11 @@ log digest. Two constraints learned the hard way:
- run them **at `main`**, not on a feature branch — R1–R10 ran in the - run them **at `main`**, not on a feature branch — R1–R10 ran in the
`panel-mapping-generation` worktree, which carries §5b changes; `panel-mapping-generation` worktree, which carries §5b changes;
- record the **artifact hash per run**, since command shape changes it, - record the **artifact hash per run at run time**, since command shape
which is the whole reason R9's result did not mean what it appeared changes it — the reason R9's result did not mean what it appeared to
to mean. 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.