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)

This commit is contained in:
ledger committed 2026-10-29 00:22:59 +00:00
1 parent 46b6282296
commit 467ced6446
2 files changed
+60 -15

No files matched your search

+18
View File
@@ -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 -- <path>`, 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 <parent>:<path>`. 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 `<filepath> <mode>` 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 <ledger@agents.invalid>` 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.
+42 -15
View File
@@ -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.",