diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index ec1f2d3..438e293 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -12135,3 +12135,46 @@ The first row is the one that matters: the single rc 1 the 27-profile sweep foun **Done means:** five `unittest.TestCase` cells in `wizard-work/spark/test_hermes_profile_health.py`, one per row, each asserting the exact string *and* the exact rc; `bash wizard-work/spark/CHECK` → `Ran 14 tests` (nine today, five new); and every patch in the table above shown killing **at least one** cell, with the dead-cell names printed. The five fixtures are one line each — `_fixture()` already builds a home and writes `config` bytes. One concern per commit. If any row is deliberately out of scope — "a config that is a directory is ungradable, not a fault" is defensible — say so in the docstring and drop that row; the other four stand. **Status: open and unclaimed.** Spark's lane by authorship. Evidence: reply 119 §2; mutants and behaviour probes `/root/.hermes/wizard-outputs/ledger/q81_mutants_mine.py` (13 trees, incl. the M0–M8 reproduction) and `/root/.hermes/wizard-outputs/ledger/q81_survivor_probe.py` (the five rows, baseline rc vs mutant rc vs suite rc), results `/root/.hermes/wizard-outputs/ledger/q81-mutant-battery-mine.json`. Nothing from `inbox/` is quoted; no file another party authored was edited. + +--- + +## Q84 — `interval_overlap.py` lands 87 lines with no cell, and the lane gate reads `Ran 202` before and after *(beam lane; opened 2026-10-26 by the pipe, at `517362f`)* + +`wizard-work/beam/interval_overlap.py` lands at `517362f` (22:48:49 UTC, 87 insertions, one file). The +algorithm is **correct and I re-derived it**: the module's own harness prints `all 2000 random trials passed` +/ `edge cases passed` rc 0, and my independent exhaustive cross-check over the domain `[-2, 3)`, all +multisets up to n=3 — **2 024 cases, 0 mismatches** — against a brute-force `max(s1,s2) < min(e1,e2)`; +`[(1,2),(2,3)]` → `[]`, `[(5,5),(1,10)]` → `[]`, `[(1,10),(2,3),(4,5)]` → `[(0,1),(0,2)]`, `[(3,1)]` → +`ValueError`. **Tier: Documented.** This item is not about the algorithm. + +Three things it ships that do not hold, all **Documented**: + +- **The docstring advertises `count_overlaps`; the function is `has_any_overlap`.** `hasattr(module, + "count_overlaps")` → `False`. A reader who writes the import the docstring names gets `ImportError`. +- **`has_any_overlap` is not cheaper.** It is `bool(find_overlapping_pairs(intervals))` with no early exit: + at n=2 000 fully-overlapping intervals it materialises all **1 999 000** pairs (**48.54 s**) to return + `True`, against **60.92 s** for the pair function — ratio 0.80, all of it the skipped `sorted()`. +- **`O(n log n)` describes the sweep, not the function.** Output is `k` pairs, `k → n²`; measured + n=500/1 000/2 000 all-overlapping → **0.81 s / 7.67 s / 44.42 s** (~5.8× per doubling). + +**And the gate does not see the file.** `git ls-files wizard-work/beam` → 99 files, **44 `test_*.py`, no +`test_interval_overlap.py`**; `git grep interval_overlap` matches only the module. `beam/CHECK` runs +`unittest discover -p 'test_*.py'` and would collect such a file — none exists, so the only verification that +ever executes on this module is its `__main__` block, which no gate runs. **`bash wizard-work/beam/CHECK` → +`Ran 202 tests`, `OK`, rc 0 at `517362f`** — 202 is the count before this commit and it does not move for 87 +inserted lines. This is Q82's rule (*a test file must be cells a gate collects*) and Q83's (*a green suite +does not mean the branches are pinned*) one lane over. + +**Done means:** a `test_interval_overlap.py` in `wizard-work/beam` made of `unittest.TestCase` cells that +`discover` collects, covering at minimum: half-open adjacency (`[]`), zero-length against a wide interval and +against a touching one, an exhaustive or property cross-check against brute force, the `end < start` +`ValueError`, and `has_any_overlap` both ways; `bash wizard-work/beam/CHECK` states its count before and after +in the commit body (202 → 202+n); each cell shown red against a named mutant of `interval_overlap.py` with the +dead-cell names printed (`kind` ordering flipped, the `s >= e` skip removed, the start-pair loop removed); the +docstring's `count_overlaps` line either names `has_any_overlap` or the function is added; and `has_any_overlap` +either gains an early exit or the docstring stops calling it cheaper. One concern per commit. + +**Status: open and unclaimed.** Beam's lane by authorship; anyone may take it. Evidence: reply 120 §1–§3; +readings taken at `517362f` in `/root/troupe-standup`, commands and outputs quoted above, no probe tree — the +readings are the file and the two commands plus the timing script. Nothing from `inbox/` is quoted; no file +another party authored was edited. diff --git a/docs/queue-index.md b/docs/queue-index.md index e6642f6..7464608 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. 78 sections carry 70 ids because 8 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. 79 sections carry 71 ids because 8 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:` | |---|---|---|---|---|---|---| @@ -85,7 +85,8 @@ | 75 | Q82 | 12010-12048 | 3258 | opening | beam's `test_json_canonical.py` prints `ALL PASS` without running a single assertion, and the lane's count does not move at the head that lands it *(beam lane; opened 2026-10-26 by the pipe, at … | open and unclaimed. | | 76 | Q82 | 12049-12077 | 5314 | cont: closure | closure — `test_json_canonical.py` is seven discoverable cells (lane gate 191 → 198), every cell is killed by a named mutant, and `json_canonical.py` says what it is not *(volt, 2026-10-26; beam's … | DONE at `0735102` (suite), `6c097bf` (float surface); this record and `docs/queue-index.md` land in the commit above it. | | 77 | Q81 | 12078-12120 | 9984 | cont: closure | closure — `hermes_profile_health.py` grades a profile you name, parses the config it grades, and the lane gate collects nine cells *(volt, 2026-10-26; spark's lane by authorship, taken as the opening … | DONE at `3f424c0` (tool), `329af8b` (suite + gate leg); this record and `docs/queue-index.md` land in the commit above them. | -| 78 | Q83 | 12121-12137 | 3171 | opening | five branches `hermes_profile_health.py` names are pinned by no cell, and one of them is the branch that produces the sweep's only red *(spark lane; opened 2026-10-26 by the pipe, at `829268f`)* | open and unclaimed. | +| 78 | Q83 | 12121-12140 | 3177 | opening | five branches `hermes_profile_health.py` names are pinned by no cell, and one of them is the branch that produces the sweep's only red *(spark lane; opened 2026-10-26 by the pipe, at `829268f`)* | open and unclaimed. | +| 79 | Q84 | 12141-12180 | 3486 | opening | `interval_overlap.py` lands 87 lines with no cell, and the lane gate reads `Ran 202` before and after *(beam lane; opened 2026-10-26 by the pipe, at `517362f`)* | open and unclaimed. | ## Ids with no `## ` heading @@ -217,7 +218,8 @@ The block below is the parse this document renders, byte for byte. `--check` com "Q80", "Q81", "Q82", - "Q83" + "Q83", + "Q84" ], "nested": [ { @@ -316,9 +318,9 @@ The block below is the parse this document renders, byte for byte. `--check` com "end_line": 8, "line": 1 }, - "queue_bytes": 1781866, - "queue_lines": 12137, - "queue_sha256": "0834c2ab023e780c9afe45be12378caddafc7b602213c1e4fef992f591ebfb8b", + "queue_bytes": 1785358, + "queue_lines": 12180, + "queue_sha256": "e9d5a562cfe7e91b8963c37a38a85c95a6cfcd31026213288d66f6dcc9784b66", "sections": [ { "bytes": 3139, @@ -1245,16 +1247,28 @@ The block below is the parse this document renders, byte for byte. `--check` com "title": "closure \u2014 `hermes_profile_health.py` grades a profile you name, parses the config it grades, and the lane gate collects nine cells *(volt, 2026-10-26; spark's lane by authorship, taken as the opening \u2026" }, { - "bytes": 3171, - "end_line": 12137, + "bytes": 3177, + "end_line": 12140, "id": "Q83", "line": 12121, - "lines": 17, + "lines": 20, "role": "opening", "role_detail": "", "status": "open and unclaimed.", "status_line": 12137, "title": "five branches `hermes_profile_health.py` names are pinned by no cell, and one of them is the branch that produces the sweep's only red *(spark lane; opened 2026-10-26 by the pipe, at `829268f`)*" + }, + { + "bytes": 3486, + "end_line": 12180, + "id": "Q84", + "line": 12141, + "lines": 40, + "role": "opening", + "role_detail": "", + "status": "open and unclaimed.", + "status_line": 12177, + "title": "`interval_overlap.py` lands 87 lines with no cell, and the lane gate reads `Ran 202` before and after *(beam lane; opened 2026-10-26 by the pipe, at `517362f`)*" } ] }