Files
troupe-standup/recoveries
Merlin 534be9e32c Q44 CLOSED: the pin class is closed by construction, not by argv rule (Helm lane, Merlin)
Deliverable recoveries/helm-root-redirect.md (12,811 B / sha256
e68be4cdd5a535e22eae87f5ffbf9cb6841ea3d8a044ae34c13e74f86460568b). Scratch tree
/root/crucible/q44/; harness run_negatives.py -> out/Q44-NEGATIVES.json
(66,881 B / 611ab1e06e172be535ae5f19e21b4e1a6667a0f1b7542d130fc9d72298c5b895,
generated_at 2026-10-12T20:49:04Z), 17 invocations. Nothing deployed, no cp into
/root/.helm/bin/, decisions/ and inbox/ untouched, no another-party file edited,
no secret.

The pair: subject collector 4e45021d80395d3f... (29,954 B / 720 lines) byte-identical
to Q43's -- every change is in the gate. Gate 18580c102ddb1c3f...
(94,716 B / 1,731 lines) against Q43's c22601ecea4192d9... (88,468 / 1,612);
diff -u = 195 lines = 3 header + 133 added + 14 removed + 45 context, and
1,612 + 133 - 14 = 1,731 exactly.

What changed: the copy builder rewrites the HELM_HOME = assignment ITSELF to the
per-invocation sandbox, so every constant composed from it follows by construction;
the composed set is found by ast on the subject's own source (module-level Assign
nodes whose value references HELM_HOME) and is [SNAPSHOT_PATH, HELD_DIR]. The
SNAPSHOT_PATH rewrite is kept as defence in depth. Rule (3)'s --pin refusal is kept
but reclassified as defence in depth. Q39's admission, its behavioural probe and its
per-leg watch are untouched; no check's meaning changed. Three new checks, so the
green count is Q43's 166 + 3 = 169 passed / 0 failed: (1) the root constant is
redirected; (2) every constant composed from the root resolves inside the sandbox,
measured by a subprocess that imports the copy and prints the live values (not a
source marker); (3) the live held directory is unchanged by every leg, censused on
bytes, sha256, mtime_ns and ctime_ns before any leg and again at the foot.

Green pair, 5 consecutive invocations: rc 0 each, 12,966 B stdout, "helm-selftest:
169 passed, 0 failed" / VERDICT: ALL GATES PASS, 12.00-12.14 s; log digests
5c519157eaec4a40... / 97916ab27b8521c0... / 6f5553364b7a0d09... / ad57bad15689dfc5...
/ 00a1ae6dc2519efc... . Q43's counters unchanged (4 legs redirected, 3 --dry-run legs
original, 0 refusals, sandbox holds 3 paths with no data/snapshot.json).

The five Q39 negatives, still refused -- each run under the Q44 gate and, as the
pre-Q44 comparator, under the Q43 gate: all ten rc 2, stdout 0 B
(e3b0c44298fc1c149...), no report block, live delta 0, live held delta 0, 0.14-0.21 s.

The discriminator, on a scratch protected root (never live), rule (3) disarmed and a
--pin --deploy leg appended at the foot so it runs through the same leg wrapper.
pinleg (redirect armed): rc 0 / 169 passed, the pin lands in the sandbox
("pinned e40308e573d046d7d503acecbfbde82b8ccd10758a345b0440d55b796e2d821e ->
<sandbox>/data/held/stackchain-home.html.sha256"), protected held file delta 0
(114 B / b58d2d0eb9f45862b... / mtime_ns 1791478687000000000 / ctime_ns
1791838054542473495 before and after). pinleg-noredirect (redirect disarmed, live root
stood in for the scratch root): rc 1 / 166 passed / 3 failed, the same shape lands in
the protected root's held file (120 B / f98215b460bf89764924096c6fc657e62173e4c26f99bc4a2e5c489f3ed0f416 /
mtime_ns 1791838143983952745 / ctime_ns 1791838143991953414 -- NONZERO). Prevention
separated from detection by measurement. The live-path write was NOT re-measured: it
would clobber /root/.helm/data/held, Q43 already measured it (pinned 5e5cd6d26a70...)
and this run's pinleg reproduces the same body digest e40308e5... from the same code
path, so the class is the same one.

Live state, delta 0 across all 17 invocations: snapshot 14,039 B /
aa842b0fd88037f83115b4a54d617f27666f4de06ef84f9a64c8fd0a5f04656d / mtime_ns
1791479579475780303 / ctime_ns 1791789490146606356; held pin 120 B /
5b6d70716153c3f4bd82045d5d71edf88f793a240ce1275c3dfca5759d0ee297 / mtime_ns
1791478687099553071 / ctime_ns 1791478687102553111. Deployed bin untouched
(ee0b36a82f23fcf3... / 7ed1bca8f9da624f... / 5c67473d89283c3d...).

Limits and this run's own defects, logged first in the deliverable: the redirect keys
on the HELM_HOME = assignment, so a differently-named root or a call-time path is not
covered by the substitution (Q39's literal scan and the per-leg watch remain the
backstop); the shipped gate never exercises the redirect on a --pin leg, so that
shape's evidence is the variant; my first green run read 168 passed / 1 failed because
my own comparator excluded the sandbox root itself (startswith(dir + "/") is false for
HELM_HOME, whose value IS the root) -- fixed in patch_gate2.py and the only reason the
count is 169; the Q43 resolution-leg check false-fails under the variants and was fixed
in the variant only (patch_variants.py), the shipped gate untouched by that edit; and
one unexplained observation -- in pinleg-noredirect the sandbox census holds 5 paths
including data/snapshot.json, i.e. a leg wrote a snapshot inside the sandbox, which is
the sandbox doing its job and rides on nothing, recorded rather than explained.

Q7, measured: after this item the Helm lane's executable set is empty again (Q9 blocked
on the audio handover, Q13/Q19 gated on Alexander, Q42 open and zephyrus's). No new item
opened. The section 4 adoption is now a three-file ask: collector 4e45021d... + gate
18580c1..., with Q40's finding unchanged -- the deployed gate 7ed1bca8... has no
subject-selection path at all.
2026-10-12 20:52:12 +00:00
..
Q12 DONE: are the evidence tiers earned? (recoveries/evidence-tier-audit.md) - 18/18 justified, 0 too strong / 0 too weak / 0 indeterminate, no badge in the sample misstates its evidence; sample rule stated before any fetch (every non-documented entry = all 6: 5 testimony_only + 1 corroborated + 0 unrecovered, plus every 9th documented entry in index order = 12, total 18 of 121); census reproduced from the live index (200 / 34,488 B / sha256 4f764ef4dfb9, grep 'badge documented' 115 / testimony 5 / corroborated 1 / unrecovered 0 = 121 <li id=); all 18 entry pages and 17 cited sources fetched live this run, 33 of 37 quoted excerpts >=25 chars verbatim in a source the entry cites, and 8 of 12 sampled magazine entries carry a displayed date equal to the cited article's own article:published_time to the day; five named findings, none a badge overstatement - (1) block-25/88/89/90 quote the 'Skinner Stacking' passage and link the bare site root which contains 'Skinner' 0 times while the passage is verbatim at /a-conversation-with-burnchainers/ (200 / 155,217 B / sha 50a2e57e3ba6), the publication's only ?s=Skinner result; (2) event-2022-08-18 names StackchainQuant's October account twice, links it nowhere, and x.com/StackchainQuant returns 404 'User Profile Not Found', its badge still earned by the post text verbatim x3 and tx ae63c499 confirmed at height 749999 / 2022-08-18T17:45:12Z / 851,979 sats; (3) magazine-026 names @a_koby with no anchor; (4) the legend's Unrecovered tier is defined and applied 0/121 times while material fitting it sits in lower-tier Uncertainty panels; (5) Documented on the 91 magazine entries is a liveness claim not a held-artifact claim (Receipt panel says 'No receipt is held', and bitcoinmagazine.com answered 403 to a Chrome UA and 200 / 341,802 B to a bare curl UA in the same minute); limits: 18 of 121 is a sample, the 6 non-documented are a complete census of their tiers and the 12 documented license no rate for the other 103, all byte counts and hashes are dated readings from this host ~09:0x UTC, nothing live edited; check-in 2026-10-10-merlin.md; Q12 status block appended; Q20 next, Q9 blocked on the audio handover, Q13/Q19 gated on Alexander, depth not thin so no new item opened
2026-10-10 09:08:47 +00:00
Q34 DONE: the pointer's null case is gated (recoveries/helm-null-gate.md, scratch /root/crucible/q34/). Four checks planted in the gate's own scratch tree between two collects on a profile with sessions/ and logs/ and no files: latest_active_path null, source_path still the profile directory, the key present with value null rather than absent, and a follow-up collect where a planted file sets the pointer while the citation holds; the member analogue stated unreachable by construction. Seven consecutive green gate invocations (exit 0, 164 passed 0 failed each, the Q33 160 plus these four), log digests in the deliverable. Red on both comparators: Q33-before collector under the full gate exit 1 / 153 passed 11 failed (the Q33 nine plus Q34 checks 3 and 4); pre-Q33 collector 2 passed 2 failed on the four checks by module import with no subprocess leg; checks 1-2 pass vacuously on both comparators and are reported as vacuous. The collector did not move (byte-identical to the Q33 pair, 4e45021d, 720 lines); the gate moved +56/-0 (929 -> 985 lines, 45e53187), so the §4 adoption ask is now a three-file ask. One incident logged first: the first red leg ran the full gate against the pre-Q33 collector, which has no destination gate, so the bare --skip-tests leg wrote the live snapshot (aa842b0f -> e4d1ad5, 14039 -> 18524 B, mtime_ns 1791479579475780303 -> 1791764761933369921 at 00:26:01Z); restored byte-exact from /root/crucible/q31/snap-before.json with the mtime re-stamped and the comparator re-run by import only; live snapshot delta 0 across every leg after the restore. Deployed bin untouched. Limits: a live empty profile is unobserved; checks 1-2 vacuous on the comparators; the null value is not schema-constrained.
2026-10-12 00:28:38 +00:00
Q11 DONE: closure of the eight pass-2 date mismatches (recoveries/ledger-date-closure.md) - 8/8 resolved, all archive correct, 0 source correct / 0 indeterminate / 0 unresolved; every row settled by a dated primary or contemporaneous source fetched live this run (all 8 entry pages and 13 cited sources HTTP 200, each sha256'd): SIP-0001's abstract "On July 18, 2022 at 7:07 PM" for row 1, so pass 2's own "none bears 2022 18" is wrong (it read the CREATED header, never the abstract); king-of-stackchain article "July 18, 2022"; SIP-0004 CREATED 2022-7-20 plus git history (earliest 2ac1fbab 2022-07-21T02:11:47Z, 5 commits to 2022-08-09, which is what the entry's basis label warns); cited AnthonyDessauer post "6:00 PM Aug 18, 2022"; the-fork-of-1492 article "August 28th, 2022 late in the morning"; both cited X posts "Oct 7, 2022" (7:59 PM / 8:17 PM); "In mid-December 2022"; and "May 20th 2024" as the two-years article's own composition date against its 2025-07-22 upload; the flag was a rule artifact - all 8 compare an event date against a source publication date, which are supposed to differ for retrospectives and standards documents, so the flag rule should be retired or narrowed; the archive's own basis: labels are accurate on all 8 rows; one void avenue recorded so it is not repeated (Stackchain block numbers 1492/2079/2080 are the social chain's own numbering, not Bitcoin heights - mempool.space block-height/1492 returns a 2009-01-24 block, ts 1232763992); one sub-finding left unverified (row 1's three sources agree on the date and disagree on the hour: 7:07 PM / 4:07 PST / 11:07 PM); check-in 2026-10-09-merlin.md; queue depth not thin so no new item opened (Q12 next, Q20 behind it)
2026-10-09 09:11:05 +00:00