diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index ee289ba..f8effe4 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -4336,3 +4336,51 @@ volatile field); the `evidence.source_path`-as-mutable-pointer design smell is a here. **Adoption ask (Alexander, §4):** `cp` the collector `8a477376…` plus the selftest **`9ce6a4e9…`** (superseding `1d58b823…`) into `/root/.helm/bin/` — Q31's adoption is unblocked behind it; deploy/schedule of collect+render still his call. + +**Status: VERIFIED from the pipe, 2026-10-11 20:0x–20:4xZ — `7e12c82` (deliverable + record, 3 files, +234) and +`83e9253` (landing append, +25).** Re-run from this host against the artifacts at those SHAs: the five identities +hold byte for byte (`8a477376…` collector, `9ce6a4e9…` Q32 selftest, `1d58b823…` pre-Q32, `ee0b36a8…` / +`7ed1bca8…` deployed, nothing deployed); the diff is **+115/−5**; the cited source lines (`:200`, `:208`, `:212`, +`:493`, `:495`, `:545`, `:587`, `:619`) are the lines cited; all six of his gate-log digests match to the hex digit +at 150 passed / 0 failed / `VERDICT: ALL GATES PASS`, G8 = **31 checks**; the non-vacuity counts reproduce from a +fresh collect (`observed_at` 36, `rtt_seconds` 1, `age_seconds` 5-of-6, `last_active_at` 20, `last_checkin_at` 4) and +so does the pointer census (**24** pointers / **12** stable citations, all non-None); all three landing readbacks are +HTTP 200 and `cmp`-identical (8,195 / `1aaf89eb…`, 499,559 / `51f41e7f…`, and the pre-append 68,890 / `9e92ed6e…` +read from `7e12c82:`); the ledger index is byte-exact (200 / 34,488 B / `4f764ef4…`); the live snapshot is delta 0 +(same sha256 *and* mtime_ns `1791479579475780303`) across all ten invocations. **Independent work, mine, because a +green run is not a property:** four more consecutive green invocations with their own log digests +(`0a62686e…`, `711234f5…`, `6aa543bf…`, `9868014b…`) — **ten consecutive green across two writers and two hosts** — +plus a paired-run comparison written from scratch (12 pairs, two real collects each, gate `_scrub` extracted by AST): +**0 differing leaf paths under the gate's scrub, 4 under the pre-Q32 scrub, 2/12 pairs red on +`sources/*/age_seconds` alone**; with his 8 pairs the total is **20 pairs, 0 disagreeing leaves**. **Two corrections, +logged not deleted:** (C5) §Limits' "the leaf path is named in the failure" is not what the gate does — a patched +collector carrying a new top-level clock field goes red (`149 passed, 1 failed`, exit 1, +`33192fce…`) but the message is the static string "two runs of the same collector disagree beyond the clocks" and the +leaf name appears **0 times** in the log; fails closed ✓, names the leaf ✗ (the naming lives only in his paired +script). (C6) the "841 hashed files" count still has no `find` expression beside it — re-measured here: +`find /root/.helm /root/crucible -type f` → **17,099** files, 0 unreadable, 0 matches for the dead +`60229227216fb4ab…` (the conclusion holds). Scoping note, not a defect: the enumeration covers the snapshot body; +`pin_stackchain()` (`:660`) also stamps `iso(now_utc())` into the held-copy manifest, a separate artifact on a +separate subcommand. **Q31 stays open** on two lines of `recoveries/helm-collector-run.md` (`:143-144`, `:229`) that +still name a digest resolving to no file — second raise, doc-only. Verify logs and scripts: `/root/troupe-verify/q32/`. + +--- + +## Q33 — Split the newest-file pointer out of `evidence.source_path` *(collector-side; opened 2026-10-11 by the pipe, per Q7's never-dry obligation — Q32 closed at `7e12c82`)* + +Q32's own residue, named in its deliverable and deliberately not fixed there because the collector was the artifact +under adoption. For a profile or a member, `evidence.source_path` (`helm-collect.py:200`/`:212`, +`:493`/`:495`) is a **pointer to the newest file at collect time** — mutable by construction, and today scrubbed by a +gate convention; every other `evidence.source_path` in the snapshot is a **stable citation** (24 vs 12 in the +20:4xZ collect). One field carries two meanings, so the gate has to special-case exactly the dicts that happen to +carry a live mtime reading, and a reader cannot tell a citation from a pointer without knowing which. + +**Done means:** the collector emits the pointer as its own named field (e.g. `latest_active_path`, or +`newest_file`) and `evidence.source_path` becomes a stable citation for every block — profile directory or the +member's own check-in file — so the Q32 pointer carve-out can be deleted from the scrub rather than documented; the +snapshot schema change is listed with before/after examples; the standing gate is re-run and reported as **N +consecutive green invocations, N ≥ 5**, with each log's digest. +**Evidence:** the diff; the before/after snapshot keys with values; the gate logs with digests; a paired-run +comparison showing zero differing leaf paths ≥5 pairs **without** the pointer carve-out; the live snapshot delta 0. +**Status: OPEN — named to the Helm lane.** A snapshot key rename touches every consumer of `evidence.source_path` +(the renderer and the ledger build among them), so it wants the consumer walk done in the same run, not after.