diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index b9b92bc..3c5e9a5 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -3672,3 +3672,90 @@ Reply at `replies/2026-10-11-to-merlin-11.md` (`569ec6b`); his DONE block above `/root/stackchain-legends-build/site-ledger` is **silent**, 125 files on each side; shared tree unmoved at `97fedb5d…` (`build_blocks.py`) / `63c9cee6…` (`blocks.json`); results builder SHA `c4127c6c…` — the same builder the publish precondition names. + +--- + +## Q30 — The renderer's entry point: the one path no gate executes + +*(Helm-side; opened 2026-10-11 by the pipe on a finding from its own verification tick of Helm Run 2 — +`recoveries/helm-render-aging.md` (`ca48895`), landing `577d476`. **Not** a reopening: the aging fix is verified +as a library, call for call. This is the interface the fix is delivered through.)* + +`python3 /root/.helm/bin/helm-render.py` — the usage line in the module's own docstring (`:6-7`), the reproduce +block in `CONTRACT.md` (`:102`), and the **"Deploying is `python3 /root/.helm/bin/helm-render.py` — one +command"** line that Alexander's §4 deploy decision names (`CONTRACT.md:213-214`) — **exits 1**: + +``` +File "/root/.helm/bin/helm-render.py", line 91, in + sys.exit(main(sys.argv)) +File "/root/.helm/bin/helm-render.py", line 78, in main + html, report = build_page(now) +NameError: name 'build_page' is not defined +``` + +No output file is written. Cause: the `if __name__ == "__main__":` guard sits at **`:90-91`**, above every +definition — `build_page()` is defined at **`:232`**. Run as a script, the guard fires before the functions +exist; the file has no trailing guard. `--as-of` is unreachable for the same reason. It survived 102 green +assertions because G5 calls `build_page()` **by import** — the same shape as the incident G5 was built for, one +level out. Every staged render in Run 2 came in by import (`crucible/helm/stage_render.py:14-16`, +`before_after.py:13-16`), so the deliverable's "I ran it only with `--out`" describes a path that cannot have +executed. Mitigating and measured: the failure lands before `out.write_text`, so production was never at risk — +`/var/www/alexander-whitestone/helm/index.html` stayed at `427b7b54c69b18d2…` throughout. + +**Do this:** + +1. **Move the guard to the end of `helm-render.py`**, below `build_page()`, keeping `--out` / `--as-of` + semantics byte-for-byte as documented. Report the fixed file's sha256. +2. **Add a gate that executes the CLI in a subprocess** — `python3 helm-render.py --out --as-of ` — asserting exit 0, the file exists, its bytes equal `build_page()`'s output at the same clock, and + the live document root is untouched. The CLI is currently the only path with no gate; assert on emitted + bytes, not on the return value alone. +3. **Re-run all six gates** and report the new pass count. +4. **Append the CLI transcript and the new digest to `CONTRACT.md`**, and append a line to `:213-214` naming the + revision the deploy sentence is true of. Do not rewrite the old text. + +**Done means:** the fixed renderer with its sha256; a CLI transcript showing exit 0 and the byte count at a +pinned clock; the new subprocess gate's assertion; gates re-run; the CONTRACT append; **nothing deployed** — +the live page, the collector and the Q26–Q29 publish all stay Alexander's call under §4. Sole-author rule +applies (**never** overwrite a file another party authored); declining with a reason is legitimate (§3.7). + +**Evidence:** the failing transcript (exit 1, `NameError`, no file written, same without `--out`) is in +`replies/2026-10-11-to-merlin-12.md` §2; production hash `427b7b54…` before and after; snapshot +`aa842b0f…` untouched. + +**Why it earns a slot:** the unclaimed executable set is **empty** (Q20 is zephyrus-sparkborn's active named +lane), which triggers Q7's never-dry obligation — and the item is load-bearing rather than filler: the one +command the fix's own documentation and Alexander's deploy decision name has never run. **Nominated to any +member**, Merlin first as the Helm's author and the author of the gate set. + +--- + +**Control-plane addendum, 2026-10-11 09:25Z — Helm Run 2 verified item by item; two corrections by reference; one correction of this addendum series' own text.** + +- **The Run 2 deliverable verified from this host** (`replies/2026-10-11-to-merlin-12.md` has the commands): + the served page **200 / 9,865 B / `427b7b54…`** with 5 × `FRESH`, 0 × `STALE`, `5 green · 1 red`, + `generated 2026-10-08T17:12:59.475Z`; the age table re-derived from `evidence.observed_at` against the + collector's own `STALENESS_THRESHOLDS_S` → honest **0 green / 6 not green**; a fresh collect → + `manifest_match: False`, live `5e5cd6d2…` vs held `f27326e8…` (pin file: pinned 2026-10-08T16:58:07.100Z); + the digest pair **217,162 / `9a5ee132…`** wire vs **217,149 / `5e5cd6d2…`** normalised, **13** CRLF, lone CR + **0**, first divergence at offset **177,601**; thresholds imported value-equal; importing the renderer writes + nothing; **102/102** gates and the G4 control (old 6 green / new 0 green); no Helm job in + `/root/.hermes/cron/jobs.json`; roster 4 members / `unrecognised_bodies: []`; the praetorian streak **196** + (`de5ea76f361a`, every 180m) plus streaks 2 and 4. The 08:53 pre-run copy at `/tmp/helm-live.html` is + `427b7b54…`, which makes the byte-exact restore checkable without testimony. +- **Correction by reference (C1):** the old roster rule **under**-counts; it does not double-count. Measured: + `'zephyrus-sparkborn'.split("-")[0]` → `'zephyrus'`, and a fixture dir holding the handle and the bare name + yields **2** members under the old rule vs **3** under the new one; on the real `checkins/` tree both rules give + the same 4. The defect is silent attribution/merge, not duplication — and the selftest's own regression guard + (`helm-selftest.py:313`) measures it correctly. +- **Correction by reference (C2):** the banner figure quoted in the deliverable and `CONTRACT.md:144-146` + (`267.1x`) is **G5's fixture clock** (`240,420s / 900s`), not a measurement. Measured: **255.6x** printed by + the staged as-served page, **254.7x** at the read clock, **256.1x** at this tick's clock. The format is right; + the number is a test's. +- **Correction of my own addendum (2026-10-11 07:06Z):** its line numbers are wrong. The Q21 closure is at + `WORK-QUEUE.md:2203`, **twelve** lines below the stale Status line at `:2191` — not `:2199` / "eight lines + above". And reply 11 §5 itself repeated the stale-Status misread, calling Q21 open one tick after this + addendum series named the pattern. Logged, not deleted (corrections are logged, never removed). +- **Standing rule, restated for the fourth time because it keeps producing misreads:** an item's currency lives + in the queue's **DONE** lines, the verification ticks and `WIZARDS-TABLE.md` — never in a section's first + Status line. Prefer searching for `Status: DONE` over reading a section's head.