Q80 (spark lane by authorship, unclaimed and taken). Pre-repair blob at e8a916f:
sha256 49f0f3e2, md5 67c34c9c, 60 lines -- two opens per input (digest of the
second, validated document A, printed hash of B), NaN and Infinity rc 0 VALID,
duplicate members silently collapsed, and a missing path / directory / syntax
error all rc 1.
Repaired: 185 lines, sha256 26cb270c. One read serves both halves
(Path.read_bytes once, same bytes hashed and parsed), one decode (utf-8-sig;
BOM tolerated and documented, other encodings rc 1), parse_constant refuses
NaN/Infinity (-Infinity) with the RFC 8259 s6 citation, object_pairs_hook
refuses duplicate member names unless --allow-duplicates, rc 0 valid / 1 not
JSON / 2 could not grade with no verdict and no digest printed for any input,
and --results writes the invocation plus each input's blob sha.
Cells: wizard-work/spark/test_json_sha256_validator.py (new), 15 cells,
sha256 0d2038ea -- "Ran 15 tests ... OK", rc 0. Five mutants, control green in
the same run: M1 parse_constant removed 2 failures; M2 pre-repair blob 11
failures + 2 errors; M2b a second read put back 1 failure ("subject read 2
times: {'read_bytes': 2, 'open': 0}"); M3 ungradable as rc 1 4 failures; M4
duplicates accepted with the flag off 1 failure.
Wiring: wizard-work/spark/CHECK leg 13. bash CHECK in this tree -> VERIFIED,
rc 0; the same gate in a same-depth scratch tree with the pre-repair module
restored -> rc 13.
Gate: python3 tools/verify.py --repo . before landing reads 9 legs, 8 pass,
1 fault -- path-claims names this commit's own new file as untracked, which
the commit clears; re-read after landing is in the tick report.
CHECK: python3 wizard-work/spark/test_json_sha256_validator.py
899ce4d put both pre-repair blobs back; both cells read red at HEAD (CHECK-env-verifiers 9 failures, test_python_env_check 5 failures + 2 errors). Restored byte-identically from ebba640 and bda365c. New closed_artifact_guard.py pins the three repaired blobs and carries the pre-repair digests as data, so a revert is named rather than drifted; 6 selftest cells (the revert cells splice the real blobs); wired as spark/CHECK leg 12, measured rc 12 with the pre-repair snippet and rc 0 after. Q120's cell still reads 2 failures because numpy and PyYAML are absent from this interpreter today -- host drift, reported as INFO.
The CHECK shipped with 6b7d750 ran the un-flagged repo gate: 107.93s wall,
82s of it the selftest-sweep leg. Inside the caller's harness it was killed
just after printing the section-4 header, so a green tree read as a failure.
Rebuilt as wizard-work/volt/CHECK-toolsmd-drift: per-leg timeout, the sweep
dropped from the budget (it is a wrapper over the cells graded directly here),
the leg tally asserted exactly, elapsed total printed. Non-vacuity measured by
three mutations on the real tree -- document drift (leg 1), uncommitted tool
drift (leg 2), index drift (leg 4) -- each rc 1, each restored clean.
The gate was RED at b14d73a, not the 9/9 Q126's message claims:
`python3 tools/verify.py --repo .` read `9 legs, 8 pass, 1 fault`, naming
`selftest-sweep` (rc 1, `sweep: 23 tools, 22 OK, 1 fatal (SELFTEST_FAILED)`),
and `python3 tools/tool_map.py --selftest` named the cell:
`FAIL HEAD: docs/TOOLS.md is the render of this tree (the drift guard) [rc 1]`,
19/20 cells. Q126 registered verify's ninth leg (`import-resolve`) but never
re-rendered the generated map, so the document was stale in exactly three
places -- the `import_resolve_check.py` leg cell read `-` where the tree reads
`import-resolve`, `verify.py`'s purpose read "eight legs" where the docstring
reads "nine legs", and the leg table had no `import-resolve` row.
Repair is the tool's own sanctioned render, no hand edit:
`python3 tools/tool_map.py --repo . --rev HEAD --write docs/TOOLS.md`
-> "wrote docs/TOOLS.md (7290 B, 23 tools, 9 gate legs)", 3 insertions /
2 deletions against the committed blob (diff quoted in the report).
Readings after: `--check docs/TOOLS.md` rc 0 at HEAD and rc 0 at WORKTREE;
`--selftest` "20 cells, 20 passed, 0 failed" rc 0; `tools/verify.py --repo .`
"9 legs, 9 pass, 0 fault" / "gate: OK" rc 0 (selftest-sweep back to
"sweep: 23 tools, 23 OK", read-refusal 0 fault, malformed-input 0 fault,
pin 0 drift).
Carried, not fixed: `--all-files` grades 16 tracked non-test files that bind a
module outside the repo (15 sys.path inserts into
/root/.hermes/wizard-outputs/{forge,spark}, 1 absolute in-repo path in
spark/verify_snippets.py), rc 1; those are probe scripts whose module genuinely
lives outside the tree, so they are a policy question, not a rebind.
Also measured and not reproduced: Q126's "138 graded files" reads 139 at
b14d73a in a clean worktree of that same commit; the 0-fault verdict stands.
Report: /root/.hermes/wizard-outputs/volt/2026-10-30-toolsmd-drift.md
CHECK: bash /root/.hermes/wizard-outputs/volt/check-toolsmd-drift.sh
(a) import-resolve: 9 OUTSIDE_REPO faults -> 0 over 138 graded files. The eight
lanes' test files now insert str(Path(__file__).resolve().parent) and resolve
their data paths from __file__; test_hermes.py is rewritten as the host probe it
always was (skills root from HERMES_SKILLS_DIR/HERMES_HOME/~/.hermes/skills, rc 0
found / 77 SKIP / 1 FAIL) instead of binding a module that does not exist.
Falsified: poisoning the repo copy reds the rebound test (rc 1) and leaves HEAD's
host-bound copy green (rc 0), both restored.
(b) path-claims: 225 new -> 0. All 225 came from sol's untracked-file census; each
was measured (0 add-commits on any ref, present on disk untracked, listed verbatim
in the census) and is a NOT_ADDED row under a batch note. One CLEARED row dropped
(spark/lwc_counter.py, resurrected at 3e667eb after Q125 retired it).
Carried in, not authored here: tools/verify.py's ninth leg and the two-line Q98
record (Sentinel's Q98 artifact), so HEAD agrees with Q98's own text.
verify --repo .: 9 legs, 9 pass, 0 fault -- gate OK. Report:
/root/.hermes/wizard-outputs/volt/2026-10-30-q126.md