diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index 7e2a42e..422aa13 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -4432,3 +4432,69 @@ superseding `1d58b823…`), C5, C6 and the paired-run recompute — so only what full. Two of Merlin's own defects logged in the deliverable: the first four pointer checks read the wrong nesting level (five buggy green-run logs discarded and regenerated), and the paired-level before-control did not fire (non-vacuity proven at the gate level instead). + +**Status: VERIFIED from the pipe, 2026-10-11 22:2x–22:4xZ — `8bb88da` (deliverable + record, 4 files, +356/−1) and +`dded721` (landing append, +25).** Re-run from this host against the artifacts at those SHAs: all six identities are +byte-exact (`4e45021d…` collector, `4a442f62…` selftest, `8a477376…` / `9ce6a4e9…` the pre-Q33 pair, `b050b356…` / +`4f736f54…` the two scratch snapshots), line counts 720/929/705/868 as stated, **+24 added / 0 removed / 63 changed +leaves** between the two scratch snapshots with the only structural changes being the 24 moved `source_path` values +(the rest are `observed_at`, `generated_at`, `duration_seconds`, `rtt_seconds`), the live counts **20/20** profiles and +**4/4** members non-None, the patched census **36 `source_path` citations / 24 pointers / 0 null**, all six gate-log +digests matching to the hex digit, the paired script re-run here (**8 pairs, 0 differing leaf paths** under the gate's +scrub with no carve-out; pre-Q32 control red 1/8 — pair 2 this run, the red pair moves with the age boundary, so the +class is live; before-collector control 0/3, the vacuity he stated honestly), all three anonymous landing readbacks +HTTP 200 and `cmp`-identical with his own sha256 prefixes (13,828 / 9,517 / 509,002 B), the pre-append check-in +revision 77,976 B / `1105379f…`, and `recoveries/helm-g8-scrub.md` **+15 lines, additions only** — nothing above the +C5 append was touched. **The gate discriminates, measured here, not accepted:** the patched pair runs exit 0 / +`160 passed, 0 failed`; the pre-Q33 collector under the Q33 gate runs exit 1 / `151 passed, 9 failed` — the eight named +`G8 Q33:` checks plus the declared-key source check; the Q32 gate with its own collector is 150/0, which accounts for +the ten new checks exactly (8 named + pointer-normalise 1→2 + pre-Q32 control 1→2; the citation check was rewritten +12 → 36 paths). Consumer walk re-measured: renderer's `card()` is called with the six top-level blocks only +(`helm-render.py:366-371`) so `:264` prints citations; `helm-validate.py q33-after.json` → OK, exit 0; the schema's +`$defs.evidence` has no `additionalProperties: false`; the Mercury harness reads none of the changed fields. Live +snapshot **delta 0 across every leg**, including runs of the deployed gate: `aa842b0f…`, 14,039 B, mtime_ns +`1791479579475780303`; deployed bin unchanged (`ee0b36a8…`, `7ed1bca8…`, `5c67473d…`). **Three corrections of the +Helm lane's record, logged not deleted:** (C7) the selftest diff is **+108/−47**, not +107/−47 +(`git diff --no-index --numstat` and `difflib` agree; 868 + 108 − 47 = 929 = the file's line count); (C8) the +`grep -rln 'helm.snapshot'` census cannot see the renderer, which reads the snapshot through +`SNAPSHOT = Path("/root/.helm/data/snapshot.json")` (`helm-render.py:52`) and carries none of those literals — the +conclusion holds, the census expression under-reports; (C9) **the deployed gate does not "keep the Q32 carve-out"** — +`/root/.helm/bin/helm-selftest.py` (`7ed1bca8…`, 609 lines) has no `source_path=None`, no `SCRUB_KEYS`, no two-run +agreement check and no clock coverage (run here: `119 passed, 0 failed`), and the deployed collector is +**byte-identical** to his own `/root/crucible/q31/helm-collect-pregate.py` (`"source_path": latest_path or +str(entry)` at `:210`, `info["file"]` at `:493`). So the §4 `cp` is a **three-tick move** — collector `+38/−5` +(687 → 720 lines), gate `+322/−2` (609 → 929 lines, 119 → 160 checks) — and the adoption ask must say so, because it +approves a pair production has never run. **Corrections of my own, from the same pass:** the Q33 open line below named +"the ledger build" as a consumer of `evidence.source_path` — re-censused, no such consumer exists on this host (the +four bin scripts, `summarize.py`, the two harness files, one verify script and one fixture are all of them); and the +same line's "or the member's own check-in file" was self-contradictory, since that file *is* the pointer — the Helm +lane's check-ins-directory decision is the only reading that keeps one meaning per field, and it is accepted. +**One addition, mine:** the limit the deliverable left `unverified` (a null `latest_active_path`) is now measured, +non-destructively (collector imported, `PROFILES_DIR` rebound to a temp tree; live tree untouched, snapshot delta 0): +an empty profile and a profile with no subdirectories both emit `latest_active_path: null` with the directory +citation, a profile with one file emits the pointer. Residual, narrower than the limit: a *live* empty profile is still +unobserved — the branch is not. Precision note: on the pre-Q33 collector the two pointer non-vacuity checks pass +`0/0`, vacuously, since that collector emits neither key; their non-vacuity lives on the patched collector (20/20, +4/4). Verify logs and scripts: `/root/troupe-verify/q33/` (pipe's own area; the Crucible tree holds only Helm-lane +artifacts). + +--- + +## Q34 — Gate the pointer's null case *(collector-side gate; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q33 closed at `8bb88da`)* + +Q33's own residue, measured by the pipe the same tick it verified Q33. The patched collector emits +`evidence.latest_active_path: null` for a profile with no files under `sessions/` / `cron/output/` / `logs/`, and +`evidence.newest_checkin_file` is by construction never null (a member exists only because a check-in file exists). +The deliverable states the null case as its one `unverified` limit, and the gate cannot see it: every planted tree in +the Q33 behavioural checks has files, and the live collect is 20/20 non-None — so the two pointer non-vacuity checks +pass `0/0` vacuously on the pre-Q33 collector and the null branch is exercised by nothing in the suite. + +**Done means:** the gate plants, in its own scratch tree between two collects, a profile with a `sessions/` directory +and no files, and asserts (a) `latest_active_path` is `null` for that profile while (b) `evidence.source_path` stays +the profile directory and (c) the key is present rather than absent (a reader must be able to tell "no files" from +"field missing"); the member analogue is stated as unreachable by construction rather than asserted; the new checks +are **red on the pre-Q33 collector, green on the patched pair**, and reported as **N consecutive green invocations, +N ≥ 5**, each with its log digest. **Evidence:** the new check names with their pass/fail on both collectors, the +gate logs with digests, the before/after `evidence` blocks for the empty profile, and the live snapshot delta 0. +**Status: OPEN — named to the Helm lane.** Deliberately separate from Q33's record: Q33's deliverable is a finished +artifact and the adoption pair under §4 must not move under a second edit while Alexander is deciding on it.