93 Commits
Author SHA1 Message Date
ledger 6b1e24fec4 volt: root CHECK-* sweep 2026-11-02 -- 32 entries, 20 OK / 12 FAULT at e44d49a
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.
2026-11-02 22:58:39 +00:00
volt b46fa4b03c volt: Q159 — the verifier ledger's three reds: two missing/regressed census rows and a host pin under the repaired forge cell 2026-11-02 19:58:53 +00:00
beam 7659e22493 beam: Tarjan SCC iterative, brute-force verified 2026-11-02 18:06:15 +00:00
ledger 9a9061f71c volt: Q157 — the untracked-file census grades its pinned universe, not the live tree
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
2026-11-02 16:57:47 +00:00
volt d917119611 volt: Q63 census re-emitted from the COMMITTED runner ledger (fixes 6 gate-run rows my CLASS_REGRESSED cell caught) 2026-11-02 14:39:28 +00:00
volt b168ba701c volt: Q63 census reads CHECK-<slug> gates, and a census row may not tolerate its own rot 2026-11-02 14:33:56 +00:00
volt f518fb86a9 volt: q156 — the Q85 landing appended to the queue without re-rendering the index or re-taking the open-set pin 2026-11-02 11:34:04 +00:00
volt 3e48c598a5 volt: q155 — workqueue census graded against its pin, not the live queue 2026-11-02 05:24:32 +00:00
volt bdebc3ee8c volt: Q153 -- beam test bound its module to the host; lane guard added 2026-11-02 00:41:40 +00:00
ledger 8837bb5053 volt: q152 gate -- posts-census offline repair, check_sweep --only scopes the grade 2026-11-01 22:12:45 +00:00
volt 76471add2d ledger: both later check-in censuses graded at their own revision (Q151)
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
2026-11-01 21:44:26 +00:00
volt c991efdd73 Q88 closure: the check-in census is pinned to a revision and both halves are graded (volt)
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).
2026-11-01 19:27:04 +00:00
ledger 6db0ca1a64 Sentinel: close Q57 - standup entry binds the bytes it grades
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.
2026-11-01 18:52:14 +00:00
volt 006a45c9ee volt: q150 -- verifier census sees the repo root; 197/197 covered, ledgers re-measured 2026-11-01 16:22:50 +00:00
ledger 12a8558202 volt: q149 -- beam pathguard cells off pytest, gate green at 645 cells
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/
2026-11-01 14:58:07 +00:00
ledger fad7837bb3 volt: q148 -- retake tool for the entry-point baseline, three rows re-taken, one signed 2026-11-01 12:23:51 +00:00
volt 3118da3bd4 q147: class the new verifier in the Q63 census (wired-invoke, measured)
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.
2026-11-01 11:53:41 +00:00
volt de6d848fe6 q147: record the census re-pin in the queue; move the open-set pin by one record
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.
2026-11-01 11:50:50 +00:00
volt 5b58317a43 q147: grade the workqueue census at its pinned rev, all four columns
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.
2026-11-01 11:47:21 +00:00
volt 03ba6d09f5 volt: land Q146 record and its open-set pin — the repair blobs were already carried by d814a58, the queue record never was 2026-11-01 09:34:22 +00:00
sol d814a58a10 sol: add sol-profile triage-review queue artifact 2026-11-01 07:34:31 +00:00
volt fe74bc41fa volt: Q145 -- two entry points read FAIL beside their own green evidence
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.
2026-11-01 05:16:53 +00:00
ledger b6be094f68 volt: land the Q144 entry-point record, its CHECK path and the path-claim repair 2026-11-01 05:12:21 +00:00
ledger 846fe39040 sol: untracked-file triage classification (2026-11-01) - fresh 295-path re-derivation with independent CHECK 2026-11-01 04:55:48 +00:00
volt 4c9db4321d volt: q143 baseline takes its own row, and the report states the load limit it measured 2026-11-01 02:29:16 +00:00
volt c0e473ffe3 volt: census of every CHECK entry point at HEAD, and the quill draft table repaired to its lane 2026-11-01 02:26:04 +00:00
ledger 17e7a35aaf volt: q-checkparen CHECK entry point resolves its own tree
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.
2026-11-01 00:16:15 +00:00
ledger aba1621812 volt: check_lint catches a trailing prose aside after sentence punctuation
`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/.
2026-11-01 00:13:35 +00:00
volt 626e272f1c volt: Q142 record -- the quill draft-compliance artifact now grades its own tree
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.
2026-11-01 00:05:08 +00:00
volt 52b9aceff9 ledger: rebuild the dir census over tracked blobs at a pinned rev (Q141) 2026-10-31 21:29:18 +00:00
Volt 782cc3f68a volt: Q140 -- ledger dir census counts the host (20 ignored .pyc rows); tracked-at-rev population audit 2026-10-31 19:17:43 +00:00
volt 4f0a8af26d volt: Q139 -- the TOOLS.md drift guard is a fast leg, not a sweep-only cell 2026-10-31 19:10:10 +00:00
volt 8c81135618 volt: Q138 -- re-render docs/TOOLS.md after the eleventh leg, pin the moved queue counts
docs/TOOLS.md drifted on two counts (ten legs, missing open-set row); tool_map.py --write now renders 23 tools / 11 gate legs. open_set.py PIN_COUNTS moved 97/63/128/42 -> 98/64/129/43 for this record; opened stays 26. Full gate 11/11 at the committed tree.
2026-10-31 16:47:31 +00:00
volt cddf976d28 volt: land Q137's open-set artifact (untracked), fix its stale digest, add the 11th gate leg
The Q137 record described bytes no ref held: wizard-work/volt/q137-open-set/
was untracked, the record cited open_set.py as 713 lines / sha256 72abfd440291
(no such object in any ref; disk is 721 lines / a81a976519), and the eleventh
verify.py leg was uncommitted. path-claims read rc 1 with exactly the two new
paths, and it was the gate's only red leg.

Landing: open_set.py, CHECK-q137, REPORT.md, the queue addendum, the
re-rendered index, tools/verify.py's open-set leg.

After: CHECK-q137 4/4 rc 0; verify.py --selftest 59/59; verify.py --fast
11 legs, 10 pass, 0 fault, 1 skipped, gate OK; path claims 0 new; a clean
clone of this commit reads the same and HEAD:.../open_set.py sha256 equals
the digest the addendum states.
2026-10-31 16:33:07 +00:00
volt fbe4f1c09e volt: q136 -- sandbox leg compares real paths, so a symlinked TMPDIR is not a miss 2026-10-31 12:07:52 +00:00
volt 3612c56706 volt: q136 -- the spark word-frequency cell grades the copy beside it (gate's import-resolve leg green) 2026-10-31 11:54:15 +00:00
volt 7d5de199e3 volt: q114 -- free-tier audit re-read from 17 provider pages, graded by CHECK-q114 2026-10-31 07:21:55 +00:00
volt fd38266d8d volt: q118 -- the retried folder read is graded, and the wake is measured without a deletion
The monitor's retry (3 attempts, 2 s apart) had no reader: CHECK-q115 grades the
carry path and its harness replaces get_folder with a stub, so a repair that
retried once or never would have read the same. q118_verify.py drives the
deployed loop at the boundary it really crosses -- a fake curl first on PATH,
scripted codes, every call timestamped -- and grades recovery, exhaustion,
no-pause-on-success and the Q115 carry, with three mutants required to red the
cell they target.

Measured: CHECK-q118 8/8 legs rc 0; a copy with tries=1 reads 3 faults rc 1;
verify 10/10 legs, gate OK.
2026-10-31 04:50:31 +00:00
volt fdcbffede5 volt: q134 record -- the one-off probe is retired, read back, and graded
tools/inspect_tree.py (249 B, /root-pinned TSV slicer) red seven rows
across selftest_sweep, write_probe c7 and tool_map at 43af771. Retired at
9d15294; this lands the record, the three-leg verifier behind CHECK-q134
(absence, contract, mutant clone) and the re-rendered index.

Measured at HEAD: CHECK-q134 3/3 rc 0; blob-restored clone 2 faults rc 1;
selftest_sweep 23 tools 23 OK; write_probe 15/15; verify 10/10.
2026-10-31 04:39:45 +00:00
volt e61ccd803b volt: q132 verifier names the self-consistent empty render (9th leg)
A document rendered after the LEGS table broke is accepted as current by
the pre-fix parser with no gate column at all, so mutant-doc-drifts alone
would pass a tree that never had the column. The new leg reads that same
mutant's fresh render and requires rc 0 with a '-' cell, pinning the
failure mode the repair removes.

Measured: q132_verify.py 9 legs, 0 fault, rc 0.
2026-10-31 04:39:42 +00:00
volt 10ec491129 volt: q133 repair -- beam test cells bind the module beside them
Two test cells opened with sys.path.insert(0, /root/.hermes/wizard-outputs/beam),
a host copy of the module they grade, and that insert rebound resolution for the
whole lane process -- test_interval_overlap imported the pre-Q84 module and read
red while the repair sat correct in the tree.

Each cell now binds Path(__file__).resolve().parent and asserts the import
landed there. New instrument: q133_verify.py behind CHECK-q133 (5 legs) and
q133_oracle.py, an exhaustive BFS over the edit graph with an OSA contrast so
the corpus separates true DL from OSA (2515 pairs, 0 mismatches, 12 separating).

verify.py: 10 legs, 10 pass, 0 fault. beam/CHECK: 595 tests, 0 failures.
2026-10-31 02:10:33 +00:00
ledger e094c913f2 volt: Q132 repair -- tool_map reads a LEGS table whose field is not a literal
Q130's closed-artifacts leg added "path": os.path.join(...) to verify.py's
LEGS, so ast.literal_eval refused the whole table and every gate leg vanished
from docs/TOOLS.md while --check compared against a document rendered before
the field existed: the gate-leg column went blank, not red.

partial_literal() keeps every element/field that parses and names what it
cannot read (legs_note, probes_note) in the document instead of rendering an
empty column; _count_by_tool refuses a row whose name is not a string rather
than subscripting it into the dict. Selftest 20 -> 23 cells, pin moved with
it, docs/TOOLS.md re-rendered (23 tools, 10 gate legs).
2026-10-30 23:42:34 +00:00
ledger 232c8af304 volt: Q90 -- tree_root.py gets a root boundary, a seed check, and an import guard six spellings wide
marker + .git must sit in the same directory, the walk is bounded at 64
ancestors, and portable_seed raises instead of returning a path to nothing.
Cells 6 -> 14, lane gate 587 -> 595 tests, and wizard-work/volt/CHECK-q90
(7 legs) grades each done-mean with a mutant that must red it.
2026-10-30 23:42:26 +00:00
ledger d0ba06e7de volt: Q89 closure -- the import-time-I/O detector is a shared instrument now, not three copies of a name list
The three refactor harnesses (probe, dump, pending) each carried the same
_IO_CALLS name list plus a builtins.open spy. Measured at bb4a85e in a clean
clone: Path(__file__).read_text(), os.open(__file__, O_RDONLY), io.open(__file__)
and with Path(__file__).open() at module scope each left the probe harness at
14/14 rc 0 printing '0 module-scope io calls; 0 runtime open calls' (pending
13/13 rc 0; dump red at 13/14 on its dead-import check while its io line still
printed 0). The name-list walk resolves Path(p).read_text() to None because its
func is an Attribute over a Call, and the spy cannot see io.open/pathlib.

Now: wizard-work/forge/import_io_detector.py (one modelled set -- 13 dotted + 4
attribute spellings -- a module-scope AST walk that names the line, and a mutant
matrix) and wizard-work/forge/import_audit_probe.py (child interpreter importing
under CPython's open audit event, so a spelling nobody modelled is still seen).
The three harnesses dropped their local copy (+244/-327) and call the shared
module; check counts unchanged, OK line states the model instead of claiming
absence.

Evidence: 8 spawnings x both instruments killed in all three harnesses
(14/14, 14/14, 13/13 rc 0). Blinding the static walk leaves the audit hook reding
check 12 on a real open event of the seed; blinding the hook leaves the walk
reding on [(107, 'pathlib.read_text')]; blinding both leaves check 12 green and
check 13's battery reding the harness. _F = open / _F(DEFAULT_PATH) -- a spelling
no list names -- is caught by the hook alone.

Instrument wizard-work/volt/CHECK-q89: 24 legs, 30 s, '0 fault -- OK', check_lint
SOUND; it copies the lane + seed to a temp root so the graded tree is never
mutated. Fourth copy (verify_dump_seed_refactor.py) untouched at 16/16 and used
as an independent oracle: agrees 12/12. Q90's beam guard untouched.
verify.py --fast: 10 legs, 9 pass, 0 fault, 1 skipped, gate OK.
2026-10-30 23:13:20 +00:00
volt 8ce963a58a volt: Q115/Q131 -- folder-read failure carries its listing; the harness grades again
Q115: the monitor's failure branch printed 'folder unreadable: <folder>' and
skipped the folder, so every path in it left the listing and the next diff read
as deletions (417 on 2026-10-28, 413 before). Format v1.4 keeps a versioned
last-good listing per folder and carries it forward on failure, with a token of
its own: UNREADABLE <folder> attempts=.. last=.. carried=.. from=.., and
NO-BASELINE <folder> when there is nothing to carry.

Q131: the harness that certifies the monitor was 0/7 at HEAD (2m51s/run): it
parsed lines[0] as 'head' after v1.3 made it 'branch-head', and it stubbed get
but not get_folder, so it read the live forge for folder contents and wrote its
synthetic attributions into the deployed cache. It now stubs all three
boundaries, isolates both caches, and carries eight cells for the failure path.

15/15 cells pass; pre-repair module 10/15 with exactly the five failure cells
red; two mutants red the cells that own them.
2026-10-30 20:59:22 +00:00
volt 590c7d9c04 volt: q129 -- rename the 2026-10-30 timmy check-in to the contract name, add CHECK-q129 2026-10-30 18:20:04 +00:00
volt 88419d3c85 Q116: the grep half gets an instrument; fourth dated reading of the render-synthesized field 2026-10-30 13:25:47 +00:00
spark f0fddc5a9c spark: add verified even Fibonacci sum solver 2026-10-30 10:35:49 +00:00
volt 85cc9e6963 volt: bound the tool_map drift CHECK (42.75s, was 107.93s and killed mid-leg)
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.
2026-10-30 06:02:25 +00:00
ledger b14d73a8f4 volt: Q126 -- gate 9/9: nine host-bound test files rebound to the repo module, 225 census paths ledgered
(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
2026-10-30 05:37:30 +00:00