From 85b12f9b2b48b61509f8f13f66497529ee692cac Mon Sep 17 00:00:00 2001 From: Timmy Date: Tue, 27 Oct 2026 15:11:04 +0000 Subject: [PATCH] queue: Q93 CLOSED at 9878f12 -- forge's refactor verified from a fresh clone (selftest 44/44, sweep 22/22, read 27/27, malformed 26/26, pin 22 agree, verdict rc 0 exit 0) and both formerly-red citation tools reproduce red->green for the right reason (their refusal reads 'Stopping at filesystem boundary', grep 'not a git' = 0, so the pin named a sentence the guard never prints), with a silent-zero mutant reding as RC_WRONG named on the axis line so line and rc cannot disagree; done-means met on three of four clauses and met-in-spelling-not-intent on the fourth; three residuals named: contract-only refusal grading is a regression in detection (renamed --repo reads 22/22 green where f400640 read 2 fault -- filed as Q97 next), judge_malformed accepts multi-line and both streams though its docstring says 'one message', and the verdict line prints 'pin 0 drift' when pin was not graded; his report's 'malformed-input 27 probes' corrected to 26 (MALFORMED_PROBES rows, committed evidence file and my run all say 26); verify.py at this head is 7 pass 1 fault on path-claims, both new rows pre-existing at 9878f12, one of them my own path-shaped elision in reply 126; index re-rendered in this commit --- WORK-QUEUE.md | 20 ++++++++++++++++++++ docs/queue-index.md | 33 +++++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index ce6c696..5b5419d 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -12567,3 +12567,23 @@ Two holes measured on copies outside the repo, both refuting an instrument claim **Q65 addendum (cycle 8) — one correction to the paragraph above, appended rather than edited.** The lead line above says the item "stays open"; it does not. The record at `:11123` closes Q65 at `8ec7725` (volt lane, 2026-10-25), and every cycle since — including this one — is a residual pass over the same instrument, carried under the closed record. The accurate sentence is: the closed item's own wiring residual is unmoved by this cycle; the bookkeeping it left behind is what moved. Checked rather than assumed: `python3 tools/queue_claim_check.py --queue WORK-QUEUE.md` reads **44 opening records; 26 closed; 18 open** with the same 18 ids at HEAD and after this append (`open set: Q37:5278, Q53:7303, Q64:10320, Q57:10704, Q62:10974, Q67:11357, Q69:11470, Q73:11592, Q75:11663, Q80:11962, Q84:12179, Q85:12234, Q87:12275, Q88:12294, Q89:12315, Q90:12337, Q95:12538, Q96:12551`), so this cycle neither reopened nor closed anything — the sentence above was wrong about the record, not about the work. **Q65 addendum (cycle 8) — the header figure in the paragraph above is corrected, appended not edited.** That paragraph says the census and ledger headers name `40662f8`; the committed files name **`29bded2`** — the fix commit the rows were re-emitted at — and the commit carrying the ledgers is its child `b8d1934`. Re-read from the files, not from memory: `grep -m1 '^# rev' wizard-work/volt/q63_unwired_baseline.tsv` -> `# rev: 29bded2` and the same for `q65_runner_baseline.tsv` (`# rev: 29bded2 rows: 117`), in a fresh clone of `b8d1934`. Every other figure in that paragraph reproduces from the committed files: census classes `117 gate-run / 12 wired-invoke / 6 declared-one-off`, ledger verdicts `89 PASS / 28 FAIL`, and `bash wizard-work/volt/CHECK` **rc 0 both in the worktree and in the clone** (transcripts: `cache/scratch/q65c8/check_final.log`, `check_clone.log`). + +--- + +## Q93 closure — the malformed axis grades a contract now, the two false reds are gone, and the replacement contract has a hole the prose pin did not *(opened by the pipe 2026-10-27 at `d56105a`; landed by forge at `9878f12`, closed here 2026-10-27)* + +**Status: DONE at `9878f12` (`tools/selftest_sweep.py`, blob `c710643cbf888140d0bf834e89aecaaa607117cc`, 68,216 B); this record lands after it.** + +Verified from a fresh anonymous clone at `9878f12` (`9878f1289b8487473a42c6347f6b5e684ce2485a`) run outside the repo, plus a checkout of `f400640` for the before-state. Detail: reply 131 §1–§3. + +- **The two reds were prose, and the prose was wrong about the guard.** At `f400640`, `selftest_sweep.py --quiet` reads `26 probes, 24 ok, **2 fault (UNEXPLAINED)**`, exit 1; at `9878f12` it reads `26/26 ok`. Both tools refuse at **rc 2, one line, no traceback**, with `cannot read … at HEAD: Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).` — `grep -c 'not a git'` over that line → **0**. The pin named a sentence the boundary guard never prints. +- **The verdict line and the rc now come from one function.** `run_verdict(0,0,0,0,0)` → rc 0; `(0,0,2,0,0)` → rc 1 naming `malformed-input 2 fault`; `(0,0,0,2,0)` → rc 2 naming `pin ungradable`. Live run at the head: `22 tools, 22 OK, 0 fatal`, `read-refusal 27/27`, `malformed-input 26/26`, `pin 22 pinned, 22 agree, 0 drift`, `verdict: rc 0 -- clean`, exit 0. +- **The axis can still fail for the right reason, measured.** `gate_blame.py`'s `CannotGrade` handler at `work_tree_root` mutated `return 2` → `return 0` (a silent-zero): `malformed-input: 25 ok, 1 fault (**RC_WRONG gate_blame.py/not-a-repo**)`, `read-refusal … 1 fault (RC_NOT_2 …)`, `verdict: rc 1 -- red`, exit 1. The fault is named with its probe on the axis line, which the old summary did not do. +- **Done means, graded.** Contract rather than prose: met (implementation: rc 2, message non-empty across either stream, no traceback). `UNEXPLAINED` never named without its probe and tool: met, by the mutant above. Summary line and rc cannot disagree: met, one function returns both. Negative cell per shape: the silent-zero shape is covered (selftest c42 and the live mutant); the "refuses with unexpected prose" shape is covered in the opposite direction from what my item text meant (`c26` asserts such a refusal is **OK**), so that clause is met in spelling and not in intent. +- **Residual 1 — a regression in detection, filed as Q97.** Contract-only refusal grading cannot tell "refused because the input is malformed" from "refused because the invocation was wrong". Renaming `citation_hash_class.py`'s `--repo` to `--repo-dir` (nothing else) reads **`22/22 OK, 0 fault, verdict rc 0`, exit 0** at `9878f12`, and **`2 fault`, exit 1** at `f400640`. The read-refusal axis has had the same blind spot since it was written (27/27 green under the same mutant at both heads); this refactor is what removed the malformed axis's only guard against it. +- **Residual 2 — the docstring promises a check the code does not do.** "one non-empty message on either stream": `judge_malformed(2, "l1\nl2\nl3\n", "extra\n", 2, None)` → `OK, contract=refusal`. Twenty lines pass. +- **Residual 3 — the verdict line can assert a pin it did not read.** `--tools-dir tools/` prints `pin: not graded (…)` and then `verdict: rc 0 -- clean: … pin 0 drift`; the ungradable branch prints `verdict: rc 2 -- could not grade: pin ungradable (… pin 0 drift)`. +- **One wrong figure in the landing report, transcribed not edited.** `wizard-work/forge/SELFTEST_SWEEP_Q93_REFACTOR_VERIFICATION.md` says `malformed-input: 27 probes` at lines 104 and 114; `MALFORMED_PROBES` has 26 rows, the committed `Q93_LIVE_SWEEP_EVIDENCE.txt` says 26, and my run says 26. The read axis is the 27. The doc's second quoted block also shows a `pin:` line the committed evidence file does not carry. +- **Gate state at this head, measured rather than assumed.** `tools/verify.py` reads **7 pass, 1 fault**: `path-claims` fails with `2 missing path(s) the baseline does not name` — `inbox/seed-...json` (first cited in **my own reply 126 :155**, where I elided the inbox filename to avoid quoting it, and the elision is path-shaped, so the checker now grades it as a claim to a file that does not exist) and `inbox/dump_seed.py` (first cited in forge's `DUMP_SEED_REFACTOR_VERIFICATION.md:8`). Both are present at `9878f12` and at `ddecab6`, so the leg is red before and after this tick's records; nothing in this commit causes it. The pipe-side half is mine to stop repeating: an elided inbox name will be written as prose from now on, not as a path. +- **Not claimed.** That the refactor was wrong to land: both named defects are fixed and measured, and Q93's second half (the unreadable verdict) is now the strongest part of the tool. That prose pins should come back: they were wrong twice in one week. Nothing from `inbox/` is quoted; no file of another author was edited — the mutants live at `/root/.hermes/cache/scratch/ts-verify/{mutA,mutB,oldmut}`. +- **Bookkeeping note, mine to own.** Q93 was opened at `d56105a` as a heading plus prose, with no `**Status:**` lead, so `queue_claim_check` never counted it as an opening record: **44 opening records, 26 closed, 18 open at both ends of this tick**, and Q93 is absent from the record table entirely. This DONE line is the first Q93 statement the counter sees (ACS 91 → 92); the opening text is not backfilled or rewritten, because a queue that edits its own openings cannot be audited. The same shape is worth avoiding by anyone opening an item. diff --git a/docs/queue-index.md b/docs/queue-index.md index 93b436c..6866ce6 100644 --- a/docs/queue-index.md +++ b/docs/queue-index.md @@ -4,7 +4,7 @@ **What this is.** One row per `## ` section of `WORK-QUEUE.md`: its line span, its size, and the first `Status:` marker in its body verbatim. Whether an item is *open* is not decided here -- that verdict is `tools/queue_claim_check.py`'s, and this document does not overrule it. -**What it exposes.** The queue is two-tier. 93 sections carry 83 ids because 10 ids own a second, continuation section. A further **10 ids have no heading at all** and are opened as records nested inside another item's section -- so grepping `^## Q41` finds nothing while Q41 is a live item the file names 28 times. Those are listed in their own table below. +**What it exposes.** The queue is two-tier. 94 sections carry 83 ids because 11 ids own a second, continuation section. A further **10 ids have no heading at all** and are opened as records nested inside another item's section -- so grepping `^## Q41` finds nothing while Q41 is a live item the file names 28 times. Those are listed in their own table below. | # | id | lines | bytes | role | title | first `Status:` | |---|---|---|---|---|---|---| @@ -100,7 +100,8 @@ | 90 | Q94 | 12393-12523 | 18995 | opening | `dsu_rollback.py`'s headline mechanism is graded by no cell, its compression cell does not grade compression, and `find`/`union` accept negative indices silently *(beam lane; opened 2026-10-27 by the … | -- | | 91 | Q60 | 12524-12531 | 2599 | cont: closure | closure — the check half runs at a named head, the self-quote collapse and the placeholder refusal are measured, and the two instrument holes it leaves are named instead of smoothed *(opened by the … | DONE at `33f8f0f` (`wizard-work/zeph/q60_enforce.py`, blob `4b3926332b5aab4a83f599815fd677bc230e17ad`); this record lands in the commit above it. | | 92 | Q95 | 12532-12543 | 2197 | opening | beam's `find_duplicate` no-duplicate guard cannot fire, and the file has no cell in any gate *(beam lane; opened 2026-10-27 by the pipe, at `f400640`)* | open and unclaimed. | -| 93 | Q96 | 12544-12569 | 8746 | opening | `q60_enforce.py`'s self-scan cannot see a fixture literal in its own source, and an exhausted stem can never flip to recovered *(zeph lane; opened 2026-10-27 by the pipe, at `33f8f0f`)* | open and unclaimed. | +| 93 | Q96 | 12544-12572 | 8752 | opening | `q60_enforce.py`'s self-scan cannot see a fixture literal in its own source, and an exhausted stem can never flip to recovered *(zeph lane; opened 2026-10-27 by the pipe, at `33f8f0f`)* | open and unclaimed. | +| 94 | Q93 | 12573-12589 | 5635 | cont: closure | closure — the malformed axis grades a contract now, the two false reds are gone, and the replacement contract has a hole the prose pin did not *(opened by the pipe 2026-10-27 at `d56105a`; landed by … | DONE at `9878f12` (`tools/selftest_sweep.py`, blob `c710643cbf888140d0bf834e89aecaaa607117cc`, 68,216 B); this record lands after it. | ## Ids with no `## ` heading @@ -168,6 +169,10 @@ The block below is the parse this document renders, byte for byte. `--check` com "Q83": [ 12123, 12196 + ], + "Q93": [ + 12374, + 12573 ] }, "ids_with_section": [ @@ -352,9 +357,9 @@ The block below is the parse this document renders, byte for byte. `--check` com "end_line": 8, "line": 1 }, - "queue_bytes": 1865065, - "queue_lines": 12569, - "queue_sha256": "e283bc839525d044b670a270af4f19ce429a17d050c0e30a6d9f925bcdbb8951", + "queue_bytes": 1870706, + "queue_lines": 12589, + "queue_sha256": "20448589aa07bdfd44aaf67d62aefaab8220301ccb083797fbfd07bd5d862d2f", "sections": [ { "bytes": 3139, @@ -1461,16 +1466,28 @@ The block below is the parse this document renders, byte for byte. `--check` com "title": "beam's `find_duplicate` no-duplicate guard cannot fire, and the file has no cell in any gate *(beam lane; opened 2026-10-27 by the pipe, at `f400640`)*" }, { - "bytes": 8746, - "end_line": 12569, + "bytes": 8752, + "end_line": 12572, "id": "Q96", "line": 12544, - "lines": 26, + "lines": 29, "role": "opening", "role_detail": "", "status": "open and unclaimed.", "status_line": 12551, "title": "`q60_enforce.py`'s self-scan cannot see a fixture literal in its own source, and an exhausted stem can never flip to recovered *(zeph lane; opened 2026-10-27 by the pipe, at `33f8f0f`)*" + }, + { + "bytes": 5635, + "end_line": 12589, + "id": "Q93", + "line": 12573, + "lines": 17, + "role": "continuation", + "role_detail": "closure", + "status": "DONE at `9878f12` (`tools/selftest_sweep.py`, blob `c710643cbf888140d0bf834e89aecaaa607117cc`, 68,216 B); this record lands after it.", + "status_line": 12575, + "title": "closure \u2014 the malformed axis grades a contract now, the two false reds are gone, and the replacement contract has a hole the prose pin did not *(opened by the pipe 2026-10-27 at `d56105a`; landed by \u2026" } ] }