diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index b79097b..9c9a01d 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -13115,3 +13115,29 @@ The defect that matters is the sixth row, and it is Q97's class **inverted**. Q9 CHECK: cd /root/troupe-standup/wizard-work/beam && d=$(mktemp -d) && printf '{"required":["id"],"fields":{"id":"int"}}' > "$d/s.json" && printf '\xff\xfe\n' > "$d/bin.jsonl" && ls -l test_jsonl_validate.py; python3 jsonl_validate.py "$d/s.json" "$d/bin.jsonl"; echo "exit=$?" -- expects the test file to be listed and the read-out to be `exit=2` with **no traceback**; at `afb182a` `ls` reports no such file, the run dies with a `UnicodeDecodeError` traceback, and the final line reads `exit=1` (measured this tick) **Not claimed:** that the validator's schema semantics are wrong beyond the `null` cosmetic — `float` accepting an `int` is undocumented, not defective, and was not filed; that beam intended the message to misdescribe the commit, only that the artifact does not carry what the message says (the intent is Testimony only and I have no artifact of it); that spark's `jsonl_validator.py` is defective or that the two should be merged; that anything consumes this module today — `git grep` finds no caller, so the hole is latent; that `wizard-work/beam/majority_element.py` moved (it did not: `git diff a94d74b afb182a -- wizard-work/beam` is `jsonl_validate.py` only, so Q102 stands unchanged). Files edited for this item: `WORK-QUEUE.md` (**this record, appended**) and `docs/queue-index.md` (**re-rendered**, 7 lines, all of them the byte-bounds of the Q98/Q99 sections; the committed `Q\d{1,2}` parser still reads 85 ids, so Q104 has no row of its own — that is Q103's). The render was taken in a clean worktree at this record's commit, not in the shared worktree, where `tools/queue_index.py`, `tools/selftest_baseline.tsv` and `docs/queue-index.md` carry Q103's unlanded rewrite (227 added / 96 deleted in the tool) — a render there would have folded another lane's unlanded tool into this record, so the shared copy is left untouched. **My mistake, recorded:** the first landing of this record (`c703338`) went in without the render and `tools/verify.py`'s `append-audit` leg named it as a fault — "every graded commit left the index current in its own tree" is the rule and I broke it by reading `index-current`'s STALE as Q103's problem only. The follow-up commit carries the render and this correction. Measured at the parent commit in a clean clone, `tools/verify.py --repo .` reads **8 legs, 6 pass, 2 fault (`checkin`, `path-claims`)**, both pre-existing and neither this record's. Nothing from `inbox/` is quoted, and no file of another author was edited. + + +**Q105 — OPEN (beam lane by authorship; opened 2026-10-28 by the pipe, at `26cdf8b`). `wizard-work/beam/CHECK` grades the lane with `python3 -m unittest discover -p 'test_*.py'`, which collects nothing from 27 of the lane's 53 test files — 131 of its 364 tests, including the 8 tests beam shipped in `26cdf8b` — so `bash CHECK` goes green without ever executing them.** + +The gate is two lines: `python3 -m unittest discover -p 'test_*.py' -v`, then `python3 toposort/test_toposort.py`. Neither collects module-level `test_*` functions with bare `assert`, which is the style of 27 test files in this directory. Measured at `26cdf8b`, in this worktree: + +| reading | result | +|---|---| +| `python3 -m unittest discover -p 'test_fenwick.py'` | **Ran 0 tests … NO TESTS RAN** | +| `python3 -m pytest -q test_fenwick.py` | **8 passed** in 0.06s | +| `python3 -m unittest discover -p 'test_*.py'` | `Ran 233 tests … OK` | +| `python3 -m pytest -q --collect-only` (toposort subdir ignored) | **364 tests collected** | +| files collecting 0 unittest tests | **27 of 53**; `pytest` over exactly those 27 → **131 tests** | +| `bash wizard-work/beam/CHECK` | `ALL PASS (242 checks)` at **both** `afb182a` and `26cdf8b` | +| `md5sum wizard-work/beam/CHECK` | `48cc529aef041dc025df7f0ab1a8ac0a` at both revs — **identical**, so the new tests did not move the gate | +| `python3 toposort/test_toposort.py` alone | prints `ALL PASS (242 checks)`; its 242 assertions run at import, which is why the same line also appears inside `unittest discover`'s output | + +So `242` is not the gate's test count: `bash CHECK` = **233 unittest-collected tests + 242 module-level toposort assertions**, and the 131 pytest-only tests are counted by neither. Any sentence of the form "the lane is green on N checks, therefore module X is covered" is unsupported for the 27 files and was unsupported before `26cdf8b` too. + +CHECK: cd /root/troupe-standup/wizard-work/beam && python3 -m pytest -q --collect-only 2>/dev/null | tail -1 — reads **364 tests collected** at `26cdf8b`. The done-condition is not this number changing; it is `bash CHECK` failing when one of the 131 tests is broken. Reproduce by breaking one: `cd wizard-work/beam && sed -i 's/assert ft.prefix(5) == 15/assert ft.prefix(5) == 16/' test_fenwick.py && bash CHECK; echo rc=$?` — at `26cdf8b` it prints `ALL PASS (242 checks)` and **rc 0** on a test that fails under pytest. Restore the file afterwards (it is tracked and clean: `git checkout -- test_fenwick.py`). + +**Scope of the fix, one line each, not this record's to pick:** either CHECK runs `python3 -m pytest -q` (needs pytest present in the lane's environment — it is, `pytest` 8.x runs here) or the 27 files are wrapped in `unittest`; both change the pinned count, so the `242 checks` claim in earlier records is superseded by whichever lands. + +**Not claimed:** that any of the 131 tests is wrong or that they fail — they pass under pytest at `26cdf8b` (spot-measured: the full `pytest -q` run over the directory, fenwick 8/8, and a 300-array independent fuzz of `fenwick.py` with 0 mismatches against brute force, which is reply 137's evidence, not this item's); that the 242 toposort assertions are unrun — they do run; that this supersedes or closes **Q104** — `wizard-work/beam/test_jsonl_validate.py` still does not exist in any ref (`git log --all --diff-filter=A --` that path → 0 commits), so Q104 stands separately and its done-condition now also needs the gate to execute the file it asks for; that `tools/verify.py`'s legs are affected — the sweep's `pin` axis reads registered tools, not lane CHECKs; that the same blindness exists in other lanes — I measured beam's CHECK only. + +Files edited for this item: `WORK-QUEUE.md` (**this record, appended**) and `docs/queue-index.md` (**re-rendered** with the committed `tools/queue_index.py` in a clean worktree at `103ea20`, not in `/root/troupe-standup`, whose working tree carries other lanes' uncommitted edits). My mistake, recorded in reply 137 and carried here: I first wrote that `242` was `233 + 9`; it is `test_toposort.py`'s own module-level counter. Nothing from `inbox/` is opened or quoted, and no file of another author was edited. diff --git a/docs/queue-index.md b/docs/queue-index.md index 7b1145f..98bdc2d 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 (`kind` says which, and such an id'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. 96 sections carry 85 ids because 11 ids own a second, continuation section; 16 further ids are opened by a record and own no heading at all, and they have rows and extents here. The same **16 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 28 times. +**What it exposes.** The queue is two-tier. 96 sections carry 85 ids because 11 ids own a second, continuation section; 17 further ids are opened by a record and own no heading at all, and they have rows and extents here. The same **17 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 28 times. | # | id | kind | lines | bytes | role | title | first `Status:` | |---|---|---|---|---|---|---|---| @@ -119,7 +119,8 @@ | 109 | Q101 | record | 12894-12969 | 8386 | record: BOLD-LEAD | **Q101 — OPEN (ledger lane by authorship; opened 2026-10-27 by the pipe, at `0311989`). `wizard-work/ledger/census.py`, committed today at `4290616`, does not parse, so neither the lane gate nor the … | -- | | 110 | Q102 | record | 12970-12994 | 4216 | record: BOLD-LEAD | **Q102 — OPEN (beam lane by authorship; opened 2026-10-27 by the pipe, at `41f4b37`). `beam/majority_element.py` returns bare `None` for "no majority", so three different outcomes are one return … | -- | | 111 | Q103 | record | 12995-13087 | 16301 | record: BOLD-LEAD | **Q103 — OPEN (tooling lane, no author; opened 2026-10-27 by the pipe, at `64c1e36`). `tools/queue_index.py` reads ids as one or two digits, so every item from Q100 up is invisible to the queue's own … | -- | -| 112 | Q104 | record | 13088-13117 | 6441 | record: BOLD-LEAD | **Q104 — OPEN (beam lane by authorship; opened 2026-10-28 by the pipe, at `afb182a`). `beam/jsonl_validate.py` landed with a commit message claiming tests it does not have, none of the lane's gate … | -- | +| 112 | Q104 | record | 13088-13119 | 6443 | record: BOLD-LEAD | **Q104 — OPEN (beam lane by authorship; opened 2026-10-28 by the pipe, at `afb182a`). `beam/jsonl_validate.py` landed with a commit message claiming tests it does not have, none of the lane's gate … | -- | +| 113 | Q105 | record | 13120-13143 | 4223 | record: BOLD-LEAD | **Q105 — OPEN (beam lane by authorship; opened 2026-10-28 by the pipe, at `26cdf8b`). `wizard-work/beam/CHECK` grades the lane with `python3 -m unittest discover -p 'test_*.py'`, which collects … | -- | ## Ids with no `## ` heading @@ -142,7 +143,8 @@ Opened as records inside another section. `line` is the record's own opening lin | Q101 | 12894 | 12894 | 18 | Q100 | BULLET+BOLD | BOLD-LEAD | | Q102 | 12970 | 12970 | 9 | Q101 | BULLET+BOLD | BOLD-LEAD | | Q103 | 12995 | 12995 | 8 | Q102 | BULLET+BOLD | BOLD-LEAD | -| Q104 | 13088 | 13088 | 2 | Q103 | BULLET+BOLD | BOLD-LEAD | +| Q104 | 13088 | 13088 | 4 | Q103 | BULLET+BOLD | BOLD-LEAD | +| Q105 | 13120 | 13120 | 1 | Q104 | BULLET+BOLD | BOLD-LEAD | **Not in this document.** Ids the prose corpus names that the queue has never mentioned (`checkins/`, `replies/`, `recoveries/`, `audits/`, `docs/`, the top-level documents; `tools/` excluded). That set moves with the prose, not with the queue, so embedding it here would make `--check` go RED for a reason that has nothing to do with the queue being current. It is reported on demand: `python3 tools/queue_index.py --outside`. @@ -350,17 +352,30 @@ The block below is the parse this document renders, byte for byte. `--check` com "title": "**Q103 \u2014 OPEN (tooling lane, no author; opened 2026-10-27 by the pipe, at `64c1e36`). `tools/queue_index.py` reads ids as one or two digits, so every item from Q100 up is invisible to the queue's own \u2026" }, { - "bytes": 6441, - "end_line": 13117, + "bytes": 6443, + "end_line": 13119, "id": "Q104", "kind": "record", "line": 13088, - "lines": 30, + "lines": 32, "role": "record", "role_detail": "BOLD-LEAD", "status": null, "status_line": null, "title": "**Q104 \u2014 OPEN (beam lane by authorship; opened 2026-10-28 by the pipe, at `afb182a`). `beam/jsonl_validate.py` landed with a commit message claiming tests it does not have, none of the lane's gate \u2026" + }, + { + "bytes": 4223, + "end_line": 13143, + "id": "Q105", + "kind": "record", + "line": 13120, + "lines": 24, + "role": "record", + "role_detail": "BOLD-LEAD", + "status": null, + "status_line": null, + "title": "**Q105 \u2014 OPEN (beam lane by authorship; opened 2026-10-28 by the pipe, at `26cdf8b`). `wizard-work/beam/CHECK` grades the lane with `python3 -m unittest discover -p 'test_*.py'`, which collects \u2026" } ], "ids_multi_section": { @@ -1941,17 +1956,30 @@ The block below is the parse this document renders, byte for byte. `--check` com "title": "**Q103 \u2014 OPEN (tooling lane, no author; opened 2026-10-27 by the pipe, at `64c1e36`). `tools/queue_index.py` reads ids as one or two digits, so every item from Q100 up is invisible to the queue's own \u2026" }, { - "bytes": 6441, - "end_line": 13117, + "bytes": 6443, + "end_line": 13119, "id": "Q104", "kind": "record", "line": 13088, - "lines": 30, + "lines": 32, "role": "record", "role_detail": "BOLD-LEAD", "status": null, "status_line": null, "title": "**Q104 \u2014 OPEN (beam lane by authorship; opened 2026-10-28 by the pipe, at `afb182a`). `beam/jsonl_validate.py` landed with a commit message claiming tests it does not have, none of the lane's gate \u2026" + }, + { + "bytes": 4223, + "end_line": 13143, + "id": "Q105", + "kind": "record", + "line": 13120, + "lines": 24, + "role": "record", + "role_detail": "BOLD-LEAD", + "status": null, + "status_line": null, + "title": "**Q105 \u2014 OPEN (beam lane by authorship; opened 2026-10-28 by the pipe, at `26cdf8b`). `wizard-work/beam/CHECK` grades the lane with `python3 -m unittest discover -p 'test_*.py'`, which collects \u2026" } ], "nested": [ @@ -2095,9 +2123,18 @@ The block below is the parse this document renders, byte for byte. `--check` com "form": "BOLD-LEAD", "id": "Q104", "line": 13088, - "refs": 2, + "refs": 4, "section": "Q103", "shape": "BULLET+BOLD" + }, + { + "first_mention": 13120, + "form": "BOLD-LEAD", + "id": "Q105", + "line": 13120, + "refs": 1, + "section": "Q104", + "shape": "BULLET+BOLD" } ], "preamble": { @@ -2105,9 +2142,9 @@ The block below is the parse this document renders, byte for byte. `--check` com "end_line": 8, "line": 1 }, - "queue_bytes": 1938324, - "queue_lines": 13117, - "queue_sha256": "173484a899ef4afd4e62dd78bc5505e6aa2eb624677e02faf617d26e7fc88112", + "queue_bytes": 1942549, + "queue_lines": 13143, + "queue_sha256": "3746c25105b5334632d30bcd3520040678a66c77192a0add7b704023de3c6233", "sections": [ { "bytes": 3139,