From c52175000401fa7d8aab5307eed095f067241e21 Mon Sep 17 00:00:00 2001 From: ledger Date: Sun, 25 Oct 2026 22:19:55 +0000 Subject: [PATCH] ledger: work-queue census (Q item extraction from WORK-QUEUE.md) --- .../ledger/2026-10-25-workqueue-census.md | 65 +++++++++++++++++ .../ledger/2026-10-25-workqueue-census.tsv | 60 ++++++++++++++++ wizard-work/ledger/CHECK-workqueue-census | 17 +++++ wizard-work/ledger/build_census_md.py | 26 +++++++ .../ledger/extract_workqueue_census.py | 69 +++++++++++++++++++ 5 files changed, 237 insertions(+) create mode 100644 wizard-work/ledger/2026-10-25-workqueue-census.md create mode 100644 wizard-work/ledger/2026-10-25-workqueue-census.tsv create mode 100644 wizard-work/ledger/CHECK-workqueue-census create mode 100644 wizard-work/ledger/build_census_md.py create mode 100644 wizard-work/ledger/extract_workqueue_census.py diff --git a/wizard-work/ledger/2026-10-25-workqueue-census.md b/wizard-work/ledger/2026-10-25-workqueue-census.md new file mode 100644 index 0000000..0187d94 --- /dev/null +++ b/wizard-work/ledger/2026-10-25-workqueue-census.md @@ -0,0 +1,65 @@ +# Work-queue census — extraction of every numbered Q item from WORK-QUEUE.md + +Source: `WORK-QUEUE.md` (rows = `^## Q — ` headings, count 59). + +| Q | Title | Status | Target | +|---|---|---|---| +| 1 | Recover the fifteen silent rooms | CLOSED — 0/15 recovered, and every public avenue is now exhausted with receipts.** | recoveries/silent-rooms.md | +| 2 | Chase the one dead link | DONE — recovered.** `recoveries/dead-link.md` (`3ca3d3c`, zephyrus-sparkborn) found the `x.com` snapshot | recoveries/dead-link.md | +| 3 | Independent audit of the published ledger | DONE — both passes complete (`2ebcbe7` pass 1, `6f31cde` pass 2, zephyrus-sparkborn; material `2118b3e`). | recoveries/ledger-link-inventory.md | +| 4 | Falsification pass | DONE — `recoveries/falsification-pass.md` (`f50f052`, zephyrus-sparkborn), all three verdicts re-verified | recoveries/falsification-pass.md | +| 8 | Summary fidelity: does each entry's machine-written summary overstate its article? | pilot CLOSED at `dcf91a1` (zephyrus-sparkborn), corrected at `9cc6879`; the full sweep is CLOSED at `f1fe38d` (2026-10-06) — 91/91, 1,101 rows, verified independently from the published file. The one contested grade was ruled and applied by zephyrus at `f122f8e` (`082` clause 3 → `contradicted`) and both batch-8 one-liners landed in the same commit, so the item owes nothing further from him on | recoveries/quote-fidelity-live.md | +| 5 | Issue triage in the organisation's public repos | re-scoped 2026-09-26 (reply 08 §5) after a census, because as written it invites busywork.** Measured over | checkins/2026-10-07-cassian-q5-recount.md | +| 6 | A public guide to checking this archive | DONE at `8bd0b09` (Merlin, 2026-10-08T17:28:47Z) — verified from this host figure by figure; | docs/how-to-check-this-archive.md | +| 7 | Propose the next items | satisfied for the 2026-09-25 cycle.** Zeph's three proposals (`2a0cb01`) are now queue items: the Q8 | checkins/2026-10-01-zephyrus.md | +| 9 | Independent QC of the sovereign music candidates | unclaimed. Pre-verified by Timmy against the delivered files — record `recoveries/music-master-verification.md` | recoveries/music-master-verification.md | +| 10 | Summary fidelity for the non-magazine entries | COMPLETE 2026-10-10 (verified from raw sources; closure record below). Originally claimed by zephyrus-sparkborn at `3c9ad5b` (2026-10-07, `checkins/2026-10-07-zephyrus.md` §3). | recoveries/summary-fidelity-nonmagazine.md | +| 11 | Close the eight pass-2 date mismatches | DONE — `recoveries/ledger-date-closure.md`, Merlin, 2026-10-09. 8 / 8 resolved, all | recoveries/ledger-audit-pass2.md | +| 12 | Are the evidence tiers earned? | DONE — `recoveries/evidence-tier-audit.md`, Merlin, 2026-10-10. 18/18 `justified`, 0 `too | recoveries/evidence-tier-audit.md | +| 13 | Publish the archive-side wording fixes, one at a time | ** 1 of 8 has a decision and staged correction (`magazine-091`; reply 09 §3), but its decided note carries | | +| 14 | Put the Inbox on `alexanderwhitestone.com` behind a gate | DONE — finished by `616794c` (2026-09-26), then re-measured by a later run the same day instead of being | | +| 15 | Stop the monitor from waking on the pipe's own writes | DONE — 2026-09-26 ≈19:05 UTC.** Fixed in `/root/.hermes/scripts/troupe_pipe_monitor.py` (outside this | checkins/README.md | +| 16 | Per-platform ATS gate census | draft v0.1 landed `f29425a` (`career-lane/ats-gate-census-draft.md`, 2026-10-01; check-in `2f83e08`); | checkins/2026-10-02-zephyrus-01.md | +| 17 | Employer-side AI-authorship refusal gates | | checkins/2026-10-03-zephyrus-03.md | +| 18 | Employer-side lead intake must be deduped against the prepared index | | checkins/2026-10-05-zephyrus.md | +| 19 | Three proposed members (local Mac wizard, Grok, Mistral) | RESOLVED — provisional (2026-10-06).** | checkins/2026-10-06-zephyrus-wizards.md | +| 20 | Excerpt fidelity and placement for the 91 magazine entries | DONE — `recoveries/excerpt-placement-audit.md` (12,914 B) and `recoveries/excerpt-placement-rows.md` | recoveries/quote-fidelity-live.md | +| 21 | Does every quoted excerpt resolve at the URL it is printed against? | open and unclaimed. Opened by the pipe 2026-10-10** because Q12 closed at `67b892d` and the unclaimed | recoveries/excerpt-binding-audit.md | +| 22 | Do the named-but-unlinked sources resolve? | DONE — `recoveries/named-source-liveness.md`, Merlin, 2026-10-10. 28 fetches → 27 distinct | recoveries/named-source-liveness.md | +| 23 | The prose-named sources the `@` token rule cannot see | DONE 2026-10-10 — `recoveries/named-source-liveness-unlinked.md` (Merlin), verified from the published file this tick (control plane).** | recoveries/named-source-liveness-unlinked.md | +| 24 | The Q13 fix pack: stage every verified live-page fix as one reviewable approval | open and unclaimed. Opened by the pipe 2026-10-10** because Q23 closed at `8b56abe` and the unclaimed | recoveries/evidence-tier-audit.md | +| 25 | A prose-anchor convention for the ledger build | DONE — `recoveries/prose-anchor-convention.md`, Merlin, 2026-10-10. Designed, prototyped and | recoveries/prose-anchor-convention.md | +| 26 | Make the silent token classes loud, and measure the fifth slot | DONE — `recoveries/prose-anchor-hardening.md`, Merlin, 2026-10-10→11 (~00:20–00:24 UTC). | recoveries/prose-anchor-hardening.md | +| 27 | A fixture at every render site: make the token sentinel's coverage total | DONE 2026-10-11 — `recoveries/render-site-coverage.md` (Merlin). 32 sites: 28 covered by fixture, 4 structural exclusions; 35 fixtures, every negative writes 0 files; the scope clause closed with option (a), all four token classes now pre-write; no-token build still byte-identical at `91ecf6bf`.** | recoveries/render-site-coverage.md | +| 28 | The channels the entry walk cannot see: state the guarantee, then cover what it cannot reach | DONE 2026-10-11 — `recoveries/render-site-channels.md` (Merlin), scratch tree | recoveries/render-site-channels.md | +| 29 | The guards that are not the walk: what protects a page when the value is not a token | DONE 2026-10-11 — `recoveries/render-site-guards.md` (Merlin), scratch tree `/root/crucible/q29/`. 22 fixtures plus the control, every negative or escape claim measured against the emitted byte; the second guarantee stated in one sentence; one finding: an unguarded `int(sats)` can still leave a partial tree (2 files).** | recoveries/render-site-guards.md | +| 30 | The renderer's entry point: the one path no gate executes | | recoveries/helm-render-aging.md | +| 31 | The collector's entry point: the sibling path no gate has executed either | DONE at Merlin's Run 6 (2026-10-11 ≈13:19–13:35Z) — deliverable `recoveries/helm-collector-run.md`; the collector's entry point is executed, its destination is gated, and G8 asserts it.** The item's four steps: (1) the two safe legs run — `--dry-run --skip-tests` exit 0 / 15,187 B pure-JSON stdout and `--out ` exit 0 / 15,187 B, both with the live snapshot unchanged (`aa842b0f…`); the two bodies are the same measurement (only `observed_at` clocks and one `rtt_seconds` differ, `q31-compare.py`). (2) **The destination rule: `SNAPSHOT_PATH` is gated behind an explicit `--deploy`** — the same shape as the renderer's `OUT_DEFAULT` gate, so both entry points now behave alike; `--dry-run` is never gated (it writes nothing), a scratch `--out` is the default expectation, and the live path (bare default *or* explicit `--out`, matched by `.resolve()`) is refused at exit 2 **before any collector runs** (0.13 s refusal vs ~1.9 s collect). Gated collector `60229227216fb4ab…` (701 lines / 28,808 B). (3) **Gate G8 — the collector's CLI in a subprocess, 18 assertions** → `helm-selftest: 137 passed, 0 failed`, VERDICT: ALL GATES PASS; the gate discriminates (pre-gate `ee0b36a8…` with `SNAPSHOT_PATH` patched to scratch writes its default bare; gated refuses). (4) **`email` UNREACHABLE is correct** — `himalaya` is ABSENT on PATH and both config paths are absent, so `collect_email()` fails closed with `himalaya unavailable: command not found: himalaya` and lands in `red_sources`, never `green`. **An incident, logged first in the deliverable §6:** the first negative control ran the pre-gate revision bare against the live default and overwrote the live snapshot; restored byte-exact from a pre-run `snap-before.json` (`aa842b0f…`, 14,039 B, mtime back to `2026-10-08T17:12:59.475780303Z`), and the control now patches `SNAPSHOT_PATH` before any run. **Nothing deployed** — the gated collector and G8 selftest are scratch-local in `/root/crucible/q31/`; the deployed `helm-collect.py` is unchanged at `ee0b36a8…` and `helm-selftest.py` at `7ed1bca8…` (still 119 passed). Adoption is a §4 deploy decision, Alexander's, the same gate Q26–Q30 state. Mercury's day-3 unit is Q31's first slice (the two safe legs); this run executed them first and Mercury's `/tmp/mercury-q31/` was empty at 13:29Z, so no duplication occurred — the unit is satisfied here and stays open for Mercury to land his own artifact. | recoveries/helm-collector-run.md | +| 32 | The G8 two-run agreement check is nondeterministic: `age_seconds` is not scrubbed | OPEN — named to the Helm lane**, ahead of the Q31 `cp` decision so that the gate that ships is the one that | recoveries/helm-g8-scrub.md | +| 33 | Split the newest-file pointer out of `evidence.source_path` | OPEN — named to the Helm lane.** A snapshot key rename touches every consumer of `evidence.source_path` | recoveries/helm-g8-scrub.md | +| 34 | Gate the pointer's null case | DONE 2026-10-12 — `recoveries/helm-null-gate.md` (Merlin), scratch tree `/root/crucible/q34/`.** | recoveries/helm-null-gate.md | +| 35 | The gate must refuse a subject collector that carries no destination rule | DONE — `recoveries/helm-precondition-gate.md` (8,261 B / sha256 | recoveries/helm-precondition-gate.md | +| 36 | The monitor cannot see a counterparty write that carries this pipe's identity | DONE — the rule holds, and the predicted transition arrived exactly as stated.** Measured at the first | checkins/2026-10-12-merlin.md | +| 37 | The identity rule closes one class, not the class | | | +| 38 | The behavioural destination guard | DONE — `recoveries/helm-behavioural-guard.md` (10,232 B), Merlin, 2026-10-12T06:5x–07:1xZ, this host.** | recoveries/helm-behavioural-guard.md | +| 38 | The behavioural destination guard | the deliverable is verified and the item is DONE, and its protective claim is FALSIFIED. It is not adoptable as it stands.** Finished by `0776480` (guard + queue block + Run 4 check-in) and `4ed1da9` (landing evidence); verified from this host by reply 21, `replies/2026-10-12-to-merlin-21.md`. | | +| 39 | The Q38 guard's admission admits a writer, and its legs run the unrewritten subject | DONE — `recoveries/helm-destination-guard-fix.md` (12,253 B), Merlin, 2026-10-12, scratch tree `/root/crucible/q39/`. Fixed gate `9b09f328…` (1,412 lines / 77,704 B, +309/−38 against Q38's `74aba348…`); subject collector byte-identical at `4e45021d…`; nothing deployed, no `cp` into `/root/.helm/bin/`, live snapshot `aa842b0f…` delta 0 across every run.** | recoveries/helm-destination-guard-fix.md | +| 40 | the deployed gate admits all five negatives, and has no admission path at all | DONE — `recoveries/helm-deployed-gate-admission.md` (5,633 B / sha256 | recoveries/helm-deployed-gate-admission.md | +| 37 | claimed by this pipe; first increment landed (the v1.3 census) | OPEN and claimed by the pipe (Merlin's §Next 2 read it correctly; it is this lane's tooling). Landed this tick:** the `branch-head` census line in `troupe_pipe_monitor.py` v1.3, sha256 `bb532da8c4f01b98eab4034ce74dc76b0e3939508bfd6cadd5d3d650020449f8`; v1.2 preserved at `/root/troupe-verify/q37/troupe_pipe_monitor.py.v1.2.bak` (`ce3950b5…`), reversible with one `cp`; record `recoveries/monitor-identity-census.md`. | recoveries/monitor-identity-census.md | +| 43 | The legs run the rewritten subject: prevention, not detect-and-restore | DONE — `recoveries/helm-leg-sandbox.md` (13,561 B), Merlin, 2026-10-12. Scratch tree `/root/crucible/q43/`; nothing deployed, no `cp` into `/root/.helm/bin/`, `decisions/` and `inbox/` untouched.** | recoveries/helm-leg-sandbox.md | +| 44 | The pin class: redirect every constant composed from the live data root, not only `SNAPSHOT_PATH` | DONE 2026-10-12 — `recoveries/helm-root-redirect.md` (Merlin, Helm lane); the closure block is at the foot | recoveries/helm-root-redirect.md | +| 48 | The runtime-resolution redirect: close the class Q45's literals cannot see | DONE 2026-10-13 — `recoveries/helm-runtime-redirect.md` (Merlin, Helm lane), scratch tree | recoveries/helm-runtime-redirect.md | +| 49 | The runtime-resolved root's live write path: name it, reproduce it, then close it | open and unclaimed. Opened by the pipe 2026-10-13**, because the Helm lane's executable set is empty | recoveries/helm-resolved-root-live-path.md | +| 57 | Bind a standup entry to the bytes it grades | open and unclaimed. Opened by the pipe 2026-10-24; null's lane.** | docs/queue-index.md | +| 58 | The lane-activity instrument reads a surface that was retired on 2026-10-16 | open and unclaimed. Opened by the pipe 2026-10-24; sol's lane.** | | +| 59 | beam's jump hash matches the C reference, and not one test would notice if it stopped | open and unclaimed. Beam's lane.** | | +| 60 | Every truncated identifier in the archive: which ones can still be checked | open and unclaimed.** Opened by the pipe 2026-10-24. Anyone's lane; zephyrus has first | checkins/2026-10-24-zephyrus.md | +| 61 | beam's `topo_sort` drops generator dependencies, and its gate imports a copy outside the repo | open and unclaimed.** Opened by the pipe 2026-10-24. beam's lane by authorship; anyone may take it. | | +| 62 | 147 committed gates read `/root/.hermes/wizard-outputs`; two of them cannot pass from a clone | open and unclaimed.** No lane owns it by authorship; anyone may take it, one file per commit. | | +| 63 | Six committed verifiers print PASS while asserting nothing, and eight are run by no gate | open and unclaimed.** No lane owns it; anyone may take it, one file per commit. | docs/queue-index.md | +| 66 | beam's `search_count` advertises overlapping occurrences and no test would notice if it stopped | open and unclaimed.** Beam's lane by authorship; the remedy is one assertion, | docs/queue-index.md | +| 67 | forge's probe-refactor verifier certifies a refactor that restores the defect it removes | open and unclaimed.** Forge's lane by authorship; the remedy is four small edits | | +| 68 | beam's `topo_levels` drops a one-shot `edges` iterable, silently, and its new suite both certifies a host copy and takes the lane's gate down | closed at `5a43291` (volt, 2026-10-25); the closure record sits at the foot of this file.** Beam's lane by authorship; anyone may take it. Done means: `edges` | docs/queue-index.md | +| 69 | 116 committed files under `wizard-work/` name the absolute path `/root/troupe-standup`, so 64 gates grade the author's working tree instead of the checkout they were asked about | open and unclaimed.** One file per commit, each needing the repo-relative-or-stated decision; `wizard-work/ledger` is the entry to take first because its artifact is otherwise correct and its gate is the one measured green-on-wrong. | docs/queue-index.md | +| 70 | beam's `test_trie.py` is invisible to the lane gate (73 new lines, 0 cells collected), and `count_prefix` is a lifetime insert counter that survives `delete` | open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: `replies/2026-10-25-to-zephyrus-102.md` §2; probes `/root/.hermes/cache/scratch/trie_probe.py`; clone `/root/tcheck-q68` at `dbc2c4f`. Nothing from `inbox/` is quoted. No other lane's file was edited. | | +| 71 | ledger's `commits-table.md` has no verifier, and row 4 writes `kernel_git` where the source URL has `kernel/git` | closed at `b9e3780` and the closure commit (volt, 2026-10-25); the closure record sits at the foot of this file.** Ledger's lane by authorship; anyone may take it. Evidence: `replies/2026-10-25-to-zephyrus-102.md` §3; response body retained at `/tmp/torvalds.json` on this host (re-fetchable, one request). Nothing from `inbox/` is quoted. No other lane's file was edited. | docs/queue-index.md | diff --git a/wizard-work/ledger/2026-10-25-workqueue-census.tsv b/wizard-work/ledger/2026-10-25-workqueue-census.tsv new file mode 100644 index 0000000..8afbde0 --- /dev/null +++ b/wizard-work/ledger/2026-10-25-workqueue-census.tsv @@ -0,0 +1,60 @@ +Q Title Status Target +1 Recover the fifteen silent rooms CLOSED — 0/15 recovered, and every public avenue is now exhausted with receipts.** recoveries/silent-rooms.md +2 Chase the one dead link DONE — recovered.** `recoveries/dead-link.md` (`3ca3d3c`, zephyrus-sparkborn) found the `x.com` snapshot recoveries/dead-link.md +3 Independent audit of the published ledger DONE — both passes complete (`2ebcbe7` pass 1, `6f31cde` pass 2, zephyrus-sparkborn; material `2118b3e`). recoveries/ledger-link-inventory.md +4 Falsification pass DONE — `recoveries/falsification-pass.md` (`f50f052`, zephyrus-sparkborn), all three verdicts re-verified recoveries/falsification-pass.md +8 Summary fidelity: does each entry's machine-written summary overstate its article? pilot CLOSED at `dcf91a1` (zephyrus-sparkborn), corrected at `9cc6879`; the full sweep is CLOSED at `f1fe38d` (2026-10-06) — 91/91, 1,101 rows, verified independently from the published file. The one contested grade was ruled and applied by zephyrus at `f122f8e` (`082` clause 3 → `contradicted`) and both batch-8 one-liners landed in the same commit, so the item owes nothing further from him on recoveries/quote-fidelity-live.md +5 Issue triage in the organisation's public repos re-scoped 2026-09-26 (reply 08 §5) after a census, because as written it invites busywork.** Measured over checkins/2026-10-07-cassian-q5-recount.md +6 A public guide to checking this archive DONE at `8bd0b09` (Merlin, 2026-10-08T17:28:47Z) — verified from this host figure by figure; docs/how-to-check-this-archive.md +7 Propose the next items satisfied for the 2026-09-25 cycle.** Zeph's three proposals (`2a0cb01`) are now queue items: the Q8 checkins/2026-10-01-zephyrus.md +9 Independent QC of the sovereign music candidates unclaimed. Pre-verified by Timmy against the delivered files — record `recoveries/music-master-verification.md` recoveries/music-master-verification.md +10 Summary fidelity for the non-magazine entries COMPLETE 2026-10-10 (verified from raw sources; closure record below). Originally claimed by zephyrus-sparkborn at `3c9ad5b` (2026-10-07, `checkins/2026-10-07-zephyrus.md` §3). recoveries/summary-fidelity-nonmagazine.md +11 Close the eight pass-2 date mismatches DONE — `recoveries/ledger-date-closure.md`, Merlin, 2026-10-09. 8 / 8 resolved, all recoveries/ledger-audit-pass2.md +12 Are the evidence tiers earned? DONE — `recoveries/evidence-tier-audit.md`, Merlin, 2026-10-10. 18/18 `justified`, 0 `too recoveries/evidence-tier-audit.md +13 Publish the archive-side wording fixes, one at a time ** 1 of 8 has a decision and staged correction (`magazine-091`; reply 09 §3), but its decided note carries +14 Put the Inbox on `alexanderwhitestone.com` behind a gate DONE — finished by `616794c` (2026-09-26), then re-measured by a later run the same day instead of being +15 Stop the monitor from waking on the pipe's own writes DONE — 2026-09-26 ≈19:05 UTC.** Fixed in `/root/.hermes/scripts/troupe_pipe_monitor.py` (outside this checkins/README.md +16 Per-platform ATS gate census draft v0.1 landed `f29425a` (`career-lane/ats-gate-census-draft.md`, 2026-10-01; check-in `2f83e08`); checkins/2026-10-02-zephyrus-01.md +17 Employer-side AI-authorship refusal gates checkins/2026-10-03-zephyrus-03.md +18 Employer-side lead intake must be deduped against the prepared index checkins/2026-10-05-zephyrus.md +19 Three proposed members (local Mac wizard, Grok, Mistral) RESOLVED — provisional (2026-10-06).** checkins/2026-10-06-zephyrus-wizards.md +20 Excerpt fidelity and placement for the 91 magazine entries DONE — `recoveries/excerpt-placement-audit.md` (12,914 B) and `recoveries/excerpt-placement-rows.md` recoveries/quote-fidelity-live.md +21 Does every quoted excerpt resolve at the URL it is printed against? open and unclaimed. Opened by the pipe 2026-10-10** because Q12 closed at `67b892d` and the unclaimed recoveries/excerpt-binding-audit.md +22 Do the named-but-unlinked sources resolve? DONE — `recoveries/named-source-liveness.md`, Merlin, 2026-10-10. 28 fetches → 27 distinct recoveries/named-source-liveness.md +23 The prose-named sources the `@` token rule cannot see DONE 2026-10-10 — `recoveries/named-source-liveness-unlinked.md` (Merlin), verified from the published file this tick (control plane).** recoveries/named-source-liveness-unlinked.md +24 The Q13 fix pack: stage every verified live-page fix as one reviewable approval open and unclaimed. Opened by the pipe 2026-10-10** because Q23 closed at `8b56abe` and the unclaimed recoveries/evidence-tier-audit.md +25 A prose-anchor convention for the ledger build DONE — `recoveries/prose-anchor-convention.md`, Merlin, 2026-10-10. Designed, prototyped and recoveries/prose-anchor-convention.md +26 Make the silent token classes loud, and measure the fifth slot DONE — `recoveries/prose-anchor-hardening.md`, Merlin, 2026-10-10→11 (~00:20–00:24 UTC). recoveries/prose-anchor-hardening.md +27 A fixture at every render site: make the token sentinel's coverage total DONE 2026-10-11 — `recoveries/render-site-coverage.md` (Merlin). 32 sites: 28 covered by fixture, 4 structural exclusions; 35 fixtures, every negative writes 0 files; the scope clause closed with option (a), all four token classes now pre-write; no-token build still byte-identical at `91ecf6bf`.** recoveries/render-site-coverage.md +28 The channels the entry walk cannot see: state the guarantee, then cover what it cannot reach DONE 2026-10-11 — `recoveries/render-site-channels.md` (Merlin), scratch tree recoveries/render-site-channels.md +29 The guards that are not the walk: what protects a page when the value is not a token DONE 2026-10-11 — `recoveries/render-site-guards.md` (Merlin), scratch tree `/root/crucible/q29/`. 22 fixtures plus the control, every negative or escape claim measured against the emitted byte; the second guarantee stated in one sentence; one finding: an unguarded `int(sats)` can still leave a partial tree (2 files).** recoveries/render-site-guards.md +30 The renderer's entry point: the one path no gate executes recoveries/helm-render-aging.md +31 The collector's entry point: the sibling path no gate has executed either DONE at Merlin's Run 6 (2026-10-11 ≈13:19–13:35Z) — deliverable `recoveries/helm-collector-run.md`; the collector's entry point is executed, its destination is gated, and G8 asserts it.** The item's four steps: (1) the two safe legs run — `--dry-run --skip-tests` exit 0 / 15,187 B pure-JSON stdout and `--out ` exit 0 / 15,187 B, both with the live snapshot unchanged (`aa842b0f…`); the two bodies are the same measurement (only `observed_at` clocks and one `rtt_seconds` differ, `q31-compare.py`). (2) **The destination rule: `SNAPSHOT_PATH` is gated behind an explicit `--deploy`** — the same shape as the renderer's `OUT_DEFAULT` gate, so both entry points now behave alike; `--dry-run` is never gated (it writes nothing), a scratch `--out` is the default expectation, and the live path (bare default *or* explicit `--out`, matched by `.resolve()`) is refused at exit 2 **before any collector runs** (0.13 s refusal vs ~1.9 s collect). Gated collector `60229227216fb4ab…` (701 lines / 28,808 B). (3) **Gate G8 — the collector's CLI in a subprocess, 18 assertions** → `helm-selftest: 137 passed, 0 failed`, VERDICT: ALL GATES PASS; the gate discriminates (pre-gate `ee0b36a8…` with `SNAPSHOT_PATH` patched to scratch writes its default bare; gated refuses). (4) **`email` UNREACHABLE is correct** — `himalaya` is ABSENT on PATH and both config paths are absent, so `collect_email()` fails closed with `himalaya unavailable: command not found: himalaya` and lands in `red_sources`, never `green`. **An incident, logged first in the deliverable §6:** the first negative control ran the pre-gate revision bare against the live default and overwrote the live snapshot; restored byte-exact from a pre-run `snap-before.json` (`aa842b0f…`, 14,039 B, mtime back to `2026-10-08T17:12:59.475780303Z`), and the control now patches `SNAPSHOT_PATH` before any run. **Nothing deployed** — the gated collector and G8 selftest are scratch-local in `/root/crucible/q31/`; the deployed `helm-collect.py` is unchanged at `ee0b36a8…` and `helm-selftest.py` at `7ed1bca8…` (still 119 passed). Adoption is a §4 deploy decision, Alexander's, the same gate Q26–Q30 state. Mercury's day-3 unit is Q31's first slice (the two safe legs); this run executed them first and Mercury's `/tmp/mercury-q31/` was empty at 13:29Z, so no duplication occurred — the unit is satisfied here and stays open for Mercury to land his own artifact. recoveries/helm-collector-run.md +32 The G8 two-run agreement check is nondeterministic: `age_seconds` is not scrubbed OPEN — named to the Helm lane**, ahead of the Q31 `cp` decision so that the gate that ships is the one that recoveries/helm-g8-scrub.md +33 Split the newest-file pointer out of `evidence.source_path` OPEN — named to the Helm lane.** A snapshot key rename touches every consumer of `evidence.source_path` recoveries/helm-g8-scrub.md +34 Gate the pointer's null case DONE 2026-10-12 — `recoveries/helm-null-gate.md` (Merlin), scratch tree `/root/crucible/q34/`.** recoveries/helm-null-gate.md +35 The gate must refuse a subject collector that carries no destination rule DONE — `recoveries/helm-precondition-gate.md` (8,261 B / sha256 recoveries/helm-precondition-gate.md +36 The monitor cannot see a counterparty write that carries this pipe's identity DONE — the rule holds, and the predicted transition arrived exactly as stated.** Measured at the first checkins/2026-10-12-merlin.md +37 The identity rule closes one class, not the class +38 The behavioural destination guard DONE — `recoveries/helm-behavioural-guard.md` (10,232 B), Merlin, 2026-10-12T06:5x–07:1xZ, this host.** recoveries/helm-behavioural-guard.md +38 The behavioural destination guard the deliverable is verified and the item is DONE, and its protective claim is FALSIFIED. It is not adoptable as it stands.** Finished by `0776480` (guard + queue block + Run 4 check-in) and `4ed1da9` (landing evidence); verified from this host by reply 21, `replies/2026-10-12-to-merlin-21.md`. +39 The Q38 guard's admission admits a writer, and its legs run the unrewritten subject DONE — `recoveries/helm-destination-guard-fix.md` (12,253 B), Merlin, 2026-10-12, scratch tree `/root/crucible/q39/`. Fixed gate `9b09f328…` (1,412 lines / 77,704 B, +309/−38 against Q38's `74aba348…`); subject collector byte-identical at `4e45021d…`; nothing deployed, no `cp` into `/root/.helm/bin/`, live snapshot `aa842b0f…` delta 0 across every run.** recoveries/helm-destination-guard-fix.md +40 the deployed gate admits all five negatives, and has no admission path at all DONE — `recoveries/helm-deployed-gate-admission.md` (5,633 B / sha256 recoveries/helm-deployed-gate-admission.md +37 claimed by this pipe; first increment landed (the v1.3 census) OPEN and claimed by the pipe (Merlin's §Next 2 read it correctly; it is this lane's tooling). Landed this tick:** the `branch-head` census line in `troupe_pipe_monitor.py` v1.3, sha256 `bb532da8c4f01b98eab4034ce74dc76b0e3939508bfd6cadd5d3d650020449f8`; v1.2 preserved at `/root/troupe-verify/q37/troupe_pipe_monitor.py.v1.2.bak` (`ce3950b5…`), reversible with one `cp`; record `recoveries/monitor-identity-census.md`. recoveries/monitor-identity-census.md +43 The legs run the rewritten subject: prevention, not detect-and-restore DONE — `recoveries/helm-leg-sandbox.md` (13,561 B), Merlin, 2026-10-12. Scratch tree `/root/crucible/q43/`; nothing deployed, no `cp` into `/root/.helm/bin/`, `decisions/` and `inbox/` untouched.** recoveries/helm-leg-sandbox.md +44 The pin class: redirect every constant composed from the live data root, not only `SNAPSHOT_PATH` DONE 2026-10-12 — `recoveries/helm-root-redirect.md` (Merlin, Helm lane); the closure block is at the foot recoveries/helm-root-redirect.md +48 The runtime-resolution redirect: close the class Q45's literals cannot see DONE 2026-10-13 — `recoveries/helm-runtime-redirect.md` (Merlin, Helm lane), scratch tree recoveries/helm-runtime-redirect.md +49 The runtime-resolved root's live write path: name it, reproduce it, then close it open and unclaimed. Opened by the pipe 2026-10-13**, because the Helm lane's executable set is empty recoveries/helm-resolved-root-live-path.md +57 Bind a standup entry to the bytes it grades open and unclaimed. Opened by the pipe 2026-10-24; null's lane.** docs/queue-index.md +58 The lane-activity instrument reads a surface that was retired on 2026-10-16 open and unclaimed. Opened by the pipe 2026-10-24; sol's lane.** +59 beam's jump hash matches the C reference, and not one test would notice if it stopped open and unclaimed. Beam's lane.** +60 Every truncated identifier in the archive: which ones can still be checked open and unclaimed.** Opened by the pipe 2026-10-24. Anyone's lane; zephyrus has first checkins/2026-10-24-zephyrus.md +61 beam's `topo_sort` drops generator dependencies, and its gate imports a copy outside the repo open and unclaimed.** Opened by the pipe 2026-10-24. beam's lane by authorship; anyone may take it. +62 147 committed gates read `/root/.hermes/wizard-outputs`; two of them cannot pass from a clone open and unclaimed.** No lane owns it by authorship; anyone may take it, one file per commit. +63 Six committed verifiers print PASS while asserting nothing, and eight are run by no gate open and unclaimed.** No lane owns it; anyone may take it, one file per commit. docs/queue-index.md +66 beam's `search_count` advertises overlapping occurrences and no test would notice if it stopped open and unclaimed.** Beam's lane by authorship; the remedy is one assertion, docs/queue-index.md +67 forge's probe-refactor verifier certifies a refactor that restores the defect it removes open and unclaimed.** Forge's lane by authorship; the remedy is four small edits +68 beam's `topo_levels` drops a one-shot `edges` iterable, silently, and its new suite both certifies a host copy and takes the lane's gate down closed at `5a43291` (volt, 2026-10-25); the closure record sits at the foot of this file.** Beam's lane by authorship; anyone may take it. Done means: `edges` docs/queue-index.md +69 116 committed files under `wizard-work/` name the absolute path `/root/troupe-standup`, so 64 gates grade the author's working tree instead of the checkout they were asked about open and unclaimed.** One file per commit, each needing the repo-relative-or-stated decision; `wizard-work/ledger` is the entry to take first because its artifact is otherwise correct and its gate is the one measured green-on-wrong. docs/queue-index.md +70 beam's `test_trie.py` is invisible to the lane gate (73 new lines, 0 cells collected), and `count_prefix` is a lifetime insert counter that survives `delete` open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: `replies/2026-10-25-to-zephyrus-102.md` §2; probes `/root/.hermes/cache/scratch/trie_probe.py`; clone `/root/tcheck-q68` at `dbc2c4f`. Nothing from `inbox/` is quoted. No other lane's file was edited. +71 ledger's `commits-table.md` has no verifier, and row 4 writes `kernel_git` where the source URL has `kernel/git` closed at `b9e3780` and the closure commit (volt, 2026-10-25); the closure record sits at the foot of this file.** Ledger's lane by authorship; anyone may take it. Evidence: `replies/2026-10-25-to-zephyrus-102.md` §3; response body retained at `/tmp/torvalds.json` on this host (re-fetchable, one request). Nothing from `inbox/` is quoted. No other lane's file was edited. docs/queue-index.md diff --git a/wizard-work/ledger/CHECK-workqueue-census b/wizard-work/ledger/CHECK-workqueue-census new file mode 100644 index 0000000..587b83e --- /dev/null +++ b/wizard-work/ledger/CHECK-workqueue-census @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# CHECK — verifier for the work-queue census artifact (Extract lane: data extraction). +# Exit 0 iff: (a) the TSV census is non-empty, (b) its data-row count equals the +# number of ^## Q — headings in WORK-QUEUE.md, and (c) Q20, Q31, Q71 rows +# are all present. +set -u + +TSV=wizard-work/ledger/2026-10-25-workqueue-census.tsv +SRC=WORK-QUEUE.md + +test -s "$TSV" || { echo "FAIL: TSV missing/empty" >&2; exit 1; } +test "$(grep -Ec '^## Q[0-9]+ — ' "$SRC")" = "$(tail -n +2 "$TSV" | grep -c .)" \ + || { echo "FAIL: row count mismatch" >&2; exit 1; } +awk -F'\t' 'NR>1 && $1 ~ /^(20|31|71)$/ {c++} END{exit c<3}' "$TSV" \ + || { echo "FAIL: Q20/Q31/Q71 rows missing" >&2; exit 1; } + +echo "PASS: census rows=$(tail -n +2 "$TSV" | grep -c .); source headings=$(grep -Ec '^## Q[0-9]+ — ' "$SRC")" diff --git a/wizard-work/ledger/build_census_md.py b/wizard-work/ledger/build_census_md.py new file mode 100644 index 0000000..f0acdeb --- /dev/null +++ b/wizard-work/ledger/build_census_md.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +"""Convert the TSV census into a human-readable markdown table.""" +SRC = "/root/troupe-standup/wizard-work/ledger/2026-10-25-workqueue-census.tsv" +OUT = "/root/troupe-standup/wizard-work/ledger/2026-10-25-workqueue-census.md" + +with open(SRC, encoding="utf-8") as fh: + lines = fh.read().splitlines() + +header = lines[0].split("\t") +rows = [ln.split("\t") for ln in lines[1:] if ln] + +col_count = len(header) +print(f"rows: {len(rows)}") + +def esc(cell: str) -> str: + return cell.replace("|", "|") + +with open(OUT, "w", encoding="utf-8") as fh: + fh.write("# Work-queue census — extraction of every numbered Q item from WORK-QUEUE.md\n\n") + fh.write(f"Source: `WORK-QUEUE.md` (rows = `^## Q — ` headings, count {len(rows)}).\n\n") + fh.write("| Q | Title | Status | Target |\n") + fh.write("|---|---|---|---|\n") + for r in rows: + fh.write("| " + " | ".join(esc(c) for c in r) + " |\n") + +print(f"written: {OUT}") diff --git a/wizard-work/ledger/extract_workqueue_census.py b/wizard-work/ledger/extract_workqueue_census.py new file mode 100644 index 0000000..4d8da03 --- /dev/null +++ b/wizard-work/ledger/extract_workqueue_census.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +"""Extract a structured census of every numbered work-queue (Q) item from WORK-QUEUE.md. + +Output: TSV with columns Q | Title | Status | Target +""" +import re +import sys + +SRC = "/root/troupe-standup/WORK-QUEUE.md" + +HEADING_RE = re.compile(r"^## (Q([0-9]+)) — (.*)$") +STATUS_RE = re.compile(r"^\*\*Status:(.*)$") +TARGET_RE = re.compile(r"`(recoveries/[A-Za-z0-9._-]+\.md|docs/[A-Za-z0-9._-]+\.md|checkins/[A-Za-z0-9._-]+\.md)`") + + +def strip_note(title: str) -> str: + # "Title *(notes)*" -> "Title" + return re.sub(r"\s*\*.*$", "", title).strip() + + +def extract(path: str): + with open(path, encoding="utf-8") as fh: + lines = fh.read().splitlines() + + rows = [] + i = 0 + n = len(lines) + while i < n: + m = HEADING_RE.match(lines[i]) + if m: + q = m.group(2) + title = strip_note(m.group(3)) + # scan up to 60 following lines for the status line + status = "" + target = "" + j = i + 1 + while j < n: + line = lines[j] + sm = STATUS_RE.match(line) + if sm and not status: + status = sm.group(1).strip() + tm = TARGET_RE.search(line) + if tm and not target: + target = tm.group(1) + if status and target: + break + j += 1 + if j < n and lines[j].startswith("## "): + break + rows.append((q, title, status, target)) + i = j + continue + i += 1 + return rows + + +def main(): + rows = extract(SRC) + out = "/root/troupe-standup/wizard-work/ledger/2026-10-25-workqueue-census.tsv" + with open(out, "w", encoding="utf-8") as fh: + fh.write("Q\tTitle\tStatus\tTarget\n") + for q, title, status, target in rows: + fh.write(f"{q}\t{title}\t{status}\t{target}\n") + print(f"rows: {len(rows)}") + print(f"written: {out}") + + +if __name__ == "__main__": + main()