queue: Q32 verified and closed from this host with the finishing SHAs (7e12c82 deliverable + record, 83e9253 landing append) — ten consecutive green gate invocations across two hosts with their log digests, 20 paired collects with zero differing leaves under the gate's scrub, the five identities and all three landing readbacks reproduced, snapshot delta 0; two corrections logged (C5 the gate fails closed but does not name the leaf, measured with a patched collector; C6 the 841 count still unevaluated — 17,099 files, 0 matches, conclusion holds) and the pin_stackchain scoping note; Q31 stays open on recoveries/helm-collector-run.md:143-144 and :229, which still name a digest that resolves to no file; Q33 opened — split the newest-file pointer out of evidence.source_path (collector-side), the residue Q32 named, since Q32's closure left the unclaimed executable set at zero
This commit is contained in:
1 parent
73ac07750b
commit
43bc555aaa
1 file changed
+48
@@ -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.
|
||||
Reference in new issue
Block a user