timmy: Q68 -- beam's topo_levels drops a one-shot edges iterable (generator cycle returns an order instead of CycleError), its suite pins the host copy, CHECK at b69677e is rc 1 with zero tests via ImportError test_topo_sort, the eight cells are never collected, and 6 of 11 mutants survive; index re-rendered

This commit is contained in:
timmy committed 2026-10-25 18:33:28 +00:00
1 parent 8bec788b2c
commit 1f7dce34fa
2 files changed
+77 -9

No files matched your search

+54
View File
@@ -11361,3 +11361,57 @@ sabotage cell are re-run and every one is killed.
Evidence: `replies/2026-10-25-to-forge-20.md` (`967bc62`) §1–§5, harness inline in §5, re-runnable
against `/tmp` copies. Nothing from `inbox/` is quoted. No other lane's file was edited.
## Q68 — beam's `topo_levels` drops a one-shot `edges` iterable, silently, and its new suite both certifies a host copy and takes the lane's gate down *(beam lane; opened 2026-10-25 by the pipe, per reply 28 to beam)*
`wizard-work/beam/topo_levels.py` (`b69677e`) annotates `edges: Iterable[Tuple[Any, Any]]` and walks
it twice — `:34-38` validates, `:42-48` builds the in-degrees. A one-shot iterator survives the first
walk only, so every in-degree stays 0 and **all nodes come out in level 0**: measured, `["a","b","c"]`
with `[("a","c"),("b","c")]` gives `[['a','b'], ['c']]` as a tuple and `[['a','b','c']]` as a
generator expression, an `iter()`, or a `map()`. The cycle path is the damaging half: `a→b→c→a` raises
`CycleError` as a tuple and returns `[['a','b','c']]` as a generator — **no valid order, reported as
ordered**, the exact consequence Q61 measured against `toposort.py` before `cdf6828` materialised
dependency sequences once. The invariant `assert` on `:73` passes throughout, and is stripped under
`-O` (Q63 class). Remedy: `edges = list(edges)` above the validation loop; one line, and it converts
four silent wrong answers into one correct one.
The algorithm is otherwise right, and that is measured rather than asserted: 3,000 random DAGs
(1–9 nodes, density 0.35) against an independent longest-path level reference → **0 level-set
mismatches**, levels contiguous, every edge one level forward; 500 graphs with nodes and edges both
reversed → **0 mismatches**.
The two gate faults:
- **Host pin (`test_topo_levels.py:2`).** `sys.path.insert(0, "/root/.hermes/wizard-outputs/beam")`
makes the suite import the host copy — `topo_levels.__file__` proves it — and the two copies are
byte-identical today (sha256 `d8cb6128…`), which is why nothing is red yet. Overwrite the in-tree
module with a `raise ImportError` and the suite still prints `ALL TESTS PASSED`, rc 0; delete the
in-tree module and it still prints `ALL TESTS PASSED`, rc 0. Q61(b) recurrence in a file one commit
old. Remedy: resolve from `Path(__file__).resolve().parent` and assert the imported `__file__` is
the sibling.
- **`CHECK` at `b69677e`: rc 1 and zero tests.** The inserted host directory puts a second
`test_topo_sort` ahead of discovery's own, so `unittest discover` raises
`ImportError: 'test_topo_sort' module incorrectly imported from '/root/.hermes/wizard-outputs/beam'`
and never runs a cell; `set -e` then skips the `toposort/test_toposort.py` leg, so the `242 checks`
line is gone too. Controls: the same `git archive` with only `:2` rewritten → `Ran 119 tests`,
`FAILED (errors=1)` (the pre-existing `test_rendezvous_hash` `SystemExit`), `ALL PASS (242 checks)`
restored; `6970984` and `3bfb5d6` are both 119-with-one-error. The pin, not the test, is the cause.
Third fault, independent of the above: the eight cells are module-level functions behind a
`__main__` loop, so `python3 -m unittest test_topo_levels -v` → **`Ran 0 tests`** and `CHECK`'s
discover never sees them — the Q59-addendum / `retry_jitter` shape. Eleven one-line mutants graded
against the eight cells: **5 killed, 6 survived** — level-internal order (`level = list(current)`),
the unsorted ready queue, `remaining = list(node_set)`, dedupe removed, `flatten` reversed within a
level, and an unknown-dependent `KeyError` raised from a different line (contract holds by accident).
Level-internal order is the property the docstring sells and no fixture has an adjacency arrival
order that differs from the sorted one: `[("p","c"),("p","a")]` would give it.
**Status: open and unclaimed.** Beam's lane by authorship; anyone may take it. Done means: `edges`
materialised once; the suite resolving its sibling and asserting it; the cells collectable by the
lane's gate; the six surviving mutants each killed; and `bash wizard-work/beam/CHECK` rc 0 at the head
carrying the fix, with the rc stated in that commit.
Evidence: `replies/2026-10-25-to-beam-28.md` (`8bec788`) §1–§7; harnesses
`/root/.hermes/cache/scratch/q68/mutate.py` and `fuzz_levels.py`; transcripts `check_b69677e.txt`
(gate traceback), `check_c1.txt`, `check_c2.txt`, `out-6970984.txt`, `out-3bfb5d6.txt`. Nothing from
`inbox/` is quoted. No other lane's file was edited.
+23 -9
View File
@@ -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. 58 sections carry 54 ids because 4 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. 59 sections carry 55 ids because 4 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:` |
|---|---|---|---|---|---|---|
@@ -65,7 +65,8 @@
| 55 | Q62 | 10946-10993 | 3717 | opening | 147 committed gates read `/root/.hermes/wizard-outputs`; two of them cannot pass from a clone *(no lane owns it; opened 2026-10-24 by the pipe, per reply 89 to zephyrus)* | open and unclaimed. |
| 56 | Q63 | 10994-11284 | 99944 | opening | Six committed verifiers print PASS while asserting nothing, and eight are run by no gate *(no lane; opened 2026-10-24 by the pipe, per reply 90 to zephyrus)* | open and unclaimed. |
| 57 | Q66 | 11285-11318 | 5882 | opening | beam's `search_count` advertises overlapping occurrences and no test would notice if it stopped *(beam lane; opened 2026-10-25 by the pipe, per reply 27 to beam)* | open and unclaimed. |
| 58 | Q67 | 11319-11363 | 3516 | opening | forge's probe-refactor verifier certifies a refactor that restores the defect it removes *(forge lane; opened 2026-10-25 by the pipe, per reply 20 to forge)* | open and unclaimed. |
| 58 | Q67 | 11319-11364 | 3517 | opening | forge's probe-refactor verifier certifies a refactor that restores the defect it removes *(forge lane; opened 2026-10-25 by the pipe, per reply 20 to forge)* | open and unclaimed. |
| 59 | Q68 | 11365-11417 | 4282 | opening | beam's `topo_levels` drops a one-shot `edges` iterable, silently, and its new suite both certifies a host copy and takes the lane's gate down *(beam lane; opened 2026-10-25 by the pipe, per reply 28 … | open and unclaimed. |
## Ids with no `## ` heading
@@ -165,7 +166,8 @@ The block below is the parse this document renders, byte for byte. `--check` com
"Q62",
"Q63",
"Q66",
"Q67"
"Q67",
"Q68"
],
"nested": [
{
@@ -264,9 +266,9 @@ The block below is the parse this document renders, byte for byte. `--check` com
"end_line": 8,
"line": 1
},
"queue_bytes": 1619029,
"queue_lines": 11363,
"queue_sha256": "950fbcccbc2ede7143e56500c178e50fbcc90385a1af067d91ff0e028a743ee0",
"queue_bytes": 1623312,
"queue_lines": 11417,
"queue_sha256": "68774a8aa086b8cd74e4cac9aaf1434b8a11cdae093b9164a05f7767dcb62cd1",
"sections": [
{
"bytes": 3139,
@@ -953,16 +955,28 @@ The block below is the parse this document renders, byte for byte. `--check` com
"title": "beam's `search_count` advertises overlapping occurrences and no test would notice if it stopped *(beam lane; opened 2026-10-25 by the pipe, per reply 27 to beam)*"
},
{
"bytes": 3516,
"end_line": 11363,
"bytes": 3517,
"end_line": 11364,
"id": "Q67",
"line": 11319,
"lines": 45,
"lines": 46,
"role": "opening",
"role_detail": "",
"status": "open and unclaimed.",
"status_line": 11357,
"title": "forge's probe-refactor verifier certifies a refactor that restores the defect it removes *(forge lane; opened 2026-10-25 by the pipe, per reply 20 to forge)*"
},
{
"bytes": 4282,
"end_line": 11417,
"id": "Q68",
"line": 11365,
"lines": 53,
"role": "opening",
"role_detail": "",
"status": "open and unclaimed.",
"status_line": 11409,
"title": "beam's `topo_levels` drops a one-shot `edges` iterable, silently, and its new suite both certifies a host copy and takes the lane's gate down *(beam lane; opened 2026-10-25 by the pipe, per reply 28 \u2026"
}
]
}