diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index e529512..6980a70 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -9445,3 +9445,77 @@ different. - **Consequence for the record: the PR #77 residual is verified but unowned.** Nothing about the finding changes; what changes is that no implementation route is currently live. Third dead route in this lane's recent history, same one-line class as the others: Praetorian (`HTTP 403`, OpenCode free tier), hou3 (`Hermes is not logged into Nous Portal`), now Vincent (expired openai-codex OAuth). - **Not executed, and not mine to execute:** re-authenticating another profile is a cross-profile credential change and needs Alexander's explicit authorization; the repair command is his to run in his own shell. **No fallback route was opened** rather than fanning the same contract out to a second agent without a decision — the residual is small, verified, and can wait for the route to be repaired or for Alexander to accept the PR's narrower claim as the boundary. - Everything else in the block above stands as measured: PR #77 open/mergeable at `b4be704…` with **0 reviews** and #21 open with **3 unticked** boxes; main catches 1 of 12 phrasing probes, the branch 11 of 12; the import path still clears truthy reported symptoms; nothing merged, nothing deployed. + +**G14 — the live-body-sha line's own clock (Helm lane; Run 36, 2026-10-15, +Merlin).** Deliverable `recoveries/helm-hash-line-qualifier.md` (**13,678 B / +sha256 `d92f5b7ce9fab458fa8d8ef275d04d2a2d7a2a7d78d7e91ca2dc6feeaa9eb543`**, +this host, at the write). Scratch `/root/crucible/q65/`; renderer +`helm-render-g14.py` **22,930 B / `a70998c8592a03cd…`**; gate +`helm-selftest-q65.py` **190,330 B / 3,619 lines / 145 `check(` +registrations / `833d08275977054a…`** on Run 35's `6a887f42754a8d96…` +(182,752 / 3,464 / 142) at five asserted anchors: **+7,578 B / +155 lines / ++3 registrations**. Nothing deployed: no `cp` into `/root/.helm/bin/`, no +write to the live document root, `decisions/` and `inbox/` untouched, no +another-party file edited, no secret printed. + +- **The unit.** Run 35's record left one stated open limit: the page's + "live body sha256" line — a present-tense label on the frozen pin + `f27326e8…` (pinned 2026-10-08T16:58:07.100Z) while the live body reads + `c34ae2c2…` (200 / 217,163 B) — "covered transitively through the pin, but + nothing checks the label itself". +- **The obvious predicate falsified before it shipped** + (`q65/probe_r36.py` → `out/R36-PROBE.json`): `("live body sha256" not in + text) or ("as of " in text)` is strictly weaker than G10. The + distinguishing cell is real: the G11 renderer (`306d4bee…`, the adoption + payload) at the stale clock emits **11,819 B / `951a8a7645fe7ef4…`** on + which **G10, G12 and G13 row 1 all PASS** while the hash line is + unqualified. That body is what the §4 adoption would deploy today. +- **The fix.** One renderer edit: the hash line's own `
` carries + `as of OBS · AGE ago · not re-checked since` (tail only when stale). + Emitted: g14-stale **11,917 B / `ecb5838ed2953942`**, g14-fresh **11,695 B + / `410e2f57b2aae51c`**, both with `as of` in the hash element; the g11 + controls reproduce `951a8a76…` / `1eec213e…` exactly. Pre-image preserved + byte-exact at `helm-render-g14-pre36.py`. +- **The matrix, prediction stated before the run** (`run_matrix_r36.py` → + `out/R36-GATE.json`, live censused around every leg, + `live_delta_empty_all_legs: true`): shipped **rc 1 / 192 passed / 3 + failed** (G10 deployed-page, G13 row 2 live, G14 row 1), byte-identical on + the second run after sandbox normalisation (sha256 `07c1c58ddb969403…`, + residual 0); **twinI (g14-stale) rc 0 / 195 / 0, ALL GATES PASS**; + **twinJ (g11-stale, the adoption payload) rc 1 / 194 / 1 — G14 row 1 + only**; **control-g (q64 base, twinJ repoints) rc 0 / 192 / 0** — **the + hole measured: the adoption payload passes every gate the lane has**. + twinJ/control-g isolates G14 row 1 and nothing else. +- **twinK's miss is a finding:** predicted rc 0 / 195 / 0, measured **rc 1 / + 194 / 1, G13 row 2** — a fresh clock on the frozen `manifest_match` is + still caught (`pin_matches_live_now=False`). The renderer alone does not + make the page passable; **re-collect → re-render → deploy** does. +- **A sandbox leak measured and fixed** (`sandbox_probe.py`): + `/tmp/q31-g8-deploy-*` grew **+1 per gate run** (the Q31/G8 `--deploy` + leg's `mkdtemp` was never removed), **474 directories** on /tmp at the + final census. Edit B removes it after the two G8 checks that read it; the + first form (in the `finally`) turned both rows red (measured shipped + 190/5, twinI 193/2). Post-fix **delta 0 on all five q65 legs**; + control-g still leaks — the hole leaks too. +- **Live state, delta 0 across all seven legs** (`out/R36-FINAL.json`): page + **9,865 B / `427b7b54c69b18d2…`** / `1791709034017837233`; snapshot + **14,039 B / `aa842b0fd88037f8…`** / `1791479579475780303`; held pin + **120 B / `5b6d70716153c3f4…`** / `1791478687099553071`; deployed bin five + digests unmoved (`ee0b36a82f23fcf3…` / `5c67473d89283c3d…` / + `7ed1bca8f9da624f…` / `12570786ba703787…` / `7386999867789694…`); + `grep -c HELM_COLLECTOR` = **0** so Q40 stands and none of Q31–G14 is in + production. Disk 41 G free of 154 (74 %). +- **Adoption, five files in one order:** adopt renderer `a70998c8…` + (superseding `306d4bee…`) → adopt collector `4e45021d…` + gate + `833d0827…` (superseding `6a887f42…`) → re-collect → re-render → deploy. + Acceptance criterion unchanged and demonstrated a third time: **rc 0 / 195 + / 0 / ALL GATES PASS** (twinI's shape). Standing and human-gated: that + `cp`; the stale `manifest_match` pin (false, four instruments); Q13; Q9; + Q19. **No item closed, none opened** — the Helm executable set was empty + at the start of the run by both this lane's and the pipe's measurement, so + the unit taken was the residual Run 35's own record named and left open. +- **Reply 60's correction discharged:** `pin_stackchain` is defined at + `helm-collect.py:664`, verified this run with + `grep -n 'def pin_stackchain' /root/crucible/q48/helm-collect.py` → + `664:def pin_stackchain():`; Run 35's record cited the older `647–662` + span. diff --git a/checkins/2026-10-15-merlin.md b/checkins/2026-10-15-merlin.md index cdd1eac..16af211 100644 --- a/checkins/2026-10-15-merlin.md +++ b/checkins/2026-10-15-merlin.md @@ -519,3 +519,110 @@ page that publishes one hash, holds another, and is fetched against a third has nowhere left to hide. — Merlin (Run 35, landing) + +### Run 36 — the live-body-sha line's own clock + +**Did. G14 — the page's "live body sha256" line, the residual Run 35's own +record named and left open, discharged; and a deploy sandbox that never left, +measured and fixed.** + +The line renders `live body sha256 f27326e8b13d1dec…` on the deployed page — +the held pin, frozen 2026-10-08T16:58:07.100Z, while the live body today is +`c34ae2c2…` (200 / 217,163 B). G10 owns the page clock, G12 the pill's +pairing, G13 the pill's truth; nothing read that line. + +- **The obvious predicate was falsified before it shipped** + (`q65/probe_r36.py` → `out/R36-PROBE.json`): + `("live body sha256" not in text) or ("as of " in text)` is strictly + weaker than G10, whose own predicate already requires both clock strings. + The distinguishing cell is real: the G11 renderer (`306d4bee…`, the lane's + current adoption payload) at the stale clock emits **11,819 B / + `951a8a7645fe7ef4…`** (reproducing Run 29's and Run 33's recorded digest) + on which **G10, G12 and G13 row 1 all PASS** while the hash line is an + unqualified present-tense claim. **That body is what the section-4 adoption + would deploy today.** The rule that survives: the element containing + `live body sha256` must itself contain `as of`. +- **Renderer fix** (`q65/make_renderer_g14.py`, one edit at a unique + asserted anchor, pre-image preserved byte-exact at + `helm-render-g14-pre36.py`): `helm-render-g14.py` **22,930 B / sha256 + `a70998c8592a03cd…` / 514 lines**. Emitted bytes, all rc 0: g14-stale + **11,917 B / `ecb5838ed2953942`** (`as of` in the hash element, True); + g14-fresh **11,695 B / `410e2f57b2aae51c`** (True); the g11 controls + reproduce `951a8a76…` / `1eec213e…` exactly. The qualifier's tail appears + only on the stale branch, same rule as the pill. +- **Gate** (`q65/build_r36.py` from `6a887f42754a8d96…` at five asserted + anchors, +3 registrations): `helm-selftest-q65.py` **190,330 B / 3,619 + lines / 145 `check(` registrations / `833d08275977054a…`**. Matrix + (`run_matrix_r36.py` → `out/R36-GATE.json`, prediction stated before the + run, live censused around every leg, `live_delta_empty_all_legs: true`): + shipped **rc 1, 192 passed / 3 failed** (G10 deployed-page, G13 row 2 + live, G14 row 1) — met exactly, and byte-identical on the second run + after sandbox normalisation (sha256 `07c1c58ddb969403…`, residual 0); + **twinI (g14-stale cell) rc 0, 195/0, ALL GATES PASS** — met exactly, the + honest remediated state; **twinJ (g11-stale cell, the adoption payload) + rc 1, 194/1 — G14 row 1 only**, its evidence line quoting the unqualified + element — met exactly; **control-g (the q64 gate under twinJ's repoints) + rc 0, 192/0, ALL GATES PASS** — met exactly, **the hole measured**: the + adoption payload passes every gate the lane has today. +- **twinK (g14-fresh cell) did not meet its prediction: rc 1, 194/1, G13 row + 2** — and that is a finding, not just a miss of mine. A fresh clock on the + frozen `manifest_match` is still caught by G13 row 2 + (`pin_matches_live_now=False`). **The renderer alone does not make the + page passable; re-collect → re-render → deploy does** — the sequence the + lane has carried since Run 28, now with the renderer first. +- **A sandbox leak, measured and fixed** (`sandbox_probe.py`, one leg): + `/tmp/q31-g8-deploy-*` grew +1 per gate run, **474 directories** on /tmp at + the final census; the Q31/G8 `--deploy` leg's `mkdtemp` was never removed. + Edit B captures the directory and removes it after the two G8 checks that + read it. My first form put the removal in the `finally` and turned both + rows red (measured shipped 190/5, twinI 193/2); the second form ships. + Post-fix **delta 0 on all five q65 legs**; control-g, the unfixed base, + still leaks its one — the hole leaks too. +- Record: `recoveries/helm-hash-line-qualifier.md` (**13,678 B / sha256 + `d92f5b7ce9fab458…`**, this host, at the write). +- **Live state, delta 0 across all seven legs** (`out/R36-GATE.json` per-leg + `live_unchanged: true` ×6; `out/R36-FINAL.json`): page **9,865 B / + `427b7b54c69b18d2…`** / mtime_ns `1791709034017837233`; snapshot **14,039 B + / `aa842b0fd88037f8…`** / `1791479579475780303`; held pin **120 B / + `5b6d70716153c3f4…`** / `1791478687099553071`. Deployed `/root/.helm/bin/` + untouched — five digests re-read (`ee0b36a82f23fcf3…`, `5c67473d89283c3d…`, + `7ed1bca8f9da624f…`, `12570786ba703787…`, `7386999867789694…`) plus the + `__pycache__/` an adoption must not copy in — and `grep -c HELM_COLLECTOR` + = **0**, so Q40 stands and none of Q31–G14 is in production. Disk 41 G free + of 154 (74 %). Nothing deployed, no another-party file edited, + `decisions/` and `inbox/` untouched, no secret printed. +- **Reply 60's correction discharged:** `pin_stackchain` is defined at + `helm-collect.py:664`, not `647–662` — verified this run with + `grep -n 'def pin_stackchain' /root/crucible/q48/helm-collect.py` → + `664:def pin_stackchain():`. Run 35's record cited the older span; the + collector's own line numbers stand as the pipe read them, and this run's + record uses 664. + +**Blocked.** The remediation, not the work — unchanged in kind from Runs 33 +through 35, and now demonstrated insufficient in one step: twinK measures +that adopting the G14 renderer without a re-collect leaves G13 row 2 red, +because `manifest_match` is the collector's frozen field. Standing and still +human-gated: the §4 adoption sequence, the stale `manifest_match` pin +(measured false, four times now, on four instruments — the held pin +`f27326e8…` against the live body `200 / 217,163 B / c34ae2c2…`), the Q13 +publication call, Q9's checksum handover, Q19's onboarding. + +**Next.** The adoption sequence is five files in one order — **adopt +renderer `a70998c8…` (22,930 B, superseding `306d4bee…`) → adopt collector +`4e45021d…` (29,954 B) + gate `833d0827…` (190,330 B, superseding +`6a887f42…`) → re-collect → re-render → deploy.** The acceptance criterion +is unchanged and now demonstrated a third time: **rc 0 / 195 passed / 0 +failed / ALL GATES PASS** (twinI's shape). The re-collect is load-bearing +three times over: G13's live row, Run 35's re-pin finding, and the G14 +qualifier's truth. The 474 pre-existing `q31-g8-deploy-*` directories are +host residue; the leak is closed going forward, and removing the old ones is +a host operation this run did not take. + +**Ask.** Alexander: the same adoption decision, one item wider than last +run — the renderer is now an adoption object (twinK measures that a +re-render on the current payload publishes a page this gate refuses), and +the gate supersedes again. Nothing new is raised beyond that; every other +open item belongs to another lane or to you. One convention note, not an +ask: Merlin's replies are filed in the `to-timmy-NN` series per the naming +rule reply 56 settled; this run writes no reply because reply 60 left no +ask and nothing of a counterparty's is outstanding. diff --git a/recoveries/helm-hash-line-qualifier.md b/recoveries/helm-hash-line-qualifier.md new file mode 100644 index 0000000..8ae2681 --- /dev/null +++ b/recoveries/helm-hash-line-qualifier.md @@ -0,0 +1,237 @@ +# The live-body-sha line's own clock — G14, and the deploy sandbox that never left + +**Run 36, Helm lane. Merlin, 2026-10-15.** Scratch `/root/crucible/q65/`. +Deliverable: this record. Renderer `helm-render-g14.py` (**22,930 B / sha256 +`a70998c8592a03cd68447e02126ce175732796c225f57ccaf90f973dfb5ff654` / 514 +lines by `wc -l`**), gate `helm-selftest-q65.py` (**190,330 B / 3,619 lines / +145 `check(` registrations / sha256 +`833d08275977054a92dc6c9382ed08127307ac54552d738aef35b07825a39d3e`**), built +from Run 35's shipped gate `6a887f42754a8d96…` (182,752 B / 3,464 lines / 142 +registrations) at five asserted anchors: **+7,578 B / +155 lines / +3 +registrations**. Four twins and one control, each one to four asserted lines +different. Subject collector `4e45021d80395d3f…` / 29,954 B throughout, +asserted by digest. + +**Nothing was deployed**: no `cp` into `/root/.helm/bin/`, no `--deploy`, no +write to the live document root, no write anywhere under `/root/.helm`. Live +state measured around **every** leg: delta 0 (bytes + sha256 + mtime_ns on +page, snapshot and pin). No another-party file edited; no secret printed; +`decisions/` and `inbox/` untouched. + +--- + +## 1. Why this unit + +Run 35's record closed G13 with one stated open limit, in its own section 8: + + "The page's 'live body sha256' line -- a present-tense label on a frozen + value -- is now covered transitively through the pin, but nothing checks + the label itself." + +The line renders as `live body sha256 f27326e8b13d1dec…` on the deployed page. +`f27326e8…` is the **held pin**, frozen 2026-10-08T16:58:07.100Z; the live +body today is `c34ae2c2…` (200 / 217,163 B). The label claims the hash is +live. G10 owns the page-level clock, G12 the pill's pairing, G13 the pill's +truth — none reads that line. This run discharges the limit. + +## 2. The obvious predicate, falsified before it shipped + +`q65/probe_r36.py` → `out/R36-PROBE.json`, measured before anything was +built. The first predicate that comes to mind: + + obvious: ("live body sha256" not in text) or ("as of " in text) + +G10's own predicate is `("not re-checked since" in text) and ("as of " in +text)`. A body the obvious form refuses has the label present and no `as of` +anywhere — which G10 refuses too. **The obvious form is strictly weaker than +G10; every body it refuses, G10 refuses.** It cannot catch the defect on the +G11 renderer, whose qualifier sits in its own `
` below the hash line. + +The distinguishing cell is a **real artifact, not a string I built**. The G11 +renderer (`306d4bee…`, the lane's current adoption payload) at the stale +clock `--as-of 2026-10-14T16:00:00.000Z` emits **11,819 B / sha256 +`951a8a7645fe7ef42247de97d37ab10c99f89a9c05bff3fe8f36177456936485`** — +reproducing Run 29's and Run 33's recorded digest. Measured predicates on +that body (`R36-PROBE.json`, `cells.g11-stale`): + +| predicate | result | +|---|---| +| G10 (page-level clock) | **PASS** — both `as of` and `not re-checked since` present | +| G12 (pill coherent with its clock) | **PASS** — amber `match (unverified)` | +| G13 row 1 (published hash vs pin) | **PASS** — `f27326e8…` is the pin | +| obvious predicate | **PASS** | +| element predicate (the hash line's own `
` carries `as of`) | **FAIL** | + +A page whose hash line is an unqualified present-tense claim of a frozen +value passes every gate the lane has. **That body is what the section-4 +adoption would deploy today.** + +The rule that survives: **the element that contains `live body sha256` must +itself contain `as of`** — G10's page-level discipline applied to the line +that makes the tense claim about a single value. Complementarity, stated +rather than hidden: on today's deployed page (no clock anywhere) G10 and G14 +are both red; on the G11 stale cell only G14 is red — which is the +distinguishing work. + +## 3. The renderer fix + +`q65/make_renderer_g14.py`, pre-image `q59/helm-render-g11.py` (asserted +`306d4befee7c9874…`), one edit at a unique asserted anchor (line 350; my +first anchor carried a trailing comma the source does not have — measured +with `grep -n` + `cat -A`, the anchor corrected, the failure logged): + + before:
live body sha256 HEX…
+ after:
live body sha256 HEX… + as of OBS · AGE ago · not re-checked since
+ +The standalone `match_qualifier` div is untouched; the pill keeps its own +clock. Emitted bytes, all four legs rc 0 (`make_renderer_g14.py` output, +cells `r36-*`): + +| cell | renderer | clock | bytes / sha256 | `as of` in hash element | +|---|---|---|---|---| +| g11-stale | `306d4bee…` | 2026-10-14T16:00:00Z | 11,819 / `951a8a7645fe7ef4` | **False** | +| **g14-stale** | `a70998c8…` | 2026-10-14T16:00:00Z | 11,917 / `ecb5838ed2953942` | **True** | +| g11-fresh | `306d4bee…` | 2026-10-08T18:00:00Z | 11,624 / `1eec213e9e363d36` | False | +| **g14-fresh** | `a70998c8…` | 2026-10-08T18:00:00Z | 11,695 / `410e2f57b2aae51c` | **True** | + +The g11 digests reproduce the recorded ones exactly (control), and the G14 +fresh element reads `as of 2026-10-08T17:12:59.458Z · 47m 00s ago` — the +qualifier's tail (`not re-checked since`) appears only on the stale branch, +same rule as the pill. Pre-image preserved byte-exact at +`q65/helm-render-g14-pre36.py`. + +## 4. The gate + +`q65/build_r36.py` from `q64/helm-selftest-q64.py` (asserted +`6a887f42754a8d96…`) at five asserted anchors, **+3 registrations** (the +deployed row, the discriminator, the read-only census), nothing renamed or +removed. The twins repoint all four page subjects (`_g10_deployed`, +`_g12_deployed`, `_g13_deployed`, `_g14_deployed`); `control-g` is the q64 +base under twinJ's repoints. + +**The matrix, prediction stated before the run and met — with one exception, +logged in §8** (`run_matrix_r36.py` → `out/R36-GATE.json`, `generated_at` +run, live censused around every leg, `live_delta_empty_all_legs: true`): + +| config | predicted | measured | verdict | +|---|---|---|---| +| shipped q65 | rc 1, 192/3 | **rc 1, 192 passed, 3 failed** (G10 deployed-page, G13 row 2 live, G14 row 1) | met exactly | +| shipped again | byte-identical stdout | **identical after sandbox normalisation**, residual 0, sha256 `07c1c58ddb969403…` both runs | met | +| **twinI** — all page subjects at the g14-stale render | rc 0, 195/0 | **rc 0, 195 passed, 0 failed, ALL GATES PASS** | met exactly — the honest remediated state | +| **twinK** — all page subjects at the g14-fresh render | rc 0, 195/0 | **rc 1, 194 passed, 1 failed — G13 row 2** | **NOT met; my prediction was wrong, §8.1** | +| **twinJ** — all page subjects at the g11-stale render (the adoption payload) | rc 1, 194/1 | **rc 1, 194 passed, 1 failed — G14 row 1 only**, its evidence line reading `hash_element='live body sha256 f27326e8b13d1dec…'` | met exactly | +| **control-g** — the q64 gate under twinJ's exact repoints | rc 0, 192/0 | **rc 0, 192 passed, 0 failed, ALL GATES PASS** | met exactly — **the hole, measured**: the adoption payload passes every gate the lane has today | + +The twinJ / control-g pair isolates G14 row 1 and nothing else: same four +page subjects, same pin, the only difference the row's existence. + +**twinK's red row is a finding, not a miss I can wave off.** The g14-fresh +cell carries a fresh clock (47m 00s ago) on the pill and the hash line — but +`manifest_match: true` is still the frozen field, and G13 row 2's fresh +fetch contradicts it (`live_sha256=c34ae2c2…` vs +`held_pin_digest=f27326e8…`, `pin_matches_live_now=False`). A fresh clock on +a false claim is exactly the laundering Run 34's G13 exists to catch, and it +still catches it after the G14 fix. **The G14 renderer alone does not make +the page passable; only re-collect → re-render → deploy does** — which is +the same sequence the lane has carried since Run 28, now with the renderer +first in it. + +## 5. The sandbox leak, measured and fixed + +**Measured before the fix** (`sandbox_probe.py`, one shipped leg): every +sandbox pattern flat except `/tmp/q31-g8-deploy-*`, **+1 per leg**. The +creation site is `helm-selftest.py:2608` +(`tempfile.mkdtemp(prefix="q31-g8-deploy-")` for the Q31/G8 `--deploy` +leg), whose `finally` restored the patched constants but never removed the +directory. **474 directories** on `/tmp` at the final census — the residue +of every gate run since the leg landed. + +**Fixed in the same build, edit B**: capture the directory and remove it +immediately after the two G8 checks that read it (the `--deploy`-writes and +valid-JSON rows). My **first** form put the removal inside the `finally`, +which turned both rows red (measured: shipped 190/5, twinI 193/2 — the +cleanup firing before the checks read the file). The second form is what +ships; the first is preserved in `build_r36.py`'s comment block. +Post-fix: **sandbox delta 0 on all five q65 legs**; control-g, the unfixed +q64 base, still leaks its one — the hole leaks too. + +## 6. Live state, delta 0 across all seven legs + +Bytes + sha256 + mtime_ns, censused around every leg +(`out/R36-GATE.json`, `live_delta_empty_all_legs: true`, per-leg +`live_unchanged: true` ×6; `out/R36-FINAL.json`): + +- deployed page **9,865 B / `427b7b54c69b18d270288910fc810732463129f48ec4bdd7dbc75cdb22997ce4`** / `1791709034017837233` +- snapshot **14,039 B / `aa842b0fd88037f83115b4a54d617f27666f4de06ef84f9a64c8fd0a5f04656d`** / `1791479579475780303` +- held pin **120 B / `5b6d70716153c3f4bd82045d5d71edf88f793a240ce1275c3dfca5759d0ee297`** / `1791478687099553071` +- deployed `/root/.helm/bin/` untouched — five digests re-read + (`ee0b36a82f23fcf3…` / `5c67473d89283c3d…` / `7ed1bca8f9da624f…` / + `12570786ba703787…` / `7386999867789694…`) plus the `__pycache__/` an + adoption must not copy in; **`grep -c HELM_COLLECTOR` = 0**, so Q40 stands + and none of Q31–G14 is in production. +- disk 41 G free of 154 (74 %). Sandboxes 0 (`/tmp/helm-legs-*`); the + `q31-g8-deploy-*` residue stands at 474 with the leak closed going + forward. + +## 7. Adoption — five files, one order + +**adopt renderer `a70998c8…` (22,930 B, superseding `306d4bee…`) → adopt +collector `4e45021d…` (29,954 B) + gate `833d0827…` (190,330 B, superseding +`6a887f42…` and everything before it) → re-collect → re-render → deploy.** + +The acceptance criterion is unchanged and now demonstrated a third time: the +sequence is done when the gate reaches twinI's shape, **rc 0 / 195 passed / +0 failed / ALL GATES PASS** — and twinK measures that the renderer alone +cannot reach it. The **re-collect** is load-bearing three times over: G13's +live row stays red until a collect recomputes `manifest_match`, Finding 1 of +Run 35 shows the re-pin can leave page and pin disagreeing, and the G14 +qualifier only states a clock truthfully if the reading behind it is fresh. + +**Standing, unchanged and still human-gated:** that `cp`; the stale +`manifest_match` pin (measured false, four times now, on four instruments); +the Q13 publication call; Q9's checksum handover; Q19's onboarding. **No +queue item opened** — the Helm executable set was empty at the start of the +run by both this lane's and the pipe's measurement, so the unit taken was +the residual Run 35's own record named and left open. + +## 8. Defects of mine, logged first + +1. **My twinK prediction was wrong.** It read *rc 0, 195/0; measured rc 1, + 194/1 (G13 row 2)*. The reason is in §4: I predicted the g14-fresh cell + would be green, forgetting that the frozen `manifest_match` survives the + renderer fix and G13 row 2 is the row that catches it. The prediction + stands as first written in `build_r36.py` and `run_matrix_r36.py`; the + miss is the record. +2. **My first anchor for the renderer edit carried a trailing comma the + source does not have** (`grep -n` + `cat -A` settled it; the Run 35 + comment-only patch used the same file's line 350 correctly). Counted as + the lane's anchor class. +3. **My first sandbox cleanup fired too early** — in the `finally`, before + the two G8 checks that read `_deploy_snap` (measured 190/5 and 193/2). + The second form is what ships; both are in `build_r36.py`'s comment. +4. **`run_matrix_r36.py` crashed on its own artifact ordering** + (`out["byte_stability"]` referenced before `out` existed — NameError — + after the first full matrix had already printed every row). Fixed and + re-run; the figures above are from the run that wrote the artifact. +5. **A no-op replace remains in `build_r36.py`** (the `OLD_C`/`NEW_C` pair + left after moving the cleanup out of the `finally`). Harmless, logged + rather than edited out, so the first form stays visible. + +**Limits, stated as the item's first limits:** + +- G14 detects and cannot repair. The remedy is still re-collect → re-render + → deploy, an operator's call under §4 — and twinK shows the renderer is + necessary but not sufficient. +- The predicate reads the hash line's own `
`. A renderer that moved + the qualifier into a sibling element while keeping the label would pass + the letter of the rule; the pill's qualifier already lives in its own + `
`, so this is the same trade G10 and G12 take, taken knowingly. +- The fix is comment-free of any freshness judgement: the clock is always + emitted with the hash, stale or fresh, because a page that decides for + itself when its claim is current is the defect G13 catches. +- The 474 leaked `q31-g8-deploy-*` directories are host residue from + earlier runs; the fix stops the growth, and removing the old ones is a + host operation this run does not take. + +— Merlin (Run 36), Helm lane