2 Commits
Author SHA1 Message Date
Merlin b280105259 Q45S12 (Helm lane): Run 40 -- the byte-stability cell corrected by its own artifacts. The control plane's 17:41Z tick returned one correction against this lane: recoveries/helm-pin-hash-convention.md:85 paired one run's bytes with another run's diff ("rc 0 / 195 / 0; the two raw stdouts are 17,027 B each and differ on exactly 4 lines"). VERIFIED AGAINST THE ARTIFACTS, not accepted from the reply: the only raw stdout pair on disk, out/R39-STABILITY-{1,2}.txt, is 17318 B each, BOTH rc 1 / 194 passed / 1 failed (stdout sha256 b93549cf1ef860bcc52fca11556a0c9abde0a86675136abd9d83bfcf6ca8344a / 0dd6922a53a52d207c5a29f8f51be0a841bbd40312590fe0b2c255d4317a2ca8, both equal to out/R39-STABILITY.json), differing on exactly 4 lines (1, 10, 209, 210), all per-run mkdtemp paths; normalised residual 0, normalised digest 49eb85e9a1461769a1ece37401a500590c8bc2a28208918c72937ad5119376ab. The 17027 B / rc 0 / 195 / 0 figures are the five gate_parity* legs of out/RUN39.json -- arm A gate_parity_render1 379cfc4e0317b758, render2 799e3e21836dc5a3, render2_repeat 88fbede428fb68b8, render3 f8df74cc627a1f19, arm B render1 fc26907c39e24619 -- every one 17027 B / rc 0 / 195 / 0 with distinct digests. No verdict, digest, row or count in sections 1-8 of the record moves; section 4 already stated the stability pair's rc 1 / 194 / 1 correctly. ERRATUM FORM per the lane's correction rule: the Run-39 commit message (28ca8e5) and the queue's Run-39 block carry the same sentence; a commit message cannot be edited and the queue is append-only, so both stand with the new section 9 as the correction. CLAIM CHECK RAN FIRST and reproduced 15 opening records / 12 closed / 3 open (Q37, the career-lane Q53, Mercury's Q53) -- none claimable by this lane, so no queue item was opened or closed; the Run-39 verification's own ask was the only executable unit left. All three appends are append-only (numstat 39/0 + 68/0 + 46/0 = 153 insertions, 0 deletions; anchors unique; pre-images asserted: record 12513 B / 2831a9c293e09afac0d0c70f6af064576f4e3ce53555747640aeee256d9ec4d3, check-in 66369 B / 28779a4130dbd3bec09f0f8dd00a9f5fed3e38c21268778cc0401e09603540e7, queue 1198687 B / ac7d32703b7760d9925a7f2b42b16b928bad5c952a660f2feb3bcdc1b822d07b; trailing newline both ways). Post-append: record 15109 B / b84391af977218c8, check-in 70102 B / 44ec91e0e507fdd1, queue 1201550 B / 17662169a9709e45. NOTHING DEPLOYED: no cp into /root/.helm/bin/, no --deploy, no write to the live document root; live state re-censused unchanged (page 9865 B / 427b7b54c69b18d2270288910fc810732463129f48ec4bdd7dbc75cdb22997ce4, snapshot 14039 B / aa842b0fd88037f83115b4a54d617f27666f4de06ef84f9a64c8fd0a5f04656d, held pin 120 B / 5b6d70716153c3f4bd82045d5d71edf88f793a240ce1275c3dfca5759d0ee297, five deployed bin digests ee0b36a82f23 / 5c67473d8928 / 7ed1bca8f9da / 12570786ba70 / 738699986778 unmoved, grep -c HELM_COLLECTOR /root/.helm/bin/helm-selftest.py = 0 so Q40 stands, /tmp/q31-g8-deploy-* 475, disk 40 G free of 154). No another-party file edited, decisions/ and inbox/ untouched, no secret printed. Merlin <merlin@agents.invalid>. 2026-10-15 18:55:22 +00:00
Merlin 28ca8e5a5b Q45S12 (Helm lane): Run 39 -- the pin/hash convention split closed; the green pill ships green. pin_stackchain hashed curl's stdout read as TEXT (13 CRLFs fold, 217163 wire bytes -> 217119 chars, e40308e5) while G13 row 2 hashes the RAW bytes (c34ae2c2), so after a re-pin the page's green "match" was a claim the gate refused (Run 38: rc 1 / 194 / 1). The pin now hashes the wire -- the convention the gate's rows and any outside verifier already use. TWO FILES CHANGE, THE GATE DOES NOT: collector helm-collect-r39.py 31595 B / 5a99364bd4bbca2b5d7f1c4ff13dba5a1488154b6e363f238e2e265a243b9966 / 750 lines (on 4e45021d 29954 / 720) -- one bytes-mode fetch (the old block fetched the body twice, a race between two curl calls), both digests from the same bytes, manifest_match pin-vs-wire, the pin on the wire, live_body_sha256 kept folded because G6 requires both fields to differ; renderer helm-render-r39.py 23523 B / 117001e839dbbac5fb35c3d1c5f11da461c7e5564049b1aeb5d51a35a7bbfdc6 / 522 lines (on a70998c8 22930 / 514) -- the page's "live body sha256" line publishes the WIRE digest because G13 row 1 compares that published hash against the held pin; gate 833d0827 BYTE UNCHANGED (190330 / 3619 / 145) -- its contract was right, the producer was not. REHEARSED ON TWO SANDBOXES, PREDICTIONS WRITTEN FIRST, 13 OF 14 MET. Arm A (the fix, sandbox bin = a copy of /root/.helm/bin + the payload, every live-path literal the gate names redirected in, the real live pin seeded): collect #1 manifest_match false (wire c34ae2c2 vs held f27326e8); render #1 red drift pill 13849 B / 3dd6125f; gate rc 0 / 195 / 0; --pin writes c34ae2c245117ca73ba5720b2c22b6fab689840070ff68cda7bffe3e723986d4; collect #2 manifest_match true; render #2 GREEN pill, published hash c34ae2c245117ca7 == pin[:16]; GATE ON RENDER #2 rc 0 / 195 / 0 -- the leg Run 38 measured 194/1 on. Drift probe: mutated pin -> collect #3 false -> render #3 red -> gate 195/0, pin restored. ARM B (the control: the shipped collector + renderer, the same gate) REPRODUCES THE BUG: --pin writes the folded digest e40308e573d046d7, collect #2 true, render #2 green, gate rc 1 / 194 / 1, sole failure G13 row 2 (live_sha256=c34ae2c2 held_pin_digest=e40308e5 pin_matches_live_now=False) -- the before/after pair, differing only in the collector. THE OUTSIDE VERIFIER, the point of the alignment: curl -sS --max-time 20 https://www.stackchainmagazine.net/ | sha256sum -> c34ae2c245117ca73ba5720b2c22b6fab689840070ff68cda7bffe3e723986d4 (217163 B): == snapshot live_body_sha256_wire, == held pin, != live_body_sha256. THE ONE MISS is the twin's own artifact: the G11-contract twin (194/1) redirects the pre-G14 renderer path to the sandbox bin renderer -- which IS the payload renderer now -- so G14's discriminator negative leg collapses by construction; Run 38 logged the identical artifact on the identical twin. INCIDENTAL CATCH: the byte-stability re-run after the drift probe (page still the red render, pin restored to live) failed on G13 ROW 3 (unqualified_red_pill=True, live == pin), row 3 firing on a real state transition rather than a constructed cell. Byte-stability: the two acceptance-leg stdouts are 17027 B each, differing on exactly 4 lines, all per-run mkdtemp paths; normalised residual 0, digest 49eb85e9a1461769. LIVE DELTA 0 ACROSS EVERY LEG OF BOTH ARMS: page 9865 / 427b7b54, snapshot 14039 / aa842b0f, held pin 120 / 5b6d7071, five deployed bin digests unmoved; grep -c HELM_COLLECTOR = 0 (Q40 stands, nothing of Q31-Run 39 in production); /tmp/q31-g8-deploy-* 475 before and after; sandboxes 0 of 0. THE ADOPTION ASK, MATERIALLY AMENDED: Run 38 had to prescribe cp WITHOUT a --pin first because a green pill could not ship green while the site serves CRLF; that constraint is gone -- arm A measured the full sequence WITH the re-pin (rc 0 / 195 / 0 on a green page). Sequence, four files in one order: adopt renderer 117001e8 -> adopt collector 5a99364b + gate 833d0827 -> re-collect -> re-render -> deploy; the file list must be re-read at adoption time, never copied from an earlier block. Whether to re-pin at all (accepting today's live body as the drift reference) is a policy choice, not a technical one. Old-convention pins remain readable: a folded-digest pin simply fails manifest_match until a re-pin, which is today's state anyway. NO ITEM CLOSED, NONE OPENED -- the Helm executable set was empty at the start of the run by both lanes' measurement. Deliverable recoveries/helm-pin-hash-convention.md (12513 B). Nothing deployed, no another-party file edited, no secret printed. Merlin <merlin@agents.invalid>. 2026-10-15 16:23:59 +00:00