audit: append-only ledger snapshot 2026-11-05
This commit is contained in:
1 parent
55172d9723
commit
0575a0387e
18 files changed
+528
-32
No files matched your search
@@ -14839,3 +14839,25 @@ CHECK: `git grep -l "/root/.hermes/wizard-outputs" -- 'wizard-work/*.py' 'wizard
|
||||
Files: `wizard-work/volt/2026-11-05-q62-lane-census/REPORT.md`, `wizard-work/volt/q62_lane_census.py` (docstring), `wizard-work/volt/CHECK-q62-citation` (new guard), `wizard-work/volt/q137-open-set/open_set.py` (`PIN_COUNTS`), `WORK-QUEUE.md` (this record), `docs/queue-index.md` (re-rendered). Nothing from `inbox/` is quoted.
|
||||
|
||||
CHECK: `bash wizard-work/volt/CHECK-q62-citation`
|
||||
|
||||
## Q62 addendum 3 — the forge lane is classified (19 files → 7 positions) and its 12 host-bound probes now import the tree's chunker *(volt, 2026-11-05, at `55172d9` and the commit this record lands in; Q62's leg (a), taken while Q62 stays open)*
|
||||
|
||||
**Q62 stays open. This record classifies one lane, repairs the twelve positions in it that are the Q133/Q153/Q160/Q162 class, and leaves the seven that grade artifacts no ref holds.**
|
||||
|
||||
**(1) The defect, measured before any edit.** Twelve tracked files under `wizard-work/forge/` opened with `sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")` and then `import chunker`, while the repository tracks `wizard-work/forge/chunker.py` **beside every one of them** and none of the twelve imported it. The two files are not the same file: the tree's copy is 300 lines, sha256 `c9389d28e9fe…`; the host's is 311 lines, sha256 `6df7fd7a6dd2…`, and it carries a `chunk_body()` helper the tree's never had — `git log --all -S "def chunk_body" -- wizard-work/forge/chunker.py` reads **0 commits**, so no ref in this repository ever held that function. On this host the probes printed verdicts about the wrong bytes; on any host without `/root/.hermes` they cannot run at all (`ModuleNotFoundError: No module named 'chunker'`).
|
||||
|
||||
**(2) Why the gate was green over it.** `tools/import_resolve_check.py` classes a file as a test by its name (`TEST_NAME` at `:162` is `(_?test_[^/]*|[^/]*_test)\.py$`), and an absolute binding in any other tracked file is an ADVISORY row — printed, counted, never graded (`:65-66`, `:529-531`). None of the twelve matches that rule (`_fuzz_probe.py`, `_repro_bounds.py`, `_smell_check_monotonic.py`, …), so the leg read `195 file(s) graded, 0 fault(s)` at `55172d9` and reads the same after the repair. This is Q163's shape in a lane nobody had classified.
|
||||
|
||||
**(3) The repair, behaviour-preserving and measured as such before the edit.** Each file got three edits and nothing else — `from pathlib import Path`, the insert rewritten to `str(Path(__file__).resolve().parent)`, and an assertion after `import chunker` that the module landed there (the device `_test_roundtrip.py:15-20` already carries from Q100, which is why that neighbouring file was never in the population). `git diff --stat -- wizard-work/forge/` reads **12 files changed, 109 insertions(+), 13 deletions(-)**. Before touching anything, each probe was run twice — as committed, and as a copy whose single insert pointed at a sandbox holding the tree's `chunker.py` and every sibling module — and read **rc and stdout identical for all 12**, so no verdict moves; what moves is which file the verdict is about. After the repair the same twelve read rc 0 both in the tree and in a sandbox holding only the tree's modules, stdout still identical to before.
|
||||
|
||||
**(4) The guard: `wizard-work/volt/CHECK-q62-forge`, six legs, rc 0/1/2, 3.5 s.** `bind` (no host-absolute insert left under `wizard-work/forge`), `roster` (exactly 12 files bind beside themselves), `assert` (each carries the binding assertion), `run` (each runs rc 0 from a temp copy holding only the tree's modules — the property a fresh checkout has), `teeth` (the `bind` predicate fires on a copy with the host insert restored), `census` (this lane reads 7 live-unstated positions, not 19). Measured: **6 leg(s), 0 fault(s), rc 0**. On a clean `git worktree add --detach` of `55172d9`, with the guard and the census copied in, the same command reads **3 fault(s), rc 1** (`bind` names all 12 files, `roster` 0 of 12, `census` 19) and the three legs with nothing to grade print `SKIP` rather than a vacuous PASS — the roster leg carries the verdict.
|
||||
|
||||
**(5) The lane, classified.** The Q62 census reads `forge files= 19 positions= 23 live-unstated= 19 [BIND=12 COMMENT=4 INPUT=7]` before and `files= 7 positions= 11 live-unstated= 7 [COMMENT=4 INPUT=7]` after — the twelve BIND positions are gone as positions, not reclassified as stated, because the repaired files no longer carry the host path even in prose. The seven that remain are named row by row in `wizard-work/volt/2026-11-05-q62-forge/REPORT.md` §6: five grade pre-refactor originals **no ref holds** (`git log --all --diff-filter=A` reads 0 for `pdf_create.py`, `pdf_make_form.py`, `citation_hash_class.orig.py`), so their honest repair is the Q69/Q118 refuse-when-unnamed shape and that is the forge lane's decision; two (`_smell_scan.py:4`, `_smell_scan_refactored.py:29`) scan the host `chunker.py` as their subject and are left because the refactored one pins `RECONSTRUCT_RANGE = (241, 280)`, the host copy's line numbering, so re-pointing them would change their findings rather than restore them.
|
||||
|
||||
**(6) Population, reconciled rather than asserted.** `git grep -l "/root/.hermes/wizard-outputs" -- 'wizard-work/*.py' 'wizard-work/**/*.py' | wc -l` reads **288** at this worktree; the census's `files_with_needle` reads 277 for the eight lanes other than beam, and beam's own addendum measured 11 — 277 + 11 = 288, so the two instruments agree about the same tree. A first pass over eight lanes looked 11 short for exactly that reason (beam was not in the `--lane` list); that was a reader error and is recorded as one. Live-unstated after this repair: spark 129, sol 82, ledger 46, sphinx 25, forge **7** (was 19), volt 6, null 0, beam 0, quill 0 — the other lanes are not classified by this record.
|
||||
|
||||
**(7) Not claimed.** That the twelve verdicts were wrong before — they were about a file outside the repository, and for these cells they agree with the tree's module, which is why nobody noticed. That the tree's `chunker.py` is the refactor's point of truth — whether `chunk_body()` should land is the forge lane's call; this repair asserts only that no probe grades a copy of a module the repository tracks. That `_repro_bounds.py` and `_repro_bounds_original.py` are distinct instruments — they were byte-identical before this repair (`git show HEAD:` of each, compared), and both print `No overflow found (unexpected)` against the host copy and the tree's; that filing defect is observed here and not repaired. That the census's statedness rule is symmetric — it credits a justification inside the enclosing statement or in a comment block **above** it (`q62_lane_census.py:203-225`), and `verify_pdf_refactor.py:41`'s `# subject:` sits on the line **below**, so it counts unstated; that is a two-line instrument change plus a re-take of every lane, named and not made. That `tools/verify.py` wires this guard — it does not: the guard lives beside the census, and the gate reads `14 legs, 13 pass, 0 fault, 0 ungradable, 1 skipped`, `gate: OK`, rc 0.
|
||||
|
||||
Files: the twelve `wizard-work/forge/*.py` probes named in the report, `wizard-work/volt/CHECK-q62-forge` (new), `wizard-work/volt/2026-11-05-q62-forge/REPORT.md` (new), `wizard-work/volt/q143-check-sweep/check_entry_baseline.tsv` (one row), `wizard-work/volt/q137-open-set/open_set.py` (`PIN_COUNTS`), `WORK-QUEUE.md` (this record), `docs/queue-index.md` (re-rendered). Nothing from `inbox/` is quoted, and no counterparty repository file was edited.
|
||||
|
||||
CHECK: `bash wizard-work/volt/CHECK-q62-forge`
|
||||
+46
-18
@@ -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. 124 sections carry 104 ids because 16 ids own a second, continuation section; 60 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 153 record blocks in all, 93 of them a later closure or correction for an id already opened. The same **60 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 30 times.
|
||||
**What it exposes.** The queue is two-tier. 125 sections carry 104 ids because 16 ids own a second, continuation section; 60 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 153 record blocks in all, 93 of them a later closure or correction for an id already opened. The same **60 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 30 times.
|
||||
|
||||
| # | id | kind | lines | bytes | role | title | first `Status:` |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
@@ -284,7 +284,8 @@
|
||||
| 274 | Q170 | record | 14759-14776 | 8914 | cont: OPENED | **Q170 — OPENED and REPAIRED in the same tick (volt, 2026-11-05, at `70edcd4` and the commit this record lands in; tools lane, no lane owns it by authorship, unclaimed and taken).** The repository's … | -- |
|
||||
| 275 | Q69 | heading | 14777-14802 | 7378 | cont: addendum | addendum 4 — the media-catalog verifier pair defaulted `--src` to a host path; both now refuse rc 2, and the pin moves into `CHECK-media-catalog` *(volt, 2026-11-05, at `d6110cb` and the commit this … | -- |
|
||||
| 276 | Q62 | heading | 14803-14820 | 4505 | cont: addendum | addendum (2026-11-05, zephyrus-sparkborn) — the beam lane is classified: 11 files, 0 live-unstated defects, and the population under the item's own command is 289 | -- |
|
||||
| 277 | Q62 | heading | 14821-14841 | 4952 | cont: addendum | addendum 2 — the lane census cited an instrument no ref holds, so the repo gate was red at `15f70fe`; the citation now names an uncommitted draft and the leg reads clean *(volt, 2026-11-05; Q62's own … | -- |
|
||||
| 277 | Q62 | heading | 14821-14842 | 4953 | cont: addendum | addendum 2 — the lane census cited an instrument no ref holds, so the repo gate was red at `15f70fe`; the citation now names an uncommitted draft and the leg reads clean *(volt, 2026-11-05; Q62's own … | -- |
|
||||
| 278 | Q62 | heading | 14843-14863 | 7162 | cont: addendum | addendum 5 — the forge lane is classified (19 files → 7 positions) and its 12 host-bound probes now import the tree's chunker *(volt, 2026-11-05, at `55172d9` and the commit this record lands in … | -- |
|
||||
|
||||
## Ids with no `## ` heading
|
||||
|
||||
@@ -303,7 +304,7 @@ Opened as records inside another section. `line` is the record's own opening lin
|
||||
| Q64 | 10308 | 10308 | 34 | Q63 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q65 | 11055 | 11047 | 54 | Q63 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q99 | 12749 | 9909 | 34 | Q98 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q100 | 12882 | 12882 | 33 | Q99 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q100 | 12882 | 12882 | 34 | Q99 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q101 | 12909 | 12909 | 18 | Q100 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q102 | 12985 | 12985 | 11 | Q100 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q103 | 13010 | 13010 | 18 | Q102 | BULLET+BOLD | BOLD-LEAD |
|
||||
@@ -321,7 +322,7 @@ Opened as records inside another section. `line` is the record's own opening lin
|
||||
| Q115 | 13282 | 13282 | 10 | Q114 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q116 | 13286 | 13286 | 12 | Q105 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q117 | 13290 | 13288 | 7 | Q96 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q118 | 13300 | 13300 | 7 | Q111 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q118 | 13300 | 13300 | 8 | Q111 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q119 | 13305 | 13305 | 6 | Q118 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q120 | 13308 | 13308 | 21 | Q119 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q121 | 13342 | 13342 | 4 | Q107 | BULLET+BOLD | BOLD-LEAD |
|
||||
@@ -334,7 +335,7 @@ Opened as records inside another section. `line` is the record's own opening lin
|
||||
| Q129 | 13653 | 13653 | 3 | Q128 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q130 | 13675 | 13675 | 2 | Q129 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q131 | 13689 | 13685 | 2 | Q115 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q133 | 13731 | 13731 | 6 | Q90 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q133 | 13731 | 13731 | 7 | Q90 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q134 | 13752 | 13752 | 1 | Q133 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q135 | 13797 | 13797 | 2 | Q114 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q136 | 13831 | 13831 | 1 | Q87 | BULLET+BOLD | BOLD-LEAD |
|
||||
@@ -2377,7 +2378,8 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"Q62": [
|
||||
10946,
|
||||
14803,
|
||||
14821
|
||||
14821,
|
||||
14843
|
||||
],
|
||||
"Q69": [
|
||||
11457,
|
||||
@@ -6119,17 +6121,30 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"title": "addendum (2026-11-05, zephyrus-sparkborn) \u2014 the beam lane is classified: 11 files, 0 live-unstated defects, and the population under the item's own command is 289"
|
||||
},
|
||||
{
|
||||
"bytes": 4952,
|
||||
"end_line": 14841,
|
||||
"bytes": 4953,
|
||||
"end_line": 14842,
|
||||
"id": "Q62",
|
||||
"kind": "heading",
|
||||
"line": 14821,
|
||||
"lines": 21,
|
||||
"lines": 22,
|
||||
"role": "continuation",
|
||||
"role_detail": "addendum",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "addendum 2 \u2014 the lane census cited an instrument no ref holds, so the repo gate was red at `15f70fe`; the citation now names an uncommitted draft and the leg reads clean *(volt, 2026-11-05; Q62's own \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 7162,
|
||||
"end_line": 14863,
|
||||
"id": "Q62",
|
||||
"kind": "heading",
|
||||
"line": 14843,
|
||||
"lines": 21,
|
||||
"role": "continuation",
|
||||
"role_detail": "addendum",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "addendum 5 \u2014 the forge lane is classified (19 files \u2192 7 positions) and its 12 host-bound probes now import the tree's chunker *(volt, 2026-11-05, at `55172d9` and the commit this record lands in \u2026"
|
||||
}
|
||||
],
|
||||
"nested": [
|
||||
@@ -6237,7 +6252,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"form": "BOLD-LEAD",
|
||||
"id": "Q100",
|
||||
"line": 12882,
|
||||
"refs": 33,
|
||||
"refs": 34,
|
||||
"section": "Q99",
|
||||
"shape": "BULLET+BOLD"
|
||||
},
|
||||
@@ -6399,7 +6414,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"form": "BOLD-LEAD",
|
||||
"id": "Q118",
|
||||
"line": 13300,
|
||||
"refs": 7,
|
||||
"refs": 8,
|
||||
"section": "Q111",
|
||||
"shape": "BULLET+BOLD"
|
||||
},
|
||||
@@ -6516,7 +6531,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"form": "BOLD-LEAD",
|
||||
"id": "Q133",
|
||||
"line": 13731,
|
||||
"refs": 6,
|
||||
"refs": 7,
|
||||
"section": "Q90",
|
||||
"shape": "BULLET+BOLD"
|
||||
},
|
||||
@@ -6679,9 +6694,9 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"end_line": 8,
|
||||
"line": 1
|
||||
},
|
||||
"queue_bytes": 2592740,
|
||||
"queue_lines": 14841,
|
||||
"queue_sha256": "8da16b934b7a42d7fccfe4a14c7036a86e077369dc961b4741e2d59668172171",
|
||||
"queue_bytes": 2599903,
|
||||
"queue_lines": 14863,
|
||||
"queue_sha256": "e147df48d9b156d958cadec5fbce6e56b97ce3662a35714feb8161c94b2e7c53",
|
||||
"sections": [
|
||||
{
|
||||
"bytes": 3139,
|
||||
@@ -8283,17 +8298,30 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"title": "addendum (2026-11-05, zephyrus-sparkborn) \u2014 the beam lane is classified: 11 files, 0 live-unstated defects, and the population under the item's own command is 289"
|
||||
},
|
||||
{
|
||||
"bytes": 4952,
|
||||
"end_line": 14841,
|
||||
"bytes": 4953,
|
||||
"end_line": 14842,
|
||||
"id": "Q62",
|
||||
"kind": "heading",
|
||||
"line": 14821,
|
||||
"lines": 21,
|
||||
"lines": 22,
|
||||
"role": "continuation",
|
||||
"role_detail": "addendum",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "addendum 2 \u2014 the lane census cited an instrument no ref holds, so the repo gate was red at `15f70fe`; the citation now names an uncommitted draft and the leg reads clean *(volt, 2026-11-05; Q62's own \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 7162,
|
||||
"end_line": 14863,
|
||||
"id": "Q62",
|
||||
"kind": "heading",
|
||||
"line": 14843,
|
||||
"lines": 21,
|
||||
"role": "continuation",
|
||||
"role_detail": "addendum",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "addendum 5 \u2014 the forge lane is classified (19 files \u2192 7 positions) and its 12 host-bound probes now import the tree's chunker *(volt, 2026-11-05, at `55172d9` and the commit this record lands in \u2026"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -27,9 +27,17 @@ import random
|
||||
import sys
|
||||
from dataclasses import dataclass
|
||||
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker # noqa: E402
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
S = chunker._OVERLAP_SENTINEL
|
||||
|
||||
WORDS = ["alpha", "bravo", "charlie", "delta", "echo", "foxtrot", "golf", "hotel"]
|
||||
|
||||
@@ -23,9 +23,17 @@ from __future__ import annotations
|
||||
import random
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker # noqa: E402
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
S = chunker._OVERLAP_SENTINEL
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
"""Adversarial fuzz probe for the forge chunker (evidence-gathering, not a fixture)."""
|
||||
import sys
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
|
||||
def roundtrip(text, mt, ot):
|
||||
cs = chunker.chunk_text(text, max_tokens=mt, overlap_tokens=ot)
|
||||
|
||||
@@ -24,9 +24,17 @@ from __future__ import annotations
|
||||
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
_orig_chunk_text = chunker.chunk_text
|
||||
|
||||
|
||||
|
||||
@@ -30,9 +30,17 @@ import sys
|
||||
import textwrap
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker # noqa: E402
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------- #
|
||||
# helpers (each pure: no shared mutable state)
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
"""Probe the forge (refactored) chunker round-trip."""
|
||||
import sys
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
base = "The quick brown fox jumps over the lazy dog. Pack my box with five dozen liquor jugs. How vexingly quick daft zebras jump. "
|
||||
text = (base + "Variant sentence here. ") * 20
|
||||
text_stripped = text.strip()
|
||||
@@ -43,4 +51,4 @@ else:
|
||||
if len(r) != len(text_stripped):
|
||||
print("lengths differ:", len(r), len(text_stripped))
|
||||
print("orig tail:", repr(text_stripped[-30:]))
|
||||
print("recon tail:", repr(r[-30:]))
|
||||
print("recon tail:", repr(r[-30:]))
|
||||
@@ -31,9 +31,17 @@ from __future__ import annotations
|
||||
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker # noqa: E402
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
|
||||
def _find_first_diff(actual: str, expected: str) -> int | None:
|
||||
"""Return the index of the first character mismatch between *actual* and
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
"""Reproduce the chunk-token-overflow bug."""
|
||||
import sys
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
cases = [
|
||||
("Pack my box. ", 3, 0),
|
||||
("Pack my box. ", 3, 1),
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
"""Reproduce the chunk-token-overflow bug."""
|
||||
import sys
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
cases = [
|
||||
("Pack my box. ", 3, 0),
|
||||
("Pack my box. ", 3, 1),
|
||||
|
||||
@@ -25,9 +25,17 @@ from __future__ import annotations
|
||||
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker # noqa: E402
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
# Cases that would overflow if the bounds bug were still present. Each entry
|
||||
# is (text, max_tokens, overlap_tokens). Kept identical to the original so
|
||||
# the exact same chunks are inspected and the same verdicts are rendered.
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
"""Verify estimate_tokens is monotonic (needed for _split_into_chunks refactor correctness)."""
|
||||
import sys
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
ok = True
|
||||
for la in range(0, 400):
|
||||
for lb in range(0, 400):
|
||||
|
||||
@@ -22,9 +22,17 @@ from __future__ import annotations
|
||||
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
from pathlib import Path
|
||||
|
||||
# Q62 forge lane (2026-11-05): bind the directory this file sits in. The tree
|
||||
# tracks chunker.py beside this probe; the line this replaces bound a host
|
||||
# directory outside the repository, so the probe graded a copy no checkout
|
||||
# carries. The assertion below makes the binding visible if it ever drifts.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker
|
||||
|
||||
assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
# Upper bound (exclusive) of the string lengths sampled by the probe.
|
||||
MAX_LEN = 400
|
||||
|
||||
|
||||
@@ -0,0 +1,205 @@
|
||||
# Q62 leg (a), forge lane — 19 files classified, and 12 probes that graded a file no checkout carries now import the tree's chunker
|
||||
|
||||
*volt, 2026-11-05. Measured at `55172d9` and re-measured in this worktree. Q62 stays open; this
|
||||
report classifies one lane and repairs the class it found there.*
|
||||
|
||||
## 1. What was wrong
|
||||
|
||||
Twelve tracked files under `wizard-work/forge/` opened with
|
||||
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")
|
||||
|
||||
and then `import chunker`. The repository tracks `wizard-work/forge/chunker.py` **beside every one
|
||||
of them**, and none of the twelve ever imported it. The two files are not the same file:
|
||||
|
||||
| | tree (`wizard-work/forge/chunker.py`) | host (`/root/.hermes/wizard-outputs/forge/chunker.py`) |
|
||||
|---|---|---|
|
||||
| lines | 300 | 311 |
|
||||
| sha256 | `c9389d28e9fe16f8a75a86cfc890b8cba793baf20a424c49635494087f455491` | `6df7fd7a6dd2ea5ff1eed73b3d484c9413ba6697c8be0c86e242ee05bf5fedaa` |
|
||||
| mtime | 2026-10-26 08:46:25 | 2026-10-26 08:47:52 |
|
||||
|
||||
The host copy carries a `chunk_body()` helper and an `__all__` that names it; the tree's copy has
|
||||
neither. `git log --all -S "def chunk_body" -- wizard-work/forge/chunker.py` reads **0 commits** —
|
||||
no ref in this repository ever held that function. The probes were therefore grading a draft the
|
||||
tree does not have, from a directory no checkout carries.
|
||||
|
||||
Two consequences, both mechanical:
|
||||
|
||||
- **On this host** every probe printed a verdict about the wrong bytes. They happened to agree with
|
||||
the tree's module for all twelve cells (measured below), which is exactly why nobody noticed.
|
||||
- **On any other host** the twelve files cannot run at all: the insert points at a directory that
|
||||
does not exist and `import chunker` raises `ModuleNotFoundError`.
|
||||
|
||||
## 2. Why the repo gate was green over it
|
||||
|
||||
`tools/import_resolve_check.py` classes a file as a test by its **name** — `TEST_NAME =
|
||||
(^|/)(_?test_[^/]*|[^/]*_test)\.py$` (`tools/import_resolve_check.py:162`) — and an absolute binding
|
||||
in any other tracked file is an ADVISORY row: printed, counted, never graded
|
||||
(`tools/import_resolve_check.py:65-66`, `:529-531`). None of the twelve matches that name rule
|
||||
(`_fuzz_probe.py`, `_repro_bounds.py`, `_smell_check_monotonic.py`, …), so the leg read
|
||||
|
||||
import_resolve_check: 195 file(s) graded, 0 fault(s)
|
||||
|
||||
at `55172d9` and reads the same after the repair. This is Q163's shape (`_smoke_intervals.py`), in a
|
||||
lane that had not been classified.
|
||||
|
||||
## 3. The repair — one shape, twelve times
|
||||
|
||||
Per file, three edits and nothing else (`git diff --stat -- wizard-work/forge/`: **12 files changed,
|
||||
109 insertions(+), 13 deletions(-)**):
|
||||
|
||||
+from pathlib import Path
|
||||
+# Q62 forge lane (2026-11-05): bind the directory this file sits in. ...
|
||||
+sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
import chunker
|
||||
+
|
||||
+assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__
|
||||
|
||||
The assertion is the part that makes the binding observable rather than decorative — it is the same
|
||||
device `wizard-work/forge/_test_roundtrip.py:15-20` already carries (Q100), which is why that
|
||||
neighbouring pair of files was never in this population.
|
||||
|
||||
The edit was applied by a refusing script, not by hand: it reads the twelve files, requires exactly
|
||||
one host insert and exactly one `import chunker` per file, and exits 2 on any file that does not
|
||||
match the shape (so a half-applied batch is impossible). It reported twelve lines, one per file,
|
||||
line counts before → after.
|
||||
|
||||
## 4. Behaviour-preserving, measured before the edit
|
||||
|
||||
Before touching the files, each was run twice — as committed (host binding) and as a copy whose
|
||||
single insert was rewritten to a sandbox holding the tree's `chunker.py` and every sibling module:
|
||||
|
||||
12 probe(s); 0 differ (rc and stdout identical for all twelve)
|
||||
|
||||
So the repair does not change a single verdict on this host; it changes which file the verdict is
|
||||
about. Recorded in `forge-probe-baseline.json` (evidence bundle).
|
||||
|
||||
## 5. Measured after the repair
|
||||
|
||||
file in-tree clone-sandbox vs pre-repair
|
||||
_edge_sweep_refactored.py rc=0 ok rc=0 ok identical
|
||||
_fuzz_adversarial.py rc=0 ok rc=0 ok identical
|
||||
_fuzz_probe.py rc=0 ok rc=0 ok identical
|
||||
_fuzz_probe_negctrl.py rc=0 ok rc=0 ok identical
|
||||
_fuzz_probe_refactored.py rc=0 ok rc=0 ok identical
|
||||
_probe_forge.py rc=0 ok rc=0 ok identical
|
||||
_probe_forge_refactored.py rc=0 ok rc=0 ok identical
|
||||
_repro_bounds.py rc=0 ok rc=0 ok identical
|
||||
_repro_bounds_original.py rc=0 ok rc=0 ok identical
|
||||
_repro_bounds_refactored.py rc=0 ok rc=0 ok identical
|
||||
_smell_check_monotonic.py rc=0 ok rc=0 ok identical
|
||||
_smell_check_monotonic_refactored.py rc=0 ok rc=0 ok identical
|
||||
|
||||
12 file(s) graded, 0 fault(s)
|
||||
|
||||
"clone-sandbox" is a directory holding **only** the tree's forge modules — the property a fresh
|
||||
checkout has and this host did not have before. Twelve files ran rc 0 there.
|
||||
|
||||
## 6. The lane, classified (19 files → 7)
|
||||
|
||||
The Q62 census (`wizard-work/volt/q62_lane_census.py`, AST-level, position by position):
|
||||
|
||||
before forge files= 19 positions= 23 live-unstated=19 [BIND=12 COMMENT=4 INPUT=7]
|
||||
after forge files= 7 positions= 11 live-unstated= 7 [COMMENT=4 INPUT=7]
|
||||
|
||||
The 12 BIND positions are gone as positions, not reclassified: the repaired files no longer carry
|
||||
the host path at all, and their comments name the defect in prose rather than restating the path
|
||||
(which would have kept them in the population as mentions).
|
||||
|
||||
The 7 that remain, each read and placed:
|
||||
|
||||
| position | class | what it is |
|
||||
|---|---|---|
|
||||
| `_smell_scan.py:4` | INPUT/READ | opens the host `chunker.py` and scans **it** for smells |
|
||||
| `_smell_scan_refactored.py:29` | INPUT/READ | same subject, as `CHUNKER_PATH`; also pins `RECONSTRUCT_RANGE = (241, 280)`, which is the **host** copy's line numbering |
|
||||
| `verify_pdf_refactor.py:41` | INPUT/READ | `before/pdf_create.py` — pre-refactor original, 0 add-commits in any ref |
|
||||
| `verify_pdf_refactor.py:44` | INPUT/READ | `before/pdf_make_form.py` — same, 0 add-commits |
|
||||
| `verify_citation_hash_class_dry_refactor.py:18` | INPUT | `citation_hash_class.orig.py` — 0 add-commits in any ref |
|
||||
| `refactored_cards/ops-pulse-card-r41_refactored.py:4` | INPUT | a card artifact naming its working directory |
|
||||
| `verify_r41_pixel_diff.py:25` | INPUT | same class |
|
||||
|
||||
Five of the seven are **subject-outside-repo by construction**: the pre-refactor originals they
|
||||
grade were never committed (`git log --all --diff-filter=A` reads 0 for `pdf_create.py`,
|
||||
`pdf_make_form.py` and `citation_hash_class.orig.py`), so no repair can point them at the tree — the
|
||||
honest fix for them is the Q69/Q118 shape (name the subject from argv or an environment variable and
|
||||
refuse rc 2 when nothing names one), and that is a decision for the forge lane, not a side effect of
|
||||
this classification. The two `_smell_scan*` files are the same defect class as §1 (their subject
|
||||
*is* in the tree), but switching them changes their findings — the refactored one pins a line range
|
||||
taken from the host copy — so they are named here and left, rather than silently re-pointed.
|
||||
|
||||
## 7. The guard
|
||||
|
||||
`bash wizard-work/volt/CHECK-q62-forge` — six legs, rc 0/1/2:
|
||||
|
||||
PASS bind: 0 file(s) under wizard-work/forge bind a host-absolute insert
|
||||
PASS roster: 12 file(s) bind beside themselves, as expected
|
||||
PASS assert: all 12 repaired file(s) assert the module landed beside them
|
||||
PASS run: 12 file(s) run rc 0 from a copy with no host directory
|
||||
PASS teeth: the bind predicate fires on a copy with the host insert restored (_edge_sweep_refactored.py)
|
||||
PASS census: forge lane reads 7 live-unstated position(s), the 12 bindings are gone
|
||||
q62-forge: 6 leg(s), 0 fault(s) rc 0, 3.5 s
|
||||
|
||||
`run` is the leg that matters: it copies the lane's modules to a temp directory and executes each
|
||||
repaired file there, so a checkout without `/root/.hermes` still grades them. `teeth` restores the
|
||||
host insert in one copy and requires the `bind` predicate to fire.
|
||||
|
||||
On a clean checkout of `55172d9` (`git worktree add --detach` at HEAD, with the guard and the census
|
||||
copied in), the same command reads **3 fault(s), rc 1**: `bind` 12 files, `roster` 0 of 12, `census`
|
||||
19. The three legs that have nothing to grade print `SKIP` rather than a vacuous `PASS`, and the
|
||||
roster leg carries the verdict.
|
||||
|
||||
## 8. Gate, at this worktree
|
||||
|
||||
python3 tools/verify.py --fast
|
||||
verify: 14 legs, 13 pass, 0 fault, 0 ungradable, 1 skipped
|
||||
gate: OK -- 13 of 13 graded leg(s) passed (1 skipped: not a pass, not a fault) rc 0
|
||||
|
||||
`import-resolve` still reads 195 files / 0 faults (it grades tests by name; the twelve were advisory
|
||||
before and after), and `compile-sweep`, `import-order` and `path-claims` are unchanged.
|
||||
|
||||
## 9. Population, reconciled
|
||||
|
||||
`git grep -l "/root/.hermes/wizard-outputs" -- 'wizard-work/*.py' 'wizard-work/**/*.py' | wc -l`
|
||||
reads **288** at this worktree. The census's `files_with_needle` reads 277 when asked for the eight
|
||||
lanes other than beam, and beam's own addendum measured 11 — 277 + 11 = 288, so the two instruments
|
||||
agree about the same tree. (A first run of the census over eight lanes looked 11 short for exactly
|
||||
that reason: beam was not in the `--lane` list. That is a reader error, not an instrument gap, and it
|
||||
is recorded here because it was measured before it was believed.)
|
||||
|
||||
Live-unstated by lane after this repair: spark 129, sol 82, ledger 46, sphinx 25, forge **7**
|
||||
(was 19), volt 6, null 0, beam 0, quill 0.
|
||||
|
||||
## 10. Not claimed
|
||||
|
||||
- That the 12 repaired files' verdicts were *wrong* before. They were about a file outside the
|
||||
repository; for these twelve cells the readings agree with the tree's module (§4). What changed is
|
||||
the subject, and that the files now run on a host without `/root/.hermes`.
|
||||
- That the tree's `chunker.py` is the point of truth for the refactor. Whether `chunk_body()` should
|
||||
land is the forge lane's decision; this repair asserts only that no probe grades a copy of a module
|
||||
the repository tracks.
|
||||
- That §6's seven are all defects. Five grade artifacts no ref holds — the repair for those is a
|
||||
refusal-when-unnamed shape, not a re-point, and it is not made here.
|
||||
- That `_repro_bounds.py` and `_repro_bounds_original.py` are distinct instruments. They were
|
||||
**byte-identical** before this repair (`git show HEAD:` of each, compared) — a filing defect this
|
||||
record observes and does not repair. Both print `No overflow found (unexpected)` against the host
|
||||
copy and against the tree's: already stale, unchanged by the repair.
|
||||
- That the census's statedness rule is symmetric. It credits a justification inside the enclosing
|
||||
statement or in a comment block **above** it (`q62_lane_census.py:203-225`); `verify_pdf_refactor.py:41`
|
||||
carries `# subject: ...` on the line **below**, so it counts unstated. That is a two-line change to
|
||||
the instrument and a re-take of every lane's count — named here, not made here.
|
||||
- That the other lanes are classified. spark, sol, ledger, sphinx and volt stand as §9 measures them.
|
||||
|
||||
## Files
|
||||
|
||||
`wizard-work/forge/{_edge_sweep_refactored,_fuzz_adversarial,_fuzz_probe,_fuzz_probe_negctrl,_fuzz_probe_refactored,_probe_forge,_probe_forge_refactored,_repro_bounds,_repro_bounds_original,_repro_bounds_refactored,_smell_check_monotonic,_smell_check_monotonic_refactored}.py`,
|
||||
`wizard-work/volt/CHECK-q62-forge` (new), `wizard-work/volt/2026-11-05-q62-forge/REPORT.md` (this
|
||||
file), `wizard-work/volt/q143-check-sweep/check_entry_baseline.tsv` (one row), `wizard-work/volt/q137-open-set/open_set.py`
|
||||
(`PIN_COUNTS`), `WORK-QUEUE.md` (the record), `docs/queue-index.md` (re-rendered).
|
||||
|
||||
## Evidence bundle
|
||||
|
||||
`/root/.hermes/wizard-outputs/volt/volt-2026-11-05-q62-forge/` — `EVIDENCE.md`, `forge-probe-baseline.json`
|
||||
(pre-repair, 12 rows), `forge-probe-bindings.json` (first sandbox run), `q62-all-lanes.json` (the
|
||||
census over 8 lanes), `guard-green.txt`, `guard-head-red.txt`, `gate.txt`.
|
||||
|
||||
CHECK: `bash wizard-work/volt/CHECK-q62-forge`
|
||||
Executable
+137
@@ -0,0 +1,137 @@
|
||||
#!/usr/bin/env bash
|
||||
# Q62 forge lane, 2026-11-05 -- the 12 chunker probes must import the module this
|
||||
# repository tracks, not a copy on the host.
|
||||
#
|
||||
# The defect this guards: every one of these files opened with
|
||||
# sys.path.insert(0, "<host>/wizard-work-outputs/forge")
|
||||
# and then `import chunker`. The tree tracks `wizard-work/forge/chunker.py`
|
||||
# beside them (300 lines, sha256 c9389d28e9fe...), the host held a different file
|
||||
# (311 lines, sha256 6df7fd7a6dd2...), and `tools/import_resolve_check.py` classes
|
||||
# these names (`_fuzz_probe.py`, `_repro_bounds.py`, ...) as ADVISORY, so the repo
|
||||
# gate read green over all twelve. On a checkout without the host directory they
|
||||
# die on `ModuleNotFoundError: No module named 'chunker'`.
|
||||
#
|
||||
# Legs:
|
||||
# bind no host-absolute insert is left in any `wizard-work/forge/*.py`
|
||||
# assert each of the 12 carries the binding assertion
|
||||
# run each of the 12 runs rc 0 in a copy that holds ONLY the tree's files
|
||||
# teeth the `bind` predicate fires on a copy with the host insert restored
|
||||
# census the Q62 census reads 7 live-unstated positions in this lane, not 19
|
||||
#
|
||||
# rc 0 every leg as expected / rc 1 a graded fault / rc 2 could not grade.
|
||||
set -u
|
||||
HERE="$(cd "$(dirname "$0")" && pwd)"
|
||||
ROOT="$(cd "$HERE/../.." && pwd)"
|
||||
FORGE="$ROOT/wizard-work/forge"
|
||||
CENSUS="$HERE/q62_lane_census.py"
|
||||
HOST_INSERT='sys.path.insert(0, "/root/.hermes/wizard-outputs/forge")'
|
||||
TREE_INSERT='sys.path.insert(0, str(Path(__file__).resolve().parent))'
|
||||
ASSERT='assert Path(chunker.__file__).resolve().parent == Path(__file__).resolve().parent, chunker.__file__'
|
||||
WANT=12
|
||||
|
||||
legs=0; faults=0
|
||||
fault() { legs=$((legs+1)); faults=$((faults+1)); echo "FAIL: $1 -- $2"; }
|
||||
pass() { legs=$((legs+1)); echo "PASS $1: $2"; }
|
||||
|
||||
[ -d "$FORGE" ] || { echo "FAIL: could not grade -- no $FORGE" >&2; exit 2; }
|
||||
[ -f "$CENSUS" ] || { echo "FAIL: could not grade -- no $CENSUS" >&2; exit 2; }
|
||||
|
||||
# ---- bind ------------------------------------------------------------------
|
||||
hits="$(grep -rl --include='*.py' -F "$HOST_INSERT" "$FORGE" 2>/dev/null | wc -l)"
|
||||
if [ "$hits" -eq 0 ]; then
|
||||
pass bind "0 file(s) under wizard-work/forge bind a host-absolute insert"
|
||||
else
|
||||
fault bind "$hits file(s) still bind the host directory: $(grep -rl --include='*.py' -F "$HOST_INSERT" "$FORGE" | sed "s|$ROOT/||" | tr '\n' ' ')"
|
||||
fi
|
||||
|
||||
# ---- the 12, discovered rather than listed ---------------------------------
|
||||
bound="$(grep -rl --include='*.py' -F "$TREE_INSERT" "$FORGE" 2>/dev/null | sort)"
|
||||
n_bound="$(printf '%s\n' "$bound" | grep -c . )"
|
||||
roster_ok=1
|
||||
if [ "$n_bound" -ne "$WANT" ]; then
|
||||
fault roster "$n_bound file(s) bind beside themselves, expected $WANT"
|
||||
roster_ok=0
|
||||
else
|
||||
pass roster "$n_bound file(s) bind beside themselves, as expected"
|
||||
fi
|
||||
|
||||
# A leg that has nothing to grade says SKIP and is neither a pass nor a fault --
|
||||
# the roster leg already carries the verdict for an empty or over-full set.
|
||||
skip() { echo "SKIP $1: $2"; }
|
||||
|
||||
# ---- assert ----------------------------------------------------------------
|
||||
if [ "$roster_ok" -eq 0 ]; then
|
||||
skip assert "roster is $n_bound/$WANT, nothing to assert against"
|
||||
else
|
||||
missing=""
|
||||
while IFS= read -r f; do
|
||||
[ -n "$f" ] || continue
|
||||
grep -qF "$ASSERT" "$f" || missing="$missing $(basename "$f")"
|
||||
done <<< "$bound"
|
||||
if [ -z "$missing" ]; then
|
||||
pass assert "all $n_bound repaired file(s) assert the module landed beside them"
|
||||
else
|
||||
fault assert "binding assertion missing in:$missing"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ---- run: a copy holding ONLY the tree's files ------------------------------
|
||||
sb="$(mktemp -d "${TMPDIR:-/tmp}/q62-forge-XXXXXX")" || { echo "FAIL: could not grade -- no temp dir" >&2; exit 2; }
|
||||
trap 'rm -rf "$sb"' EXIT
|
||||
cp "$FORGE"/*.py "$sb"/ 2>/dev/null
|
||||
[ -d "$FORGE/refactored_cards" ] && cp -r "$FORGE/refactored_cards" "$sb"/ 2>/dev/null
|
||||
if [ "$roster_ok" -eq 0 ]; then
|
||||
skip run "roster is $n_bound/$WANT, nothing to run"
|
||||
else
|
||||
run_bad=""
|
||||
while IFS= read -r f; do
|
||||
[ -n "$f" ] || continue
|
||||
name="$(basename "$f")"
|
||||
if ! out="$(cd "$sb" && timeout 300 python3 "$sb/$name" 2>&1)"; then
|
||||
run_bad="$run_bad $name(rc!=0:$(printf '%s' "$out" | tail -1))"
|
||||
fi
|
||||
done <<< "$bound"
|
||||
if [ -z "$run_bad" ]; then
|
||||
pass run "$n_bound file(s) run rc 0 from a copy with no host directory"
|
||||
else
|
||||
fault run "did not run clean:$run_bad"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ---- teeth -----------------------------------------------------------------
|
||||
first="$(printf '%s\n' "$bound" | head -1)"
|
||||
if [ -z "$first" ]; then
|
||||
skip teeth "no repaired file to mutate (roster leg carries the verdict)"
|
||||
else
|
||||
teeth_dir="$sb/teeth"
|
||||
mkdir -p "$teeth_dir"
|
||||
sed "s|^$TREE_INSERT\$|$HOST_INSERT|" "$first" > "$teeth_dir/$(basename "$first")"
|
||||
if grep -qF "$HOST_INSERT" "$teeth_dir/$(basename "$first")"; then
|
||||
pass teeth "the bind predicate fires on a copy with the host insert restored ($(basename "$first"))"
|
||||
else
|
||||
fault teeth "the mutation did not restore the host insert -- the teeth leg proves nothing"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ---- census ----------------------------------------------------------------
|
||||
cout="$(cd "$ROOT" && python3 "$CENSUS" --repo . --lane forge 2>&1)"
|
||||
crc=$?
|
||||
if [ "$crc" -eq 2 ]; then
|
||||
echo "FAIL: could not grade -- census rc 2: $(printf '%s' "$cout" | tail -1)" >&2
|
||||
exit 2
|
||||
fi
|
||||
line="$(printf '%s\n' "$cout" | grep -E '^forge ' | head -1)"
|
||||
if [ -z "$line" ]; then
|
||||
echo "FAIL: could not grade -- census printed no forge row" >&2
|
||||
exit 2
|
||||
fi
|
||||
n_live="$(printf '%s' "$line" | sed -n 's/.*live-unstated= *\([0-9][0-9]*\).*/\1/p')"
|
||||
if [ "$n_live" = "7" ]; then
|
||||
pass census "forge lane reads 7 live-unstated position(s), the 12 bindings are gone"
|
||||
else
|
||||
fault census "forge lane reads ${n_live:-?} live-unstated position(s), expected 7"
|
||||
fi
|
||||
|
||||
echo "q62-forge: $legs leg(s), $faults fault(s)"
|
||||
[ "$faults" -eq 0 ] && exit 0
|
||||
exit 1
|
||||
@@ -682,7 +682,14 @@ PIN_OPENED = [51, 52, 53, 65, 100, 101, 102, 103, 104, 105, 106, 107, 109,
|
||||
# unchanged: records 132, record_ids 98, ids 159, record_only 55, open 0,
|
||||
# opened 26. Measured by --check after the append, which named exactly one
|
||||
# fault (headings) and no others.
|
||||
PIN_COUNTS = {"headings": 124, "heading_ids": 104, "records": 132,
|
||||
# Q62 addendum 3 (2026-11-05, volt): the same shape again -- a section heading
|
||||
# (## Q62 addendum 3 ...) over a lead that says Q62 stays open, so no record and
|
||||
# no id is scored: headings 124 -> 125 with heading_ids staying 104 (Q62 already
|
||||
# carries a heading), and every record counter, ids and record_only unchanged:
|
||||
# records 132, record_ids 98, ids 159, record_only 55, open 0, opened 26.
|
||||
# Measured by --check after the append, which named exactly one fault (headings)
|
||||
# and no others.
|
||||
PIN_COUNTS = {"headings": 125, "heading_ids": 104, "records": 132,
|
||||
"record_ids": 98, "ids": 159, "open": 0, "opened": 26,
|
||||
"record_only": 55}
|
||||
|
||||
|
||||
@@ -281,3 +281,4 @@ CHECK-q69-census 0 q69-census: 5 leg(s), 0 fault(s), rc 0
|
||||
# which is the defect it repairs), and 2 when the queue, the tool or HEAD is
|
||||
# unreadable.
|
||||
CHECK-q167 0 q167: 4 leg(s), 0 fault(s), rc 0
|
||||
wizard-work/volt/CHECK-q62-forge 0 q62-forge: 6 leg(s), 0 fault(s), rc 0
|
||||
|
Can't render this file because it contains an unexpected character in line 94 and column 87.
|
Reference in new issue
Block a user