Commit Graph

14 Commits

Author SHA1 Message Date
Levi Neuwirth ab43132da5
docs(framing): revision 12 --- retract the survivors, select R-b + R-d
Two record defects plus the remedy decision.

1. Withdrawn claims were still asserted elsewhere. The header and §4c's
   consequences still said bet 1 FALSIFIED, A5 STRUCK, and that a real
   pmacs --gpu "behaves correctly" --- none of which D4 established,
   since D4 never ran. Both now say withdrawn/retired BY SCOPE, with
   the explicit note that nothing here shows a real session is correct,
   only that no observed evidence of a user-facing defect survives.
   §4c's pre_exec-implies-assertion conclusion is replaced by a pointer
   to §7b/§7c. A3/D0b are marked SATISFIED by the controlled
   explanation --- D0b is not owed and will not run. §9's "Beyond step
   12(a)" is gone, since no journey step is touched. The ledger no
   longer says implementation-absent, mechanism-unknown, or D1/D2-next.

2. Provenance made portable. Both arm commands are fully expanded
   rather than delegating to a machine-local arms.sh. Full SHA-256 of
   the two executed binaries are recorded; the 16-character log values
   are relabelled PREFIXES and carry no claim. The standalone
   foreground/background SigIgn table is labelled UNRECORDED
   CORROBORATION --- read ad hoc, no head, no log, no digest --- and the
   portable probe supersedes it as the recorded check.

Remedy selected, §7c: R-b + R-d through one checked-in helper wrapping
a behavioural probe --- sh -c 'trap "exit 23" 2; kill -INT $$; exit 0' ---
which exits 23 when SIGINT is deliverable and 0 when inherited as
ignored. Verified here in both contexts. POSIX shell only, so it answers
§7b's portability criterion: no /proc, so not Linux-only, and no
sigaction, so no unsafe. scripts/gate fails immediately with the
explicit diagnosis; the target test reports the same precondition
failure if run directly; no override, because a gate under ignored
SIGINT cannot produce valid evidence. R-c rejected. The Linux-only
D1/D2 instrumentation is removed once its evidence is portable.

A1-A5 are replaced for the new work --- guard bite, direct-test
diagnosis, foreground success unaffected, mutation, and an otherwise
unchanged gate --- with the old teardown criteria kept in §8b, marked
non-binding, so the change of target is visible rather than silent.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-19 14:46:44 +02:00
Levi Neuwirth 57d8dae511
docs(framing): rewrite the contract §4c had only contradicted
Four findings on revision 11, all upheld.

1. The operative contract still said the opposite of §4c. Bet 1 read as
   open; §7 said the mechanism was unknown with D3/D4 pending; §8 kept
   the old criteria and a conditional A5; §9 claimed a journey-12(a)
   product repair; the ledger and the revision-10 paragraph still said
   D1/D2 had not started. Each is now rewritten as executed, withdrawn,
   discharged or superseded --- §9 in particular now records journey
   steps touched: NONE, for the stated reason that no product behaviour
   changes, with gate trustworthiness named as what the lane does
   affect.

2. The causal evidence is now portable and cleanly reproduced. The
   first capture came from d12.log, which finished five minutes BEFORE
   afe3631 committed the diagnostic code and ran in the reused d0a-B
   target --- inadmissible provenance, now marked as the first sighting
   only. Replaced by controlled arms on committed head 38f2af4,
   dirty=0, in this worktree's own target, with BYTE-IDENTICAL binary
   hashes across arms (0890b78cca22ac1e, ef6ff1c15e11062a): foreground
   exit=0 ok=2, background exit=101 failed=2 SigIgn=0x1007. The outer
   invocation is recorded as a first-class column, since it is the
   causal variable and every earlier "exact command" omitted it. The
   historical foreground/background mapping is marked RECONSTRUCTED
   from the transcript, not captured --- no pre-existing row carries an
   outer-invocation field, which is precisely why the matrix stayed
   confounded for nine revisions.

3. D4 was never executed, so bet 1 is WITHDRAWN BY SCOPE rather than
   falsified, and A5 is RETIRED BY SCOPE rather than struck. Nothing
   here shows a real wgpu session behaves correctly; what is shown is
   that no observed evidence of a user-facing defect survives. The lane
   is now gate/test correctness only.

4. The remedy is not selected. §7b evaluates four candidates --- runner
   normalisation, an early gate guard, fixture isolation via pre_exec,
   and a test-local precondition assertion --- with portability as a
   selection criterion, noting /proc is Linux-only while the suite is
   cfg(unix) and sigaction querying is unsafe. Likely R-b + R-d, but
   nothing is chosen or implemented here. Revision 11's leap from
   "pre_exec is unsafe" to "therefore an assertion" did not follow.

Also renames the meaningless african_close() helper (38f2af4).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-19 14:35:26 +02:00
Levi Neuwirth e82bff71fe
docs(framing): remove the last three contradictions in revision 10
Three statements survived the narrowing and contradicted it, plus one
ellipsed path in the supposedly exact command block.

  - §4b's heading still read "the source hypothesis is eliminated" ---
    the exact claim the section body withdraws. It now reads "the
    commits do not discriminate today".
  - §4a said the endpoints settle whether 7599661..724b785 contains a
    regression. They do not: they settle only whether a BISECT IS
    CURRENTLY JUSTIFIED. Those are different questions, and D0a's
    both-uniform-red answers the first while leaving the second open.
  - §4b claimed execution "under the approved contract" while the same
    revision acknowledges uptime was never captured. The departure is
    now stated up front, before the results rather than after them:
    uptime is UNKNOWN for all ten runs, everything else held, no
    classification depends on the missing field, and D1/D2's harness
    must capture the full list.
  - The manifest's <TD> definition still abbreviated the second target
    directory as .../d0a-B inside a block labelled exact. Both paths
    are written out; no ellipsis remains in it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-19 13:45:55 +02:00
Levi Neuwirth 5f5fde6dde
docs(framing): revision 10 --- awaiting approval; fix the corrupted provenance
Two findings, both upheld.

1. The portable provenance was corrupted and incomplete --- worse than
   the machine-local pointer it replaced, because it looked verifiable
   and was not. Every log digest had lost its leading hex character
   (A#1 recorded as 1c0fe47d55d8f5e... where the value is
   e1c0fe47d55d8f5e): the extraction started one byte late in
   `logsha=<value>`. The captured /tmp and MemAvailable columns were
   dropped, and the command block used ellipsed paths. All ten digests
   are corrected, both columns restored, and the command is written out
   in full with only two named placeholders.

   Separately: `uptime` was NEVER CAPTURED. §7's condition list names
   it; the harness kept the load averages from it and discarded the
   elapsed time. It is now recorded as UNKNOWN for all ten runs, with
   the condition list marked as only partially satisfied rather than
   implied met. The classifications stand --- none depends on uptime ---
   and D1/D2's harness must capture the whole list.

2. Retiring D0b materially changes the approved diagnostic sequence,
   which made D0b mandatory before every other diagnostic. The document
   still claimed revision 9, approved at 15c25ec, for a decision that
   approval does not contain. Promoted to revision 10 and marked
   AWAITING APPROVAL; D0a's execution and result are reported under
   revision 9, and D1/D2 do not begin until revision 10 is approved.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-19 13:39:46 +02:00
Levi Neuwirth 18b74d7a97
docs(evidence): narrow the D0a conclusion; retire D0b as a precondition
Three findings, all upheld.

1. The causal conclusion overreached, in the same way this lane has
   overreached before. Uniform-red at both endpoints today proves only
   that the two commits DO NOT DISCRIMINATE UNDER CURRENT CONDITIONS.
   "Source hypothesis eliminated", "the interval cannot contain the
   transition" and "unreachable by source" are withdrawn from the
   framing, the manifest and the ledger: a historical regression could
   be masked by a later environmental effect, or by a source/environment
   interaction under which both commits now fail. Failing to
   discriminate is not the same as not differing. "No bisect is
   justified under current conditions" is what survives, and the
   approved endpoint table's two uniform-same rows are corrected to say
   the same thing.

2. D0b was still mandatory, and going to D1/D2 would have skipped an
   approved step. It is now RETIRED AS A PRECONDITION with the reason
   recorded: it existed to make the reduction matrix trustworthy so the
   subset-vs-full comparison could locate the mechanism indirectly,
   and D0a has since produced a reliable direct reproduction that D1/D2
   measure against. Re-running ten reduction rows to sharpen an
   indirect instrument while a direct one is in hand is the wrong order
   of work. The obligation is NOT discharged: A3 still binds, so if
   D1/D2 fail to account for why every subset passed, D0b runs before
   this lane closes.

3. Provenance is now portable. The exact per-run command and a
   transcribed ten-row table --- start time, class, red bins, load,
   freeMB, daemon count, log digest --- are committed, rather than
   delegated to a machine-local results.tsv. Raw logs stay local by
   design. The transcription also surfaces something the delegation hid:
   the leaked-daemon count climbs 72 -> 108, four per run, monotonically
   while every run classifies identically. Recorded, not implicated.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-19 13:23:19 +02:00
Levi Neuwirth 24a84b5381
docs(evidence): D0a executed --- the source hypothesis is eliminated
Ten runs under the approved contract: counterbalanced A B B A A B B A A
B, N = 5 per endpoint, clean detached worktrees at 7599661 and 724b785,
isolated target directories, the gate's build-crdt precondition then its
sweep-crdt command, dirty=0 verified per run. Zero voids, zero splits.

A (7599661) uniform-red. B (724b785) uniform-red. By the approved
endpoint table that is the both-endpoints-uniform-same row: the
difference is NOT captured by those two commits.

What it settles:

  - No bisect of 7599661..724b785 is justified, and none will run.
    7599661 passed inside sweep-crdt on 08-15 and fails 5/5 clean today,
    so the interval cannot contain the transition.
  - The onset window is demoted --- still a true observation, but not
    reachable by source.
  - A RELIABLE REPRODUCTION now exists: 10/10 today across two commits
    at ~4 minutes per run. This is D0a's most useful product, because
    D1/D2 no longer depend on catching a rare event.

What it does not settle: anything about the mechanism. One cheap
negative on "what else changed" --- no package activity in the window per
pacman.log, nearest on 08-18 --- and it is not pursued further, because
with a reproduction in hand direct measurement dominates archaeology.

A's three extra failing binaries are recorded rather than swept up:
a54_real_daemon_real_pty_and_headless_gpu_render..., a v21/v20 row
expected to differ at that older commit, and m6_1_pty_mode_lifecycle.
Two of the three are process/PTY-spawn rows, the same family as the
target. None affect classification, which reads only the two target
copies.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-19 13:04:59 +02:00
Levi Neuwirth 15c25ecaad
docs(evidence): preserve endpoint direction in D0 summary
The portable manifest collapsed the two clean-split directions even though
the governing endpoint table permits a bisect only when 7599661 is uniform
green and 724b785 is uniform red. Preserve that direction explicitly, and
carry the same distinction in the compact active-work summary.

The inverted split remains a real difference, but it contradicts the onset
reading and therefore requires that reading to be re-examined before any
bisect.
2026-08-19 12:02:21 +02:00
Levi Neuwirth f99250e8cd
docs(evidence): the manifest fix in revision 9 never landed
74dbd34 corrected the framing so that "the difference is not captured"
attaches to the uniform-same endpoint verdicts rather than to mixed ---
mixed means intermittency --- but the manifest kept the wrong pairing.
The edit's anchor did not match and the script reported success anyway,
so the commit touched only active-work.md and the framing.

The manifest now defers to §7 D0a for the governing contract and states
the three verdicts with the conclusions that actually belong to them:
clean split permits the bisect, mixed means intermittency under fixed
source, both-uniform-same means the difference is not captured by those
two commits.

Process note, since this is the third silent no-op of its kind in this
lane: an unasserted string replace that misses its anchor is
indistinguishable from one that succeeded. Every edit here now asserts
the anchor before writing and re-asserts the result afterwards.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-19 10:41:13 +02:00
Levi Neuwirth 4e84ff0050
docs(framing): revision 8 --- the superseded one-run rule was still in force
Four findings on revision 7, all upheld.

1. The old one-run D0 rule survived in three durable places --- the
   manifest, this branch's ledger, and the framing's own §4a --- each
   still permitting a bisect when the endpoints merely "differ". That
   contradicts the N = 5 clean-split contract added in revision 7. All
   three now defer to that contract, and §4a's "needs only that the two
   clean endpoints differ now" is marked as the superseded rule it is.

2. D0a still overstated its evidence, in three ways now fixed:
     - "context-sensitive by construction, appearing only in the full
       sweep" is downgraded to what has been OBSERVED so far;
     - the historical 7/7 and 13/13 are stated as NOT endpoint-specific
       rates --- of seven reds only F6 ran at 724b785, of the greens only
       the last at 7599661, both with unknown cleanliness;
     - five runs are named a PREDEFINED EVIDENTIARY THRESHOLD chosen so
       the outcome cannot be argued after the fact, not something that
       mathematically separates intermittency.
   And the bisect now specifies its own classifier: every intermediate
   commit uses the identical N = 5 protocol, and a mixed classification
   ABORTS the bisect rather than being guessed, skipped, or rerun until
   it agrees. A bisect with cheaper steps than its endpoints would
   inherit the weakness the contract exists to remove.

3. The artifacts column is now exact per run, read from each log:
   R1/R2 UNKNOWN (no log preserved), R3 -5d9105cb/-d4dae4f0, R4 and R5
   -6b4b8223 only, R6 -91f51d0b/-6b4b8223. R8's citation was half2.log:1;
   the executable lines are 438 and 459. The framing's last "not same
   binaries" is now "not the same compilations".

4. (Held ledger, 5274d6b.) It named a stale ledger tip and two different
   framing revisions on consecutive lines.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-19 10:08:11 +02:00
Levi Neuwirth 7110256956
docs(framing): revision 7 --- the ancestry supports no causal claim at all
Five findings on revision 6, all upheld.

1. The ancestry pair supports nothing causal. Revision 6 had already
   retreated to "outcome is not determined by commit alone"; that is
   withdrawn too, because different commits CAN deterministically
   produce different outcomes --- this document's own fix-then-regression
   scenario is an example. The two observations differ in commit AND
   environment AND time, so they are simply NON-COMPARABLE. The held
   ledger's "no source-monotonic cause does that" goes with it.

2. D0a was not a valid decision procedure: one unspecified run per
   endpoint cannot establish a regression for a failure that only
   appears in the full sweep. Now specified --- N = 5 full sweep-crdt
   runs per endpoint, INTERLEAVED A/B/A/B so session drift hits both
   arms, identical captured conditions including uptime/free//tmp/
   leaked-daemon count, and a bisect permitted ONLY on a clean split.
   A mixed result means intermittency under fixed source, and no bisect
   is justified at all.

3. "Neither binary contains signal-handling code" is FALSE. The pmacs
   binary does: install_signal_handlers (src/daemon.rs:628) registers
   SIGINT and SIGTERM; it is simply not on run_gpu's path. A grep of
   project sources also cannot exclude a runtime or dependency
   installing a disposition. The established fact is narrow --- no
   explicit installation on run_gpu's path --- and "whatever disposition
   they hold was inherited" is restored to a HYPOTHESIS that D2 must
   measure.

4. Artifact wording finished: no "artifact family", "reduction/
   workspace artifacts" or "different binaries" remain. Every manifest
   row now carries its exact Cargo suffixes read from its log, with a
   stated caveat that those logs are machine-local and this manifest is
   the portable transcription of them.

5. Held ledger pointed at revision 5; it now points at revision 7.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-18 18:03:41 +02:00
Levi Neuwirth e2084fbba5
docs(framing): revision 6 --- the ancestry argument shows less than claimed
Three findings on revision 5, all upheld.

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

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

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

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

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-18 17:33:23 +02:00
Levi Neuwirth 55053c601a
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
2026-08-18 16:06:46 +02:00
Levi Neuwirth 9332d5a616
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
2026-08-18 15:50:53 +02:00
Levi Neuwirth 4e1ca68b4c
docs(framing): revision 3 --- R9 did not run the same binaries
Five findings on revision 2, all upheld. The first invalidates its
strongest claim.

1. R9 executed gpu_initial_target_acceptance-91f51d0b and
   gpu_invocation_acceptance-6b4b8223; the failing sweeps executed
   -5d9105cb and -d4dae4f0. Verified byte-different by sha256. Cargo's
   target selection changes the fingerprint, so command shape changes
   the executable. "Same binaries" is now "same target names and
   order". What the evidence supports is an INTERACTION --- prior
   targets alone green (R9), workspace artifacts alone green (R10),
   both together red (F1-F5) --- so --workspace selection is not
   sufficient by itself and NOT ruled out. The claim that other
   packages "cannot be implicated" because their targets run after the
   failure is withdrawn: later-selected packages can affect the build
   graph and fingerprints before their tests ever run.

2. Both ledgers made internally consistent and portable. This branch's
   asserted default-disposition death and then withdrew it further
   down; the assertion is gone. panel-mapping-generation still carried
   "119 binaries green one red", the >=8s arithmetic, the default-action
   claim and the >6s selector --- corrected on its own branch and pushed
   at 779a6bd.

3. Provenance is now a pushed document, docs/probe-sigint-evidence.md:
   exact command, worktree, HEAD, cleanliness, artifact family, result
   and log digest per physical run. R1 and R2 have no preserved log,
   and revision 2 double-counted one log as both R2 and R6. Cleanliness
   is UNKNOWN for every pre-manifest run and is not inferred. R1-R10
   ran in the panel-mapping-generation worktree, not at main. D0 now
   precedes every other diagnostic: re-run the matrix at main under a
   harness capturing provenance AND the artifact hashes executed.

4. "The probe never blocks indefinitely" narrowed to "the event loop
   wakes at least every 50ms". The stdin reader blocks in read_to_end
   (:1109) and, once ready, the loop leaves only when stdin closes
   (:1212), so the process is not bounded.

5. Launcher call sites: six under --features crdt (:509 :534 :544 :574
   :725 :1097, inside #[cfg(feature = "crdt")] mod crdt). The other two
   --gpu arguments are under #[cfg(not(...))] and compiled out.
   Revision 2 said five while citing eight.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
2026-08-18 15:36:27 +02:00