#!/bin/bash # CHECK — volt lane: the Q65 verifier-coverage gate. Fast: no verifier runs. # # What this grades: the LEDGER against the tree at HEAD. Every committed # wizard-work/**/verify_*.py must be named by the census # (q63_unwired_baseline.tsv) or by the runner ledger (q65_runner_baseline.tsv), # every ledger row must be bound to the blob it graded, and every ledger row's # verdict must agree with the rc beside it. Re-executing the verifiers is # `q65_runner.py --emit` (minutes, 79 population files of 93 committed # verifiers) and is not this. # # Since cycle 5 it also grades the one thing an rc cannot say: a row is only a # grade if the file has a failure path at all. `q65_no_verdict.py --check` reads # each committed verifier's AST and faults on a file with no raise/assert/ # non-zero exit that the ledger (q65_no_verdict.tsv) does not name. 15 of the 106 # have none -- all spark, recorded as findings, not repaired here; 14 of the # runner ledger's 64 PASS rows are rows on such a file and cannot fail. # # Since cycle 6 it grades that same claim dynamically, and about a process that # actually ran. `q65_rc_probe.py --emit` inverts each verifier's own comparisons # one at a time in a detached worktree and asks whether the exit code moves; # `--check` is the fast half run here: every row in q65_rc_probe.tsv must still # match the blob at HEAD (STALE) and must not contradict its own class. A file # cannot be given a row it did not earn, and a file that changed after its row # was written cannot keep it. # # `inert` is the one class whose negative is unbounded by construction, so the # sweep tries EVERY comparison site before writing it; a file stopped by # `--exhaustive-cap` is `inert-partial`, and --check faults on either word used # outside its coverage. This is cycle 6's own correction: a 3-of-11 sample wrote # `inert` on forge/verify_chunker_refactor.py, whose rc moves at 3 of its 11 # sites (L123, L139, L142) that the sample did not pick. # # The root is resolved from $0, not written down. A gate that `cd`s to an # absolute host path grades THAT tree from whatever checkout invokes it: at # `66e5be1`, a clone with one verifier deleted printed `0 unclassed of 88` and # CHECK PASS (measured 2026-10-24, reply 93 defect 1). `git -C ` # fails outside a repo, which is rc 2 — the gate could not grade, and that is # not a pass. # # rc 0 the ledger is complete, content-bound and self-consistent # rc 1 a fault it graded: an unclassed verifier, a missing row, a bad pairing, # a row whose blob no longer matches the tree # rc 2 it could not grade at all (no ledger, unreadable tree, no git root) set -u ROOT="$(git -C "$(dirname "$0")" rev-parse --show-toplevel 2>/dev/null)" || exit 2 [ -n "$ROOT" ] || exit 2 cd "$ROOT" || exit 2 python3 wizard-work/volt/q65_runner.py --selftest || exit 1 python3 wizard-work/volt/q65_runner.py --check --class gate-run,undeclared || exit 1 python3 wizard-work/volt/q63_verify_scan.py --repo . >/dev/null || exit 1 python3 wizard-work/volt/q65_no_verdict.py --selftest >/dev/null || exit 1 python3 wizard-work/volt/q65_no_verdict.py --repo . --check >/dev/null || exit 1 python3 wizard-work/volt/q65_rc_probe.py --selftest >/dev/null || exit 1 python3 wizard-work/volt/q65_rc_probe.py --repo . --check >/dev/null || exit 1 echo "CHECK PASS: census covers every committed verifier; runner ledger grades clean; no unrowed printer; rc-sensitivity ledger content-bound." exit 0