queue_append_audit.py now runs two graders out of one `git archive`: grade_index
(unchanged vocabulary) and grade_pin, which runs the rev's own open_set.py
--check beside the rev's own queue. PASS / DRIFT / UNGRADABLE / ERROR; rc 1 when
either axis is fatal, so --guard means "index current and pin moved".
--axis {both,index,pin} narrows the run; the report prints index:/pin:/drift:.
Checks landed with it: CHECK-append-pin (5 legs, rc 0 here).
Measured at 12fb1b0's parent line: --selftest 43/43; --guard rc 0 pin:PASS;
1c3c855..56d3853 rc 1 pin:DRIFT "count headings moved 116 -> 117" while
--axis index over the same range reads rc 0, and 12fb1b0's pre-axis blob reads
rc 0 too, so the red is the axis and not the range.
PIN_COUNTS moved to the post-append counts (119 headings/103 ids, 131
records/97 ids) and docs/queue-index.md re-rendered; docs/TOOLS.md row follows
the tool's flags.
CHECK-q69-census red the census's own six prefix literals as six host-path
values, so the instrument inflated the population it reports (volt 10 code
files / 22 constants instead of 9 / 16) and listed itself as a CONST row.
A bare prefix names a namespace, not a location: values equal to one of the
six are now PATTERN, counted apart and never graded, pinned by a 12th cell
and a fifth guard leg (selfcount). The general rule also reclassifies
wizard-work/sol/test_check_provenance.py:160, whose only host string is an
assertion needle.
Measured at this tree: bash CHECK-q69-census -> rc 0, 5 leg(s), 0 fault(s),
files=1345 git=1345 own-rows=0 patterns=6. Full census: 542 code files /
885 constants / 31 prose-only / 7 pattern over 1345 tracked .py; text scan
586. The record in WORK-QUEUE.md carries the post-fix readings.
CHECK: bash CHECK-q69-census
guards that landed unsigned
WORK-QUEUE.md carried the Q165 and Q166 records uncommitted while the pin,
the path-claim baseline and the entry baseline had already moved -- the
defect Q154 filed against another lane, in this lane's own worktree. The
index had been rendered before the Q165 record's final paragraph, so
`queue_index.py --check` read STALE at line 271 and the repo gate's
index-current leg read FAULT.
- docs/queue-index.md re-rendered by `tools/queue_index.py --repo . --write`
(315,689 bytes; 263 items, 114 sections, 149 record blocks, 101 ids).
- CHECK-q159 and its module wizard-work/volt/q143-check-sweep/block_rows.py
land with the record that names them, so the sweep's MISSING row is signed.
- check_entry_baseline.tsv: CHECK-q164 and CHECK-q166 were tracked guards with
no signed row, so `check_sweep.py --paths` read both as NEW; their codes were
measured here (q164 7 legs in 55.1 s, q166 4 legs) and signed. CHECK-q159's
tally string was re-measured (5 legs -> 6).
Measured before this commit, at this worktree: verify.py --fast 12 legs,
11 pass, 0 fault, 1 skipped, gate OK, rc 0; check_sweep.py --paths 159 entry
points, 147 baseline paths, 12 faults -- 14 before the two rows, and the 12
that remain are other lanes' NEW rows, named in the report.
Repairs wizard-work/beam/test_interval.py to resolve interval_merge.py from
Path(__file__).resolve().parent and assert the binding, so the suite grades
committed bytes instead of /root/.hermes/wizard-outputs/beam.
Landing completed in this tick: PIN_COUNTS 110/97/124/90/152, queue index
re-rendered, cited poison module staged (path-claims), CHECK-q162 (4 legs).
Measured: tools/verify.py --fast -> 12 legs, 11 pass, 0 fault, 1 skipped, rc 0.
wizard-work/ledger/CHECK-2026-11-02-jobs-table landed at 2e57e6b as a Python program with a python3 shebang, so `bash <path>` -- the invocation the q143 sweep, verify.py's doc-command leg and any reader use -- read rc 2 on shell syntax before grading a cell. Its derivation also read three source JSONs from the literal path /root, so with those absent it raised FileNotFoundError and exited 1: could-not-grade printed as a fault.
The grader moved to grade_jobs_table.py; the path keeps a bash wrapper. SRC_ROOT is JOBS_SRC_ROOT (default /root); a source mode with sources absent now exits 2 and says CANNOT GRADE; a new --offline mode grades the committed artifact and states that re-derivation was not attempted. CHECK-q161 (6 legs) grades the wrapper, the pre-repair blob at 2e57e6b under bash (rc 2), the hostless copy (rc 2), a tampered copy (rc 1), --offline, and the census row.
bb8aec7 landed wizard-work/beam/test_tarjan_articulation.py with
sys.path.insert(0, '/root/.hermes/wizard-outputs/beam'), so its four cells
graded the host copy and never the committed bytes. Repo gate at that commit:
import-resolve FAULT, 1 OUTSIDE_REPO finding. Before-fix measurement: a lane
copy with the beside-module poisoned to return empty sets still read
'ALL TESTS PASS' rc 0. After: clean 0, poisoned 1 (AssertionError: set()),
authority 0 faults, authority --rev bb8aec7 1.
Ships CHECK-q160 (4 legs, rc 0; rc 2 outside a git work tree), the poison
stand-in, the queue record, the re-rendered index, the open-set pin move and
one baseline row.
The quill draft-compliance census graded a snapshot against a moving tree
and shipped two implementations of the same gate; the lane copy scanned
/root/troupe-standup by absolute path and appended a row from a host path.
Both now read the pinned revision (2f8ef83) via git archive, with --worktree
and --rev modes, and the lane copy is a pointer that execs the root gate.
Also completes the two bookkeeping moves the record describes: docs/queue-index.md
re-rendered (299722 B) and PIN_COUNTS moved 106/93/120/86/148 -> 107/94/121/87/149
for the same-tick closure. verify.py --fast: 12 legs, 11 pass, 0 fault, 1 skipped.
The volt lane gate read rc 1 at d5f24f1 with 5 faults: four committed
verify_*.py named by neither ledger, and one runner row bound to a blob the
tree no longer holds. The drift was wider than that: the runner ledger was
emitted at fe23317 (2026-11-01) and eight verifiers have been edited since,
so nine rows described content that no longer exists, and eight files in the
class population had no row at all.
Census re-derived by q63_verify_scan.py --repo . --emit-baseline at d5f24f1
from the committed ledgers (not from the dirty worktree), which adds exactly
the four missing rows: two undeclared, two wired-invoke. Runner rows for the
seventeen affected paths re-measured by q65_runner.py --emit --merge at
d5f24f1; rc_probe rows for the seven stale paths re-probed at d5f24f1.
Readings at this commit: q65_runner --check 176 population / 176 rows /
0 unclassed of 217 / 0 fault; q65_rc_probe --check 0 fault; bash
wizard-work/volt/CHECK CHECK PASS rc 0; tools/verify.py --fast 12 legs,
0 fault, rc 0.
sweep.py runs every root CHECK-* under bash and records rc, class and the
process's last line, pinning rev + sha256 of each entry in manifest.json.
report.md is the table; TRIAGE.md groups the 12 reds into four causes.
check-root-sweep.sh grades the record (pin / universe / class contract /
report parity / rows integrity), 5 legs, with sensitivity_probe.py proving
three mutations redden the leg that owns them and the restore is green.
CHECK-2026-11-02-untracked-classify read rc 1 within minutes of every tick:
its verdict was 'manifest == the live untracked set', in a repo whose
untracked set moves with every tick. Measured at 602e982: manifest=306
live=309, 7 problems, none of them about the 306 rows.
The verifier now grades four legs against the committed snapshot and its
pin 4a640e1 (pinned-universe, category, rule-agreement, pinned-absence),
prints live drift as ADVISORY, and proves it can still fail with a 9-cell
--selftest (six reds, one rc-2 refusal). The generator refuses to overwrite
the pinned snapshot and derives REPO from __file__; CHECK-q157 is the guard
(6 legs, incl. drift-tolerant vs tampered-manifest). Both touched entry
points are signed into the sweep baseline.
CHECK: cd /root/troupe-standup && bash CHECK-q157
The 2026-10-28 and 2026-10-29 check-in censuses were red at d42f577 for
three reasons at once: both CHECKs were Python under a 'bash CHECK' line
(rc 2, import: command not found), both graded the live tree (so every new
check-in reddened a dated artifact), and both hardcoded /root/troupe-standup.
The 10-28 table also carried a 101st row for checkins/2026-10-27-sentinel.md,
a file in no revision.
- pins beside each artifact, in the 10-27 format (ab7767d / b21bb10)
- extractor and generator take --pin REV (git ls-tree/show, no disk), write
nothing without --write; 10-28 regenerated at its pin (100 rows); 10-29
regenerated at its pin reproduces the committed CSV/JSON/MD byte for byte
- CHECK = bash wrapper over a 7-leg (28) / 5-leg (29) grader that derives
every cell from the pin, writes nothing, and answers rc 2 when the pin
object is absent
- CHECK-q151 runs both gates plus a mutant cell
- q143 sweep: both rows re-taken 1 -> 0 with retake.py, CHECK-q151 added;
q137 open-set pin moved with the record
Record at the foot of WORK-QUEUE.md; docs/queue-index.md re-rendered in this
commit, as the append-audit leg requires. The work landed at f22824a (pin,
TSV leg, corrected artifact) and ad695ac (MD table/total/appendix legs).
null's lane met Q57's done-means committed (831f809/c48f098 on 2026-10-24,
entry regenerated at 0792278 against 912e8a8 on 2026-10-25): check.py reads
30 passed / 0 failed rc 0, q57_mutation.py reads 21 passed / 0 failed rc 0,
bash wizard-work/null/CHECK -> LANE GATE GREEN rc 0, and every artifact on
disk is byte-identical to the blobs origin/main carries (git diff empty for
all five; 912e8a8 authored by null, ancestor of origin/main 0e4b391).
What was missing was the queue's own closure line. This append supplies it
at the foot of WORK-QUEUE.md (no earlier line number moves), moves the
open-set pin (records 110 -> 111, record ids 76 -> 77; Q57 carries a
heading, so record_only, ids, headings, heading_ids, open and opened are
unchanged; Q57 was never in PIN_OPENED), and re-renders docs/queue-index.md.
tools/verify.py --fast: 11 pass, 0 fault, 1 skipped (selftest-sweep).
No code changed; no other lane's file touched; nothing pushed.
The beam lane's gate was red from the commit that added
wizard-work/beam/test_pathguard.py: it imported pytest for
pytest.raises alone on an interpreter with none, so all eight cells
were reported as one IMPORT-FAIL and graded nothing. The lane already
vendored beam_assert.raises (Q128) for exactly this; the five cells
now use it, the three plain assertions are untouched, and the gate
reads 0 failure / 0 error / 0 import fault at 645 cells.
Also lands: CHECK-q149 (six legs, mutant-graded), the re-taken
baseline row (1 -> 0, written by retake.py not typed), the q137
record-count pin it moves, the Q149 record, the re-rendered index.
Evidence: /root/.hermes/wizard-outputs/volt/q149-beam-gate/
The verifier this item added is a committed verify_*.py at HEAD, so the Q65
gate faulted on it as UNCLASSED -- one new fault, 60 -> 61. The row is a
row-level add measured at de6d848 with q63_verify_scan.py --verbose, which
reads it 'ok 0 assert wired': CHECK invokes it by basename in its own
directory. Coverage 140 -> 141 of 191; the gate's fault count is back to 60,
unchanged from entry. The census is not re-taken whole here -- a whole re-take
would turn the 42 NEW-UNWIRED faults into tolerated rows.
The record states the entry-state readings, the three faults, the repair and
what it does not claim. open_set.py's count pin moves by exactly this append:
records 106 -> 107, ids 137 -> 138, record_ids 72 -> 73, record_only 51 -> 52,
with headings, heading_ids, open and opened unchanged -- no id changed state.
docs/queue-index.md is re-rendered in this commit.
The census CHECK asserted that the committed TSV re-derives from
WORK-QUEUE.md as it stands on disk. That document is the one file every lane
appends to, so the check graded the calendar: rc 0 for a day, then
'expected 96 headings, got 97', rc 1 forever. It also compared only the
(q,title) pairs, so a mutated status cell and a mutated done_implies cell
both read PASS rc 0.
- verify_workqueue_census.py: 17 legs at the rev the manifest pins (blob,
header, all four columns in document order, the markdown render, the
manifest's measured counts, a timestamp that is not older than the pin);
rc 0/1/2, and no rev is 2, never a pass; a currency advisory names how far
HEAD has moved past the pin and never decides the verdict; 13-cell selftest.
- extract_workqueue_census.py: wrapper over the verifier's --write (Q141's
pattern), repo resolved from __file__, rev defaulted to the pin.
- manifest.json: schema v2 with rev, source_blob, repo-relative source and a
measured timestamp. The TSV is byte-identical (sha256 dcdc3c2aac92), so no
census row moved; the diff is the markdown header/footer.
- CHECK-q147: a root entry point grading the repair in four legs.
CHECK-toolsmd-drift demanded the literal '20 cells, 20 passed' and a
'9 legs, 8 pass' tally (tool_map prints 23, the gate has 12); q132_verify
demanded legs_n == 10 and pinned its own cell count at 23. Both graded a
numeral instead of the property, so both read FAIL while their own detail
line read rc=0.
Now: cells == passed, failed == 0 (floor 20), pass + skipped == legs,
fault == 0, ungradable == 0, and the leg count is DERIVED from
tools/verify.py's LEGS (-1 when the table is gone, so a missing table
fails rather than defaults).
Measured: CHECK-q132 9 legs 0 fault rc 0 (legs=12 declared=12),
CHECK-toolsmd-drift rc 0 in 62 s, probe 12 / 13 / -1. Baseline re-taken
whole at d299373 --timeout 120 --jobs 4: 102 entry points, 71 green,
31 not; --paths 102/102 0 faults. Gate --fast: 12 legs, 11 pass, 0 fault,
gate OK.
The five legs live in wizard-work/volt/q-checkparen/verify_fix.py; this
wrapper execs them after cd-ing to its own checkout, so the CHECK runs from
any cwd and grades the tree it ships in. REPORT.md now names it.
`bash CHECK-quill-draft-compliance (the artifact gate).` is prose, and bash
refuses it before the command runs: syntax error near unexpected token `(`,
rc 2. tools/check_lint.py graded that exact line SOUND because its
"trailing parenthetical" marker required `)` to be end-of-line; the sentence's
full stop after the aside defeated it. The marker now allows `[.!?,;:]?`
between the closing paren and EOL, and five selftest cells pin it: the two
measured prose shapes as PROSE_TAIL, and three controls that must stay SOUND
(process substitution, an opening subshell, a quoted aside).
The pin moves 37 -> 42 in tools/selftest_baseline.tsv, in this diff.
Evidence: selftest 42/42 rc 0; the repro line PROSE_TAIL rc 1 and the bare
command SOUND rc 0; a one-line mutant (old regex only) fails exactly cells 29
and 30, 40 passed / 2 failed rc 1; selftest_sweep 23 pinned / 23 agree / 0
drift rc 0; tools/verify.py --fast 12 legs, 11 pass, 0 fault, 1 skipped, rc 0.
Artifact and leg-graded CHECK: wizard-work/volt/q-checkparen/.
Appends the Q142 record, moves the open-set pin to the counts the append
produced (102 records / 68 record ids / 133 ids / 47 record-only, opened
stays 26), and re-renders the queue index.