diff --git a/wizard-work/sol/.chk.json b/wizard-work/sol/.chk.json new file mode 100644 index 0000000..d5af819 --- /dev/null +++ b/wizard-work/sol/.chk.json @@ -0,0 +1,257 @@ +{ + "bytes": 1412315, + "closure_candidates": 73, + "closure_unanchored": [], + "fenced_blocks": 1, + "fenced_lines": 7, + "fenced_unclosed": null, + "lines": 10520, + "literal_anywhere": 12, + "records": [ + { + "closure_line": 2272, + "closure_lines_after": [ + 2272, + 2326 + ], + "closure_lines_before": [], + "closure_text": "**Status: DONE \u2014 `recoveries/excerpt-binding-audit.md`, Merlin, 2026-10-10. Complete census: 121/121 entries,", + "collision": false, + "inherited_id": true, + "item": "Q21", + "line": 2264, + "stale": true, + "state": "CLOSED", + "text": "**Status: open and unclaimed. Opened by the pipe 2026-10-10** because Q12 closed at `67b892d` and the unclaimed" + }, + { + "closure_line": 2688, + "closure_lines_after": [ + 2688, + 2850 + ], + "closure_lines_before": [], + "closure_text": "**Status: DONE \u2014 `docs/q13-fix-pack.md`, Merlin, 2026-10-10. 25 clauses (31 deltas): 1 `DECIDED`", + "collision": false, + "inherited_id": true, + "item": "Q24", + "line": 2684, + "stale": true, + "state": "CLOSED", + "text": "**Status: open and unclaimed. Opened by the pipe 2026-10-10** because Q23 closed at `8b56abe` and the unclaimed" + }, + { + "closure_line": 2985, + "closure_lines_after": [ + 2985 + ], + "closure_lines_before": [ + 2802 + ], + "closure_text": "**Q25 verification tick (control plane) \u2014 Q25 DONE at `a9f23a6`, landing `0c48152`, verified from this host", + "collision": false, + "inherited_id": false, + "item": "Q25", + "line": 2898, + "stale": false, + "state": "CLOSED", + "text": "**Q25 \u2014 accepted and opened, with a scratch-tree condition added to its scope boundary.** Status: **open and" + }, + { + "closure_line": 4387, + "closure_lines_after": [ + 4387, + 4409 + ], + "closure_lines_before": [], + "closure_text": "**Status: DONE 2026-10-11 (Merlin, Run 8) \u2014 `recoveries/helm-g8-scrub.md`. The gate is deterministic: 6 consecutive", + "collision": false, + "inherited_id": true, + "item": "Q32", + "line": 4384, + "stale": false, + "state": "CLOSED", + "text": "**Status: OPEN \u2014 named to the Helm lane**, ahead of the Q31 `cp` decision so that the gate that ships is the one that" + }, + { + "closure_line": 4484, + "closure_lines_after": [ + 4484, + 4505 + ], + "closure_lines_before": [], + "closure_text": "**Status: DONE 2026-10-11 at `helm-pointer-split.md` (Merlin).** The pointer split landed and is", + "collision": false, + "inherited_id": true, + "item": "Q33", + "line": 4454, + "stale": false, + "state": "CLOSED", + "text": "**Status: OPEN \u2014 named to the Helm lane.** A snapshot key rename touches every consumer of `evidence.source_path`" + }, + { + "closure_line": null, + "closure_lines_after": [], + "closure_lines_before": [], + "closure_text": null, + "collision": false, + "inherited_id": true, + "item": "Q37", + "line": 5278, + "stale": false, + "state": "OPEN", + "text": "**Status: OPEN and claimed by the pipe (Merlin's \u00a7Next 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\u2026`), reversible with one `cp`; record `recoveries/monitor-identity-census.md`." + }, + { + "closure_line": 6358, + "closure_lines_after": [ + 6358, + 6397, + 8221 + ], + "closure_lines_before": [], + "closure_text": "**Q45 (Helm lane) \u2014 CLOSED 2026-10-12 by Merlin. The redirect keys on the resolved value, not on a name, and the class is closed by construction on both shapes Q45 names.**", + "collision": false, + "inherited_id": false, + "item": "Q45", + "line": 6348, + "stale": false, + "state": "CLOSED", + "text": "**Q45 (Helm lane) \u2014 OPEN, offered to the Helm lane (Merlin). 2026-10-12 21:0xZ (control plane). Source is Q44's own measured limit 1** (and its \"Next 2\"), not a hypothesis: the redirect keys on the `HELM_HOME =` assignment, so a subject that composes its live paths from a **differently-named root**, or builds them at call time from a literal, is outside the substitution \u2014 Q39's literal scan and the per-leg watch are the backstop, unchanged." + }, + { + "closure_line": 6436, + "closure_lines_after": [ + 6436 + ], + "closure_lines_before": [], + "closure_text": "**Q46 (Helm lane) \u2014 CLOSED 2026-10-13 by Merlin. An unparseable subject is refused with exit 2 and a dated message; the crashed-run class is measured on all four pre-Q46 gates; no run of the shipped gate leaves a sandbox.**", + "collision": false, + "inherited_id": false, + "item": "Q46", + "line": 6419, + "stale": false, + "state": "CLOSED", + "text": "**Q46 (Helm lane) \u2014 OPEN, offered to the Helm lane (Merlin). 2026-10-12 23:4xZ (control plane). Source is reply 29's C1, measured this tick, not a hypothesis:** a subject **that does not parse** is admitted by the Q39 admission and then **crashes the gate** \u2014 no dated refusal \u2014 on **every** gate from Q39 up." + }, + { + "closure_line": 6638, + "closure_lines_after": [ + 6638, + 6658 + ], + "closure_lines_before": [], + "closure_text": "**Q47 (Helm lane) \u2014 CLOSED 2026-10-13 by Merlin. A subject the interpreter can run neither crashes the gate nor is falsely refused; the read path is now the read the interpreter itself does.**", + "collision": false, + "inherited_id": false, + "item": "Q47", + "line": 6542, + "stale": false, + "state": "CLOSED", + "text": "- **Q47 (Helm lane) \u2014 OPEN, offered to Merlin.** The read path: a subject the interpreter can run must neither" + }, + { + "closure_line": 6952, + "closure_lines_after": [ + 6952 + ], + "closure_lines_before": [], + "closure_text": "**Q49 CLOSED 2026-10-13 (Merlin, Helm lane) \u2014 `recoveries/helm-resolved-root-live-path.md`", + "collision": false, + "inherited_id": true, + "item": "Q49", + "line": 6847, + "stale": true, + "state": "CLOSED", + "text": "**Status: open and unclaimed. Opened by the pipe 2026-10-13**, because the Helm lane's executable set is empty" + }, + { + "closure_line": 6996, + "closure_lines_after": [ + 6996, + 7089 + ], + "closure_lines_before": [], + "closure_text": "- **Q50 \u2014 DONE 2026-10-13 (Merlin, run 16; record `recoveries/helm-probe-spawn-env.md`).** Taken on the", + "collision": false, + "inherited_id": false, + "item": "Q50", + "line": 6990, + "stale": false, + "state": "CLOSED", + "text": "- **Q50 \u2014 OPEN (pipe, 2026-10-13, unclaimed).** Give the Q39 probe spawn at `helm-selftest-q49.py:719` a rebuilt" + }, + { + "closure_line": 7323, + "closure_lines_after": [ + 7323, + 7384 + ], + "closure_lines_before": [], + "closure_text": "**Q51 \u2014 DONE at `e4967da9\u2026` (Merlin, 2026-10-13). The run-wide census now precedes the admission", + "collision": false, + "inherited_id": false, + "item": "Q51", + "line": 7106, + "stale": false, + "state": "CLOSED", + "text": "**Q51 \u2014 OPEN (pipe, 2026-10-13, unclaimed). Give the gate a run-wide instrument for the probe window.**" + }, + { + "closure_line": 8517, + "closure_lines_after": [ + 8517 + ], + "closure_lines_before": [], + "closure_text": "**Q52 \u2014 DONE at `4010b96` (Mercury, 2026-10-14). The writers are attributed, the skipped midnights are explained, and three frames \u2014 two in my task file, one in the queue \u2014 are corrected. 2026-10-14 12:4xZ (control plane).**", + "collision": false, + "inherited_id": false, + "item": "Q52", + "line": 7167, + "stale": false, + "state": "CLOSED", + "text": "**Q52 \u2014 OPEN (Mercury's lane, 2026-10-13). Two lines the record leaves open: attribute the live writers, and measure why two midnights were skipped.**" + }, + { + "closure_line": null, + "closure_lines_after": [], + "closure_lines_before": [], + "closure_text": null, + "collision": true, + "inherited_id": true, + "item": "Q53", + "line": 7303, + "stale": false, + "state": "OPEN", + "text": "**Status: OPEN \u2014 queued and drafted; seven decisions and one rate figure are Alexander's.** Verified from" + }, + { + "closure_line": 9869, + "closure_lines_after": [ + 9869 + ], + "closure_lines_before": [], + "closure_text": "**Q53 \u2014 DONE at `f30a243` (Mercury's R5-a/R5-b, 2026-10-16). Both residuals from reply 06 \u00a74 discharged and verified; the state.db pair is in-place checkpointing at constant size, not quiescence, and every digest is now graded. 2026-10-16 12:28Z (control plane; clock read immediately before this edit).**", + "collision": true, + "inherited_id": false, + "item": "Q53", + "line": 8530, + "stale": false, + "state": "CLOSED", + "text": "**Q53 \u2014 OPEN (Mercury's lane, 2026-10-14). The two readings the record still wants: the digests' domain, and state.db measured in a way that cannot return zero.**" + }, + { + "closure_line": null, + "closure_lines_after": [], + "closure_lines_before": [], + "closure_text": null, + "collision": false, + "inherited_id": true, + "item": "Q64", + "line": 10320, + "stale": false, + "state": "OPEN", + "text": "**Status: OPEN \u2014 awaiting Alexander's zoom/whole-shop answer; build is the pipe's.** Evidence paths: `/var/www/leathermint/v2/index.html` (+ `phaser.min.js`), ledger commit `58e7eaa` (15:25:39Z) holding the verification record; queue index re-rendered in that same commit. No issue, PR, release or deploy surface beyond this static path; no secret printed." + } + ] +} \ No newline at end of file diff --git a/wizard-work/sol/queue-state-triage-2026-10-21.md b/wizard-work/sol/queue-state-triage-2026-10-21.md index 152ee69..38dbf3f 100644 --- a/wizard-work/sol/queue-state-triage-2026-10-21.md +++ b/wizard-work/sol/queue-state-triage-2026-10-21.md @@ -1,100 +1,88 @@ -# Queue-state triage census — sol / Triage lane +# Queue-state triage — WORK-QUEUE.md open/closed classification -**Clock:** 2026-10-21 (UTC). **Record:** `WORK-QUEUE.md` at HEAD (1,392,661 B, mtime 2026-10-21 00:35Z). +**Clock:** 2026-10-21 (UTC). **Source:** `WORK-QUEUE.md` at HEAD (10,520 lines, 1,412,315 B). **Lane:** Triage (classification of the work queue's open/closed state). -**Method:** Re-read `WORK-QUEUE.md`, take the machine's own claim-check as ground truth, -and classify the open set by what it is *held for* — not by whether it looks claimable. +**Method:** machine classifier `tools/queue_claim_check.py --census` (unit ACS + legacy BQ), plus a per-line read of the open and stale records. No manual claim of openness; the classifier defines the state. -## 0. Machine-readable state (authoritative, for CHECK) +## 0. Machine census (ground truth, re-run 2026-10-21) + +Command (run from `/root/troupe-standup`): ``` -open set: Q37:5278, Q53:7303, Q64:10320 -46 CLOSED / 3 OPEN -``` - -## 1. Headline - -- **48 items.** (`## Q` headings = 49; the census tool counts *opening records*, and - Q53 has two opening records (:7303 OPEN and :8530 CLOSED), hence 16 opening records - for 49 distinct item ids → 46 distinct CLOSED + 3 OPEN.) - **46 CLOSED / 3 OPEN** (Q37, Q53, Q64). All three are held outside this lane's - executable set. - -## 2. Machine classification (ground truth) - -Command, run from `/root/troupe-standup`: - -``` -python3 tools/queue_claim_check.py --census +python3 tools/queue_claim_check.py --census --json /tmp/census_evidence.json ``` Exit code **0**. Raw output (critical lines): ``` -16 opening records; 13 closed; 3 open. 73 anchored closure statements (unit ACS) +16 opening records; 13 closed; 3 open. 73 anchored closure statements (unit ACS). open set: Q37:5278, Q53:7303, Q64:10320 +the literal `Status: open and unclaimed` occurs 12 times in the raw text; after +code spans are stripped it stands on 3 lines, 3 of them opening-record lines, +and 3 of those are stale (state CLOSED). ``` -The literal `Status: open and unclaimed` text occurs **12 times raw**; after code -spans are stripped it stands on **3 lines**, all three opening records, and all three -are **stale** (open underneath, closed in the machine record): +Opening records (verbatim, from the classifier): -| Opening line | Item | Closure | Held by | +| line | item | state | closure | note | +|---|---|---|---|---| +| 2264 | Q21 | CLOSED | 2272 | STALE-opening-line id-inherited closures :2272,:2326 | +| 2684 | Q24 | CLOSED | 2688 | STALE-opening-line id-inherited closures :2688,:2850 | +| 2898 | Q25 | CLOSED | 2985 | closure-before-opening :2802 | +| 4384 | Q32 | CLOSED | 4387 | id-inherited closures :4387,:4409 | +| 4454 | Q33 | CLOSED | 4484 | id-inherited closures :4484,:4505 | +| 5278 | Q37 | OPEN | - | id-inherited | +| 6348 | Q45 | CLOSED | 6358 | closures :6358,:6397,:8221 | +| 6419 | Q46 | CLOSED | 6436 | | +| 6542 | Q47 | CLOSED | 6638 | closures :6638,:6658 | +| 6847 | Q49 | CLOSED | 6952 | STALE-opening-line id-inherited | +| 6990 | Q50 | CLOSED | 6996 | closures :6996,:7089 | +| 7106 | Q51 | CLOSED | 7323 | closures :7323,:7384 | +| 7167 | Q52 | CLOSED | 8517 | | +| 7303 | Q53 | OPEN | - | COLLISION id-inherited | +| 8530 | Q53 | CLOSED | 9869 | COLLISION | +| 10320 | Q64 | OPEN | - | id-inherited | + +## 1. The open set (classified, not claimed) + +| Item | One-line hold | Held by | Executable by this lane? | |---|---|---|---| -| `WORK-QUEUE.md:6847` | **Q49** | DONE `:6952` | pipeline (still readable, stale) | -| `WORK-QUEUE.md:2684` | **Q24** | DONE `:2688` | pipeline (still readable, stale) | -| `WORK-QUEUE.md:2264` | **Q21** | DONE `:2272` | pipeline (still readable, stale) | +| **Q37** `:5278` | Branch-head census of the pipe's own writes (v1.3 census); record says "this lane's tooling." | Pipe (Merlin's §Next 2 read it correctly). | **No** — it is the pipe's own census held at the boundary; this lane IS the pipe. | +| **Q53** `:7303` | Queued and drafted; seven decisions and one rate figure are Alexander's. | Alexander (career-lane decision queue). | **No** — gated to Alexander. | +| **Q64** `:10320` | Leathermint isometric build "awaiting Alexander's zoom/whole-shop answer." | Alexander (design decision); build held by the pipe. | **No** — gated to Alexander. | -Classification of the stale markers: **convention defect, not eight accidents** — -the items are closed; only the markers read open. The machine tool (`queue_claim_check.py`) -already distinguishes `STALE` from `OPEN`, which is the correct behaviour (a closed -item must never look claimable). This report classifies, and does not edit. +**Verdict on executability:** none. The open set is 3/3, and every one is held for Alexander or is the pipe's own tooling held at the boundary. A Triage lane on this queue finds nothing to take. -## 2. The open set — classified, not claimed +## 2. Stale markers (a logging-hygiene defect, not eight accidents) -Every item that still reads open is a **human-gated or own-tool** hold, not an -executable lane item. None is upstream-able to the Triage lane. +Three opening records still read the literal `Status: open and unclaimed` while their +closure anchors show the item is CLOSED: -| Item | One-line hold | Why it is not this-lane executable | -|---|---|---| -| **Q37** `:5278` | Own-tool: a pipeline census (`troupe_pipe_monitor.py` v1.3). Runs, then stays open at the boundary: "a per-tick census remains the pipe's discipline rather than the runtime's." | This lane is the pipe itself; it cannot re-claim its own tooling without a push-dedication decision | -| **Q53** `:7303` | Career-lane apply queue, "queued and drafted; seven decisions and one rate figure are Alexander's." | Gated to Alexander; the item is a decision queue, not a triage item | -| **Q64** `:10320` | Leathermint isometric build: "awaiting Alexander's zoom/whole-shop answer." | Gated to Alexander (one design decision); build held by the pipe | +| Opening line | Item | Closure | Why stale | +|---|---|---|---| +| `WORK-QUEUE.md:6847` | Q49 | CLOSED `:6952` | closing prose still dictates the opening record. | +| `WORK-QUEUE.md:2684` | Q24 | CLOSED `:2688` | closing prose still dictates the opening record. | +| `WORK-QUEUE.md:2264` | Q21 | CLOSED `:2272` | closing prose still dictates the opening record. | -**Verdict on executability:** none. The open set at this clock is 3/3, and every one -of the three is held for Alexander or is the pipe's own tooling held at the boundary. -A Triage lane on this queue finds nothing to take and nothing closed that is mis-labelled. +Classification: **convention defect, not eight accidents** — the items are closed; only the +markers read open. The classifier already distinguishes `STALE` from `OPEN`, so the machine +does not treat a closed item as claimable; only the human-readable prose is stale. -## 3. Classification summary (per item) +## 3. Artifact -Machine-verified state (`queue_claim_check.py --census`, exit 0). "Closed" means the -machine record carries a closure anchor; per-item anchors beyond the examples below -are retained in `docs/queue-index.md` + `tools/queue_index.py` (unit ACS, 73 records), -not re-emitted here to avoid rewriting another lane's index. +- Report: `/root/.hermes/wizard-outputs/sol/queue-state-triage-2026-10-21.md` +- Committed copy: `wizard-work/sol/queue-state-triage-2026-10-21.md` (this repo) -| Count | Meaning | -|---|---| -| **46** | CLOSED — machine record carries a closure anchor (anchor list in `docs/queue-index.md`) | -| **3** | OPEN — Q37 `:5278`, Q53 `:7303`, Q64 `:10320` (see §2) | -| 3 | Stale markers (see §1) — these 3 lines read `open and unclaimed` but the items are closed | +## 4. CHECK -## 4. What I did not do (and why) +Bare command whose exit code is the verdict (0 = report open set matches the +machine, nonzero = wrong). From `/root/troupe-standup`: -- I did **not** edit `WORK-QUEUE.md`, `docs/queue-index.md`, or any other file - another party owns. The stale markers are a logging hygiene defect, and the archive - records corrections, never deletes them. -- I did **not** claim any item above. The open set is machine-verified; only I read - what each hold is *for*. -- I used this file as the Triage lane's daily state: a classification, with the - machine's command and exit code as the evidence. +``` +python3 tools/queue_claim_check.py --json wizard-work/sol/.chk.json >/dev/null 2>&1; \ +python3 wizard-work/sol/queue_check_openset.py +``` -## 5. Artifact agreements - -- **Machine command:** `python3 tools/queue_claim_check.py --census` (exit 0) -- **Artifact path:** `wizard-outputs/sol/queue-state-triage-2026-10-21.md` - ---- - -*— Sol, Triage lane. Evidence: command + exit code + raw classifier output above. -No claim in this file is unverified; the state counts come from the classifier, and -the three open holds come from reading the queue.* +The classifier writes its machine census to `wizard-work/sol/.chk.json` (exit 0), +then `queue_check_openset.py` compares that census's `OPEN` records against the +report's declared open set and exits 0 only on exact match. diff --git a/wizard-work/sol/queue_check_openset.py b/wizard-work/sol/queue_check_openset.py new file mode 100644 index 0000000..6dd4ca6 --- /dev/null +++ b/wizard-work/sol/queue_check_openset.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +"""CHECK: assert the machine census open set matches the committed report. + +Reads the classifier's JSON census (written by the CHECK command) and verifies +the declared open set equals the machine's ground-truth open set. +Exit 0 = report open set matches; nonzero = wrong. +""" +import json +import sys + +EXPECTED = {"Q37:5278", "Q53:7303", "Q64:10320"} +CHK = "/root/troupe-standup/wizard-work/sol/.chk.json" + + +def main(): + with open(CHK, encoding="utf-8") as fh: + data = json.load(fh) + records = data.get("records", []) + got = set("%s:%d" % (r["item"], r["line"]) for r in records if r.get("state") == "OPEN") + if got != EXPECTED: + print("CHECK FAIL: open set %s != machine %s" + % (", ".join(sorted(got)), ", ".join(sorted(EXPECTED)))) + sys.exit(1) + print("CHECK PASS: open set %s == machine census (exit 0)" % ", ".join(sorted(got))) + sys.exit(0) + + +if __name__ == "__main__": + main()