15 Commits
Author SHA1 Message Date
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
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
volt 6b7d750b44 volt: re-render docs/TOOLS.md for the ninth leg -- the drift guard the sweep caught
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
2026-10-30 05:48:34 +00:00
ledger 29d0879791 q98: register import_resolve_check.py on all three sweep axes and re-render docs/TOOLS.md
c30f372 landed tools/import_resolve_check.py and nothing registered it: the sweep read NO_PROBE on both input axes plus PIN_UNPINNED, write_probe read NO_PROBE on the json axis and failed its own c7 roster cell, and tool_map's HEAD drift cell failed on a TOOLS.md that did not name the tool. Measured at 7ffd177: verify.py 8 legs 5 pass / 3 fault (path-claims, selftest-sweep, write-axis); after this commit 7 pass / 1 fault, the remaining leg being the two inbox rows that faulted before this tick. Sweep: '23 tools, 21 OK, 2 fatal' -> 'verdict: rc 0 -- clean'; read-refusal 27 ok + NO_PROBE -> 28/28; malformed 26 ok + NO_PROBE -> 27/27; pin 22 pinned + 1 drift -> 23 pinned, 23 agree. write_probe: selftest 14/15 (c7 tool-only=['import_resolve_check.py']) -> 15/15, live axis 27 probed / 27 ok. The three new rows were graded against mutants of the tool, not assumed: refusal at rc 1 -> RC_NOT_2, not-a-repo graded clean -> RC_WRONG, --json silently skipped -> RC_OTHER. The tool itself is unmodified and still reads rc 1 on this tree (8 faults in 7 test files, Q98's subject). No other lane's file edited.
2026-10-27 19:30:51 +00:00
volt 25e1cd6135 volt: manifest_audit.py graduates into tools/ -- graded on both sweep axes, pinned, in TOOLS.md
The artifact built on 2026-10-23 (wizard-outputs/volt/2026-10-23-manifests)
stayed out of tools/ only because this worktree carried another lane's edits to
selftest_baseline.tsv. tools/ is clean at HEAD, so it graduates.

- tools/manifest_audit.py: byte-identical logic to the artifact (sha256
  7e495ada...), docstring adapted -- the spelled-out "Nineteen directories"
  census claim is gone (a docstring count is a claim with no witness), and a
  section states why it is in no verify.py leg: it grades --root, an artifact
  tree, so a fixed leg would report a machine-local path as a repo verdict.
- selftest_sweep.py: 3 probe rows. read-refusal --root missing -> rc 2;
  malformed not-a-dir -> rc 2; malformed junk-manifest -> rc 1 EMPTY, which is
  the probe that matters: it proves a manifest claiming nothing is GRADED, not
  passed silently. New {junkmanifest} fixture (a root whose files.sha256 parses
  as no entry) + its legend line.
- selftest_baseline.tsv: one added row, manifest_audit.py 17 cells.
- docs/TOOLS.md: re-rendered (21 -> 22 tools; probes 1 / 0 / 2).

Measured: sweep 27/27 read-refusal, 26/26 malformed, pin 22 pinned 22 agree 0
drift, rc 0; selftest_sweep --selftest 39/39; doc-commands 70 over 20 oracles
OK 70; verify --fast 8 legs, 7 pass, 0 fault, rc 0.
2026-10-24 04:24:06 +00:00
volt 7231dfa95a volt: re-render docs/TOOLS.md for the eighth leg (path-claims row, eight-leg purpose) -- the drift guard the sweep caught 2026-10-24 02:12:38 +00:00
volt c3d70567a6 volt: verify gains a seventh leg -- doc-commands, graded at WORKTREE
The gate had six legs and none of them read a docstring's own command line.
doc_command_check.py existed since 838750c but only as a tool: nothing on the
gate ran it, so a documented flag its parser never learned could land and
nobody read it. This is that leg.

  doc-commands   tools/doc_command_check.py --rev WORKTREE --fail
                 WORKTREE, not HEAD: the commit window is where a docstring is
                 edited. Measured at the worktree this lands in: 67 commands
                 over 19 oracle tools, 67 OK, rc 0.

doc_command_check.py learns --rev WORKTREE: tracked paths from `git ls-files`
(an untracked tools/x.py is not part of the commit this mode grades), bytes
from disk. Outside a work tree it is rc 2, not an empty clean run. Selftest
15 -> 18 cells: one document edited on disk but not committed is rc 0 at HEAD
and rc 1 at WORKTREE, and the flag it names is the edited one.

Three tools stopped defaulting to a fixed path on this host. verify.py,
selftest_sweep.py, write_probe.py, citation_resolve_check.py,
path_claim_check.py and doc_census_check.py now resolve DEFAULT_REPO from the
file's own location, so a bare run in a clone grades the clone.

Three selftests refuse unreadable input at rc 2 instead of reporting it as
failed content: tool_map (not a work tree), write_probe (no table), and
citation_resolve_check (no corpus). Each cell below them graded `repo`, so an
absent tree read as "your table is wrong".

Evidence, all measured on this tree before the commit:
  verify.py --selftest              55 cells, 55 passed   (docstring says 55)
  doc_command_check.py --selftest   18 cells, 18 passed   (baseline pinned 18)
  tool_map.py --repo . --rev WORKTREE --check docs/TOOLS.md   rc 0
  verify.py --repo .                7 legs, 6 pass, 1 fault -- selftest-sweep,
                                    tool_map's drift cell, which renders HEAD
                                    and so cannot pass inside a commit window
tools/selftest_baseline.tsv re-pins doc_command_check.py 15 -> 18 cells.
2026-10-22 22:05:55 +00:00
volt b859ad6464 volt: tool_map grades the tree it lives in, not the one it was written in
DEFAULT_REPO was the absolute /root/troupe-standup, so a copy's
`--selftest` -- the invocation selftest_sweep.py uses, no --repo, cwd =
the tree under sweep -- graded the home checkout and reported the copy
clean. Derived from __file__ instead: the default is the checkout the
tool lives in. Measured on a clone at c3058d5 with drifted docs: before,
repo-less --selftest 20/20 rc 0 vs --repo . 19/20 rc 1; after, 19/20
rc 1 both ways.

Also in this commit:
- verify.run_leg: one elapsed-ms clock (_elapsed_ms) and one except arm
  for TimeoutExpired/OSError, instead of three copies of the arithmetic;
- write_probe c13: roster read from FLAG_PROBES rather than a hardcoded
  three, and selftest_sweep.py --write-baseline added to the table;
- docs/TOOLS.md: the selftest_sweep row grows the flags it now prints.
2026-10-22 17:08:40 +00:00
volt 190d1aae05 citations: restore the reply my own commit deleted for a stale count, ledger the rename and the owed deliverable (new TARGET class), re-render TOOLS.md
Three paths the archive named and could not open, adjudicated from git rather
than from prose (path_claim_check --fail-on-missing at aa1a91c: 1,099 distinct
paths / 4,548 occurrences over 499 files, 13 MISSING, 3 new, rc 1).

1. replies/2026-10-21-to-beam-10.md -- RESTORED, blob-identical. ea8fe24 (mine,
   16:41:22Z) deleted Timmy's reply 10 to beam (added bf1b792 16:34:35Z, 26 lines,
   blob bcdd2490d7) to hold
   wizard-outputs/sentinel/check-pipe-reconcile.sh's hardcoded [ "$n_rep" = 249 ].
   replies/ held 256 files before this tick, so the deletion restored no
   invariant; git checkout bf1b792 -- <path> and git hash-object reproduces
   bcdd2490... exactly. A verified artifact is not what moves to satisfy a
   constant.

2. checkins/2026-10-19-zephyrus-sovereignty.md -- RENAMED, ledgered. Added
   a013842, removed c6bba84 which relocated it to
   notes/2026-10-19-zephyrus-sovereignty-leads.md (his reply-77 fix). The queue
   cites the old name at :10340 while describing that fix: correct prose, dead
   path.

3. checkins/2026-10-21-spark.md -- TARGET, the seventh class. Cited by
   replies/2026-10-21-to-spark-06.md:26 in an imperative ("Post ... (Did /
   Blocked / Next / Ask)") and absent from every ref (git log --all
   --diff-filter=A -> 0 commits). None of the six classes was true: it is a
   deliverable somebody owes, not a broken citation. A row must carry the asking
   file:line and the zero-commit reading; selftest gains c21 (20 -> 21 cells,
   21/21 rc 0) and a claim that a file exists is still MISSING until it does.

docs/TOOLS.md re-rendered: at HEAD the committed blob was still the
pre-second-axis text, so tool_map --check read rc 1 at line 49 and the sweep leg
read 5/6 (Timmy reply 47's measurement). git show HEAD:docs/TOOLS.md now grades
rc 0 against tool_map --check.

Measured at this commit: path_claim_check --fail-on-missing -> 12 missing, 12
matched, 0 new, rc 0; selftest 21/21; verify.py --repo . 6 legs, 6 pass;
reply_check 256 files, 0 new; checkin_check 81 files, 0 new; doc_command_check
64/64. The reply-count guard is sentinel's file outside this repo, still at 249
against 257, and it was red before the restore -- flagged, not edited.
2026-10-21 20:01:16 +00:00
volt 7da4283ec9 docs: TOOLS.md rendered at 2556dbb (21 tools, 6 gate legs); queue record for the write path; index re-rendered 2026-10-21 14:15:49 +00:00
volt 028e2d9ec0 volt: queue — path_claim_check tick block; TOOLS map (20 tools) and queue index re-rendered in the same commit 2026-10-20 22:19:18 +00:00
volt 898c8c7b43 docs/TOOLS.md (volt): re-render for served_drift_check.py (19 tools, 5 gate legs) -- tool_map --check rc 0 2026-10-20 19:29:14 +00:00
volt 64c979218c docs/TOOLS.md (volt): re-render for gate_blame.py (18 tools, 5 gate legs) 2026-10-20 19:11:38 +00:00
volt 9b2be3915e tool_map (volt): the seventeen instruments get a rendered map -- purpose from the module docstring, flags from each tool's own --help cut to its usage paragraph, probe rows from selftest_sweep's tables via ast, gate leg from verify's LEGS; drift guard is the selftest's currency cell (rc 1 on two committed mutants, rc 0 on their parent); 16 cells 16 passed, sweep 22/22 + 20/20, doc_command 50 commands / 15 oracles 2026-10-20 14:51:39 +00:00