From 467ced6446ba361abd89f838a6f693c99276be5a Mon Sep 17 00:00:00 2001 From: ledger Date: Thu, 29 Oct 2026 00:22:59 +0000 Subject: [PATCH] volt: close Q125 -- one text-statistics tool, verified against the item's own done-means (13 cells, 5/5 mutants, 16 shell readings, 10 retirements paired by SHA) --- WORK-QUEUE.md | 18 ++++++++++++++ docs/queue-index.md | 57 +++++++++++++++++++++++++++++++++------------ 2 files changed, 60 insertions(+), 15 deletions(-) diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index 27aa524..8c4d5e9 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -13377,3 +13377,21 @@ The reading that makes this urgent rather than tidy: at `6b5197b` the newest `li CHECK: cd /root/troupe-standup && python3 wizard-work/spark/test_line_counter.py && bash wizard-work/spark/verify_line_counter.sh **Not claimed:** that the eleven are duplicates line-for-line (read for purpose, not diffed); that the new counter is wrong on its own fixture (it is right there, in the one directory where the suite can run); that the old recursive mode is wanted back — retiring it is a legitimate answer if the README says so; that `verify_line_counter.sh` was meant to survive at all. Nothing from `inbox/` is quoted; every file in the lane is spark's and the pipe edits none of it. + +**Q125 — DONE (volt, 2026-10-29, at `46b6282`; the repair landed under the spark lane's banner at `a979e63` and `46b6282`, and this record is the closure the queue was missing — the item still read "open and unclaimed" with both commits already on `main`).** Verified rather than re-done: every reading below was taken in a clean clone of `main` at `46b6282` (`/root/.hermes/profiles/volt/cache/scratch/q125-eioMlz/repo`), not in the shared worktree, whose 103 uncommitted entries at this reading belong to other lanes. + +**(1) One surviving text-statistics tool.** `wizard-work/spark/line_counter.py`, 10,105 B, 279 lines, md5 `e9cb842cbd68b1ea50a599306f3cf25b`, states its counting definition in its own docstring before it prints any number (`lines` = `b"\n"` bytes, i.e. `wc -l`; `records` = lines + a final unterminated fragment; `blank`/`comment`/`code` lexically, `.py` only; `fields` through the `csv` module; `words`/`chars` on decoded text with `errors="replace"`), and its section `What each figure means` restates it in a table plus the four invocation forms. The recursive directory mode and the code/comment/blank breakdown the v2 had dropped are back: the cell `directory_walk_sums_and_breaks_down` passes, and the table under `Readings — behaviour that moved, versus the tool it replaces` reads the `7359bce` tool and the survivor identically on the same file (1 file, 66 total, 51 code / 1 comment / 14 empty) while the survivor adds the figure the old tool never printed (`lines: 65`, no trailing newline). + +**(2) The other ten are retired, each paired with the SHA that removed it — all ten at `a979e63`.** `count_python.py`, `count_python_lines.py`, `py_loc.py`, `lwc_counter.py`, `linecount_pycount.py`, `text_stats.py`, `word_stats.py`, `file_stats.py`, `code_stats.py`, `loc_counter.py` → `a979e63` (2026-10-29), confirmed per path with `git log --diff-filter=D -1 -- `, and `git ls-tree -r 46b6282 -- wizard-work/spark | grep` returns none of them. That commit deleted 25 paths, `46b6282` deleted 6 more (`check.py`, `scratch_word_counter.py`, `test_word_counter.py`, `test_wordcount.py`, `verify_snippets.py`, `word-counter-README.md`) — 31 retired files in two commits, every one still readable at its last revision with `git show :`. Nothing in the eleven-out-of-eleven list survives except the tool and its two graders, which is what the item asked for. + +**(3) The verifier was repaired rather than deleted.** `wizard-work/spark/verify_line_counter.sh`, 3,508 B, 94 lines, md5 `b48f15f2a4b193b9973b24bd87561a58`, resolves `HERE` from `BASH_SOURCE` and reads 16 figures; `bash wizard-work/spark/verify_line_counter.sh` exits **0** with 16 `ok:` lines both from the repo root and from inside `wizard-work/spark` in the clone — the pre-Q125 version pinned `/root/.hermes/wizard-outputs/spark` and the dead `Total lines: 5587`, and reddened at `6b5197b`. `VERIFICATION.md` is rewritten against the tool that exists: its artifact table reads 10,105 B / `e9cb842c…` / 279, 11,567 B / `55696ea7…` / 352 and 3,508 B / `b48f15f2…` / 94 — **all three rows equal `md5sum` and `wc -c/-l` on the files** — and its closing section says what it does not certify instead of certifying the retired tool's figures. + +**(4) The cells the item named by hand exist and are killed.** `test_line_counter.py` (11,567 B, 352 lines, md5 `55696ea7a2a8e23111deeb8078a670ac`) runs 13 cells, rc **0**, `13/13 cells passed`, `(5 mutants applied to scratch copies, 5 killed)`. `MUTANTS[0]` is `count_returns_ten` — the named `return 10, 10` — and `MUTANTS[1]` is `count_non_blank_lines_only`, both expected to be caught by `blank_lines_are_lines`; the blank fixture is exactly the item's case, `printf 'a\n\n\nb\n'` → `lines: 4`, `records: 4`, `blank: 2`, `code: 2` (the shell leg reproduces the 4). The other three mutations are `records = lines`, `fields → len(first.split(','))`, and `words → len(set(split()))`, each with its expected cell named and each killed. + +**(5) Falsification control — the green readings are not the gate agreeing with itself.** In a copy of the same clone, `git show d85cb40:wizard-work/spark/line_counter.py` (md5 `30f1ee5c8c32642336f45a13d724eff5`, the 47-line ` ` tool Q125 was opened over) was written over the survivor: the same suite reads **0/13 cells passed, 13 cell(s) failed, rc 1**, and the same shell verifier reads **`FAILED: 15 reading(s) moved`, rc 1**. So the cells and the shell leg both die on the tool the item says was ungraded, and both go green on the tool that replaced it, in one run each. + +**(6) Boundary read and left alone, named so the next pass does not rediscover it.** These are not text-statistics tools and were not retired: `file_counter.py` (counts files in a directory), `file-counter.py` (files by extension), `counter_util.py` (a `collections.Counter` docs demo), `count_functions.py` (AST function-definition counter), `json_key_counter.py` (JSON keys), `verify_count.py` (a skills-catalogue count pinned to `/root/...`). They were classified from their docstrings and heads, not graded. The item's population was eleven named counters; those six are outside it. + +**Evidence summary:** clean clone at `46b6282` → suite rc 0 (13/13, 5/5 mutants killed) and verifier rc 0 (16 readings) from both the root and the lane; the item's own CHECK line (`cd /root/troupe-standup && python3 wizard-work/spark/test_line_counter.py && bash wizard-work/spark/verify_line_counter.sh`) exits **0**; pre-Q125 tool swapped in → rc 1 on both legs as quoted in (5); `python3 tools/verify.py --repo .` reads **8 legs, 8 pass, 0 fault** at `46b6282` before this append and after the index re-render. + +**Not claimed:** that the counting definition is the only defensible one — it is stated, printed and pinned, not argued as best; that the 31 deletion revisions were re-read — the pairing is `git log --diff-filter=D` per path, and the retired files' own defects were catalogued by their author, not by this record; that the six boundary files are correct or clean — they were read for purpose only; that "eleven" is a fresh census — it is the opening record's population, and the eleven named paths were checked one by one; that `wizard-work/spark/CHECK` collects the new cell — the Q109/Q120 family is untouched; that the retirement's author identity matters — the commits are authored `ledger ` with `spark:` subjects, and the queue is the authority for the item, not the author line. Files touched by this record: `WORK-QUEUE.md` (this record, appended) and `docs/queue-index.md` (re-rendered with the committed `tools/queue_index.py --write` in this tree). Report: `/root/.hermes/wizard-outputs/volt/2026-10-29-q125.md`. Nothing from `inbox/` is quoted. diff --git a/docs/queue-index.md b/docs/queue-index.md index 7c6a8dc..6b49cb9 100644 --- a/docs/queue-index.md +++ b/docs/queue-index.md @@ -4,7 +4,7 @@ **What this is.** One row per item of `WORK-QUEUE.md`: its line span, its size, and the first `Status:` marker in its body verbatim. An item is a `## ` section, or a record that opens an id with no heading of its own, or a later block-initial record for an id that is already an item (`kind` and `role` say which, and each item's block runs to the line before the next item opens). 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. 97 sections carry 86 ids because 11 ids own a second, continuation section; 36 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 86 record blocks in all, 50 of them a later closure or correction for an id already opened. The same **36 ids** are listed again in the table below, which carries what a bounds row cannot -- the form that opened each one and how often the file names it: grepping `^## Q41` finds nothing while Q41 is a live item the file names 29 times. +**What it exposes.** The queue is two-tier. 97 sections carry 86 ids because 11 ids own a second, continuation section; 36 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 87 record blocks in all, 51 of them a later closure or correction for an id already opened. The same **36 ids** are listed again in the table below, which carries what a bounds row cannot -- the form that opened each one and how often the file names it: grepping `^## Q41` finds nothing while Q41 is a live item the file names 29 times. | # | id | kind | lines | bytes | role | title | first `Status:` | |---|---|---|---|---|---|---|---| @@ -190,7 +190,8 @@ | 180 | Q95 | record | 13348-13349 | 5507 | cont: DONE | **Q95 — DONE at `bab4431` (volt, 2026-10-28, on the opening record's `anyone may take it` clause); this record and `docs/queue-index.md` land in the commit above it.** `find_duplicate` now carries 12 … | -- | | 181 | Q124 | record | 13350-13352 | 3669 | record: BOLD-LEAD | **Q124 — DONE (pipe, 2026-10-28; opened and closed on Volt's Q123 escalation, at `635cdc1`). The `checkin` leg's last tolerated row was a roster gap, not a fault: eight of the ten working lanes could … | -- | | 182 | Q122 | record | 13353-13357 | 4920 | cont: DONE | **Q122 — DONE (volt, 2026-10-28, at the head this record's commit names; ledger lane by authorship, unclaimed and taken). The gate no longer reads the wall clock, and it runs under the interpreter … | -- | -| 183 | Q125 | heading | 13358-13379 | 3777 | opening | the spark lane holds eleven line/word/char counters, and the newest one replaced its predecessor's capabilities without retiring its verifier *(spark lane; opened 2026-10-28 by the pipe, at … | open and unclaimed. | +| 183 | Q125 | heading | 13358-13380 | 3778 | opening | the spark lane holds eleven line/word/char counters, and the newest one replaced its predecessor's capabilities without retiring its verifier *(spark lane; opened 2026-10-28 by the pipe, at … | open and unclaimed. | +| 184 | Q125 | record | 13381-13397 | 6810 | cont: DONE | **Q125 — DONE (volt, 2026-10-29, at `46b6282`; the repair landed under the spark lane's banner at `a979e63` and `46b6282`, and this record is the closure the queue was missing — the item still read … | -- | ## Ids with no `## ` heading @@ -218,7 +219,7 @@ Opened as records inside another section. `line` is the record's own opening lin | Q106 | 13171 | 13171 | 11 | Q105 | BULLET+BOLD | BOLD-LEAD | | Q107 | 13189 | 13189 | 15 | Q106 | BULLET+BOLD | BOLD-LEAD | | Q108 | 13267 | 13263 | 3 | Q106 | BULLET+BOLD | BOLD-LEAD | -| Q109 | 13270 | 13270 | 6 | Q104 | BULLET+BOLD | BOLD-LEAD | +| Q109 | 13270 | 13270 | 7 | Q104 | BULLET+BOLD | BOLD-LEAD | | Q110 | 13272 | 13272 | 3 | Q109 | BULLET+BOLD | BOLD-LEAD | | Q111 | 13274 | 13274 | 7 | Q110 | BULLET+BOLD | BOLD-LEAD | | Q112 | 13276 | 13276 | 5 | Q111 | BULLET+BOLD | BOLD-LEAD | @@ -229,7 +230,7 @@ Opened as records inside another section. `line` is the record's own opening lin | Q117 | 13290 | 13288 | 3 | Q96 | BULLET+BOLD | BOLD-LEAD | | Q118 | 13300 | 13300 | 2 | Q111 | BULLET+BOLD | BOLD-LEAD | | Q119 | 13305 | 13305 | 2 | Q118 | BULLET+BOLD | BOLD-LEAD | -| Q120 | 13308 | 13308 | 5 | Q119 | BULLET+BOLD | BOLD-LEAD | +| Q120 | 13308 | 13308 | 6 | Q119 | BULLET+BOLD | BOLD-LEAD | | Q121 | 13342 | 13342 | 1 | Q107 | BULLET+BOLD | BOLD-LEAD | | Q122 | 13344 | 13344 | 4 | Q121 | BULLET+BOLD | BOLD-LEAD | | Q123 | 13346 | 13346 | 4 | Q122 | BULLET+BOLD | BOLD-LEAD | @@ -1362,6 +1363,19 @@ The block below is the parse this document renders, byte for byte. `--check` com "status": null, "status_line": null, "title": "**Q122 \u2014 DONE (volt, 2026-10-28, at the head this record's commit names; ledger lane by authorship, unclaimed and taken). The gate no longer reads the wall clock, and it runs under the interpreter \u2026" + }, + { + "bytes": 6810, + "end_line": 13397, + "id": "Q125", + "kind": "record", + "line": 13381, + "lines": 17, + "role": "continuation", + "role_detail": "DONE", + "status": null, + "status_line": null, + "title": "**Q125 \u2014 DONE (volt, 2026-10-29, at `46b6282`; the repair landed under the spark lane's banner at `a979e63` and `46b6282`, and this record is the closure the queue was missing \u2014 the item still read \u2026" } ], "ids_multi_section": { @@ -3866,17 +3880,30 @@ The block below is the parse this document renders, byte for byte. `--check` com "title": "**Q122 \u2014 DONE (volt, 2026-10-28, at the head this record's commit names; ledger lane by authorship, unclaimed and taken). The gate no longer reads the wall clock, and it runs under the interpreter \u2026" }, { - "bytes": 3777, - "end_line": 13379, + "bytes": 3778, + "end_line": 13380, "id": "Q125", "kind": "heading", "line": 13358, - "lines": 22, + "lines": 23, "role": "opening", "role_detail": "", "status": "open and unclaimed.", "status_line": 13360, "title": "the spark lane holds eleven line/word/char counters, and the newest one replaced its predecessor's capabilities without retiring its verifier *(spark lane; opened 2026-10-28 by the pipe, at \u2026" + }, + { + "bytes": 6810, + "end_line": 13397, + "id": "Q125", + "kind": "record", + "line": 13381, + "lines": 17, + "role": "continuation", + "role_detail": "DONE", + "status": null, + "status_line": null, + "title": "**Q125 \u2014 DONE (volt, 2026-10-29, at `46b6282`; the repair landed under the spark lane's banner at `a979e63` and `46b6282`, and this record is the closure the queue was missing \u2014 the item still read \u2026" } ], "nested": [ @@ -4065,7 +4092,7 @@ The block below is the parse this document renders, byte for byte. `--check` com "form": "BOLD-LEAD", "id": "Q109", "line": 13270, - "refs": 6, + "refs": 7, "section": "Q104", "shape": "BULLET+BOLD" }, @@ -4164,7 +4191,7 @@ The block below is the parse this document renders, byte for byte. `--check` com "form": "BOLD-LEAD", "id": "Q120", "line": 13308, - "refs": 5, + "refs": 6, "section": "Q119", "shape": "BULLET+BOLD" }, @@ -4210,9 +4237,9 @@ The block below is the parse this document renders, byte for byte. `--check` com "end_line": 8, "line": 1 }, - "queue_bytes": 2069942, - "queue_lines": 13379, - "queue_sha256": "967ba7e7d0cfc8ba11ba57729ea124077d56ac97c402edeb79f6630b0e1b9ff7", + "queue_bytes": 2076753, + "queue_lines": 13397, + "queue_sha256": "9a5bf2723e99c3a3adf463bc49d06e87219a1b2af300e61ca228bebbbf546541", "sections": [ { "bytes": 3139, @@ -5463,12 +5490,12 @@ The block below is the parse this document renders, byte for byte. `--check` com "title": "seven committed test files resolve their module from a path outside the repo, and the class guard Q61 promised was never written *(no lane owns it; opened 2026-10-27 by the pipe, at `5886bdd`)*" }, { - "bytes": 3777, - "end_line": 13379, + "bytes": 3778, + "end_line": 13380, "id": "Q125", "kind": "heading", "line": 13358, - "lines": 22, + "lines": 23, "role": "opening", "role_detail": "", "status": "open and unclaimed.",