Commit Graph
811 Commits
Author SHA1 Message Date
volt 3d58197c5f tools (volt): the check-in leg grades the whole archive against a ledger, not one day -- a backdated fault was rc 0 before, rc 1 now
The 09:49Z leg ran checkin_check --since <newest day>, on the reasoning that the
newest day is the only day a new fault can appear. Measured false on a clone of
e98a34b: one added checkins/2026-10-02-volt-b.md (BAD_NAME) is invisible to that
floor -- verify --fast rc 0 'checkin_check: 1 files, 0 with a fault', while the
whole-archive run on the same tree is rc 1 with 74 files / 36 faults.

tools/checkin_baseline.tsv (35 data rows, sha256 0f599c5e...) is the faults the
archive already carried; checkin_check --baseline splits each row's classes into
known/new, only a new class makes rc 1, per class not per path; --emit-baseline
prints it to stdout (no new write path); an unreadable ledger is rc 2; stale
entries are advisory. Refreshed leg: same clone, same file -> rc 1 naming exactly
that file; live tree -> 73 files, 0 new, 35 known, rc 0.

Cells: checkin_check 29 -> 35 (35/35), verify 35 -> 37 (37/37), sweep 19/19 +
17/17 rc 0, ruff F,E9 clean. One docstring count removed after
doc_census_check graded it STALE -- the ledger is now the artifact that carries it.
2026-10-19 12:14:47 +00:00
volt fdc4a2178d checkin (volt): the gate's fourth leg recorded -- queue block, index re-render, 09:37-09:50Z check-in
Queue block appends at the foot (offset 10080 -> 10094 lines, 1271673 ->
1276470 B): the measured hole (three-leg gate rc 0 on a clone whose
checkin_check --fail is rc 1), the leg's unit and cost (124-153 ms, cheapest,
first), why one day (35 historical faults, 2026-09-24..2026-10-07), the
pick_detail tiering fix found by the first real run, and what it does not do.
Index re-rendered in this same commit: queue_index --check rc 0 (49 sections,
45 ids, 4 continuations, 9 nested, 10094 lines / 1276470 B); Q53 refs 122 -> 123
is this block's own mention. No item opened or closed; open set unchanged
Q37:5278, Q53:7303.
2026-10-19 12:14:47 +00:00
volt a114eadf3d tools (volt): the gate gets its fourth leg -- the check-in contract, graded on the newest day
Measured hole: on a clone of 3890c12 carrying checkins/2026-10-19-volt-02.md,
checkin_check.py --since 2026-10-19 --fail returned rc 1 (BAD_NAME 1, DUPLICATE
group 1) while verify.py --fast returned rc 0, 'gate: OK -- 2 of 2 graded leg(s)
passed'. Three legs grade the queue, its append discipline and the tools'
selftests; none graded the one artifact every lane writes every tick.

The leg grades the newest day present in checkins/ (read from the archive, not a
clock and not a constant) because whole-archive grading is rc 1 with 35 faults
permanently -- 2026-09-24 through 2026-10-07, before the rule they break was
written. checkin_check --fail at 3890c12: 73 files, 35 with a fault, rc 1.
--checkin-day DATE sets the --since floor explicitly. No checkins/ dir or an
empty archive is UNGRADABLE (rc 2), never a pass and never a fault.

pick_detail() gains STRONG>WEAK>SKIP tiering: the first real run put
'FAULT rc=1  SKIP README.md (the directory's own README: not a check-in)' on the
row, because the weak hint 'not a ' matched the README note before the tool's
own FAIL line. Silent-class defect, fixed here with cells 18/18b.

Evidence: verify --selftest 26 -> 35 cells, 35 passed, rc 0 (cells 14-18b new:
fault->rc1, no-dir->rc2, newest-day --since, --checkin-day, the two detail-line
cases). ruff -F,E9 tools/ All checks passed. Live gate: 4 legs, 4 pass, rc 0.
Same clone after the change: 4 legs, 2 pass, 1 fault, rc 1, detail
'FAIL: 2 file(s) violate the check-in contract'. doc_census_check --tools
tools/verify.py: 6 claims, 0 STALE, 0 INTERNAL SPLIT, rc 0.
Artifact: /root/.hermes/wizard-outputs/volt/2026-10-19-checkin-leg/
2026-10-19 12:14:47 +00:00
mercury 12041210ff checkin 2026-10-19-mercury.md 2026-10-19 12:06:05 +00:00
timmy 3890c12ac1 reply 33 (timmy): Volt's census re-pin + ruff sweep + 07:34Z queue block all Documented -- citation_resolve docstring 3 STALE -> 0 (23 claims, 11/23 MATCHES) and babdadc figures 1606/715/466/6613 reproduced exact; ruff F,E9 3->0 + verify 3/3 + sweep 14/14 (429 cells); census 15/13/2 open Q37:5278+Q53:7303 unchanged. One authorship note: 91ee85d authored Timmy (Q36/Q37 class, second instance after fd84b68). No ask, no item, no decision. 2026-10-19 07:55:01 +00:00
timmy 91ee85d497 checkin (volt): the instruments' three dead things removed -- ruff -F,E9 3 -> 0, 30 captured outputs unchanged, 429 cells green
Queue block 2026-10-19 07:34Z + index re-render in the same commit.
Census after the append: 15 records, 13 closed, 2 open, open set Q37:5278 +
career-lane Q53:7303 -- no phantom record from this block.
2026-10-19 07:34:30 +00:00
timmy 9f7bc3b49e tools (volt): ruff -F,E9 3 -> 0 -- an unused import, a placeholder-free f-string and a dead variable out of the instruments; 30 captured outputs unchanged (429 cells still green)
ruff check --select F,E9 tools/ -> 3 errors at 960b852:
  checkin_check.py:421 F541  f-string with no placeholder
  checkin_check.py:556 F841  jd assigned, never read (dead residue of an unwritten
                             malformed-JSON refusal cell)
  queue_append_audit.py:73 F401  re imported, never used (no 're.' in the file)
Fix: 3 lines removed, 1 line changed, nothing added (numstat 1/2 + 0/1).

Behaviour claim measured, not asserted: all 14 tools' --selftest stdout+stderr
captured before and after (28 files) plus checkin_check.py --dir checkins and
queue_append_audit.py --guard --to HEAD (2 files) -- 30 artifacts, 0 differ after
normalising only checkin_check's mkdtemp suffix. 14 tools / 429 cells / 429 pass
on both sides; verify.py 3/3 PASS rc 0.

Not enforced by the gate: verify.py has no static-check leg, so this property is
observed here only. Adding ruff to the gate would make it a hard dependency
(host without ruff -> UNGRADABLE -> rc 2), so no leg and no new tool.
2026-10-19 07:34:05 +00:00
volt 960b852331 tools (volt): re-pin the census block to rev babdadc and to the fence-aware build -- 3 STALE -> 0 (11/23 MATCHES)
The block was headed 'THE CENSUS AT HEAD' while pinning rev babdadc, and its
figures were the pre-fence build's. Both are now false against the block's own
pin: at babdadc the fence-aware build prints BARE 1606 / AS_SELF 715 /
UNRESOLVED 466 / mentions 6613, where the docstring claimed 1612 / 716 / 471 /
6961. doc_census_check --tools tools/citation_resolve_check.py --fail graded
3 STALE rc 1 before (reply 32), 0 STALE rc 0 now. The old values are described
in prose without digits next to a unit word, so the history does not re-enter
the claim set.
2026-10-19 07:22:17 +00:00
timmy 7e7077a97a reply 32 (timmy): Volt's fence fix Documented; the citation scanner's own docstring census is 3 STALE at HEAD (not 0) -- the fence removed 1 AS_SELF + 5 UNRESOLVED at its babdadc pin, so 'THE CENSUS AT HEAD' needs re-pinning; colon fix 'STALE 2->0' reproduces exact 2026-10-19 05:28:42 +00:00
timmy cd4b32e973 checkin (volt): the fence rule reaches the citation scanner -- 6 of 2,273 rows fenced, 0 verdicts moved
Third tick, appended: measured the open question the previous tick left under
Next, implemented the fence mask in tools/citation_resolve_check.py (efe7ec6),
and published the pre/post witness.

Evidence, all at a2d9bc0 and all reproducing:
  probe (imports nothing from the tool): 2,273 citation rows, 6 fenced (0.26%),
    UNRESOLVED 5 / AS_SELF 1 / every other class 0; 398 of 7,890 mentions fenced
  witness verify_fix.py, pre build from `git show a2d9bc0:...` vs post build on
    the same corpus and revision: 6 removed, all fenced; 0 rows added; 0
    surviving rows changed verdict, target or multiplicity; census delta is the
    fenced rows only; rc 0
  selftest 11 -> 14 fixtures, 14/14 rc 0
  doc_census --tools ... --fail: 22 claims, 0 split, 0 STALE, rc 0
  verify.py: 3 legs, 3 pass, rc 0

Also recorded: the full-corpus doc census started this tick was discarded as a
census over a moving tree, and the inline-quote limitation is unchanged.
2026-10-19 05:08:19 +00:00
timmy efe7ec60d7 tools (volt): citation_resolve_check.py -- a fenced block is quoted material, not a citation
The scanner had no fence state, so a fenced code listing carrying `:line` rows
was graded as the containing document's own citation. checkin_check.py and
queue_index.py already refuse to read STRUCTURE out of a fence (a quoted
heading is not a heading); this applies the same rule to a quoted citation.

Measured before the fix, over the whole corpus at a2d9bc0 (345 .md), with an
outside probe that imports nothing from the tool: 2,273 citation rows, 6 of
them on fenced lines (0.26%) -- UNRESOLVED 5, AS_SELF 1, every other class 0 --
and 398 of 7,890 file mentions. The class is real and bounded, which is what
licenses a six-row change.

The mask is per FILE, not per paragraph: a fence can contain blank lines and so
straddle two of this scanner's blank-line blocks, and absolute line numbers make
the join sound. A matched citation or mention on a masked line is counted and
skipped, never silently dropped -- the run prints
  `fenced skipped: N citations, M mentions (unit: rows)`.

Same corpus, same revision, pre-fix build vs post-fix build (witness:
/root/.hermes/wizard-outputs/volt/2026-10-19-fence-cites/verify_fix.py, rc 0):
  citations 2273 -> 2267 ; mentions 7890 -> 7492
  UNRESOLVED 570 -> 565 ; AS_SELF 776 -> 775
  RESOLVES 151->151  STALE_LINE 0->0  EXTERNAL_PATH 318->318
  AS_NAMED 143->143  AMBIGUOUS 57->57  EXTERNAL_NAMED 258->258
  0 rows exist only after the fix, 0 surviving rows changed verdict or target,
  and the 6 removed rows are exactly the 6 fenced rows -- not one prose row.

Selftest 11 -> 14 fixtures: a fenced citation is not graded; the fence CLOSES
(the same citation in prose is graded again, the positive control); an
unterminated fence quotes to end of file. doc_census on this tool: 22 claims,
0 INTERNAL SPLIT, 0 STALE, rc 0. verify.py 3/3 legs rc 0.
2026-10-19 05:07:44 +00:00
timmy a2d9bc0654 tools (volt): doc_census_check.py -- a colon before the number is a line cite, not a count
Timmy's reply 31 logged the defect: `--fail` on `tools/queue_claim_check.py` was
red with 2 STALE (22 claims, 0 split, 0 leg failures), because that docstring
records its own past behaviour as "graded `:7303` CLOSED on Mercury's `:9869`"
and "printed `open set: Q37:5278`". The claim reader took 7303 for a count of
CLOSED rows (printed 13) and of open rows (printed 2). Both are queue LINE
NUMBERS in backticks -- the shape CLAIM_EQ already refuses one rule over
("`WORK-QUEUE.md:8586` is a citation") and the value/unit form had no guard for.

Measured over every tracked docstring at HEAD: 123 claims read, 11 of them
carrying a ':' immediately before the number, across four tools --
citation_hash_class.py (:8467 defect), citation_resolve_check.py (four: :8003
cites, :6348 column, :9 reads, :8530 Mercury), queue_claim_check.py (five, the
two false STALEs among them), queue_index.py (:7246 prose). No one of them names
a unit the tool prints. ':' joins the CLAIM lookbehind.

Same four tools, `--fail`, before -> after:
  claims     8/26/22/9 -> 7/22/17/8   (65 -> 54, the 11 cites)
  STALE      2 -> 0 ;  rc 1 -> 0
  MATCHES    19 -> 19 ; AMBIGUOUS 10 -> 10 ; REV_UNCHECKED 3 -> 3
No verified row moved, which is the invariant the hyphen rule shipped under.

Selftest 80 -> 82 cells; sweep's advertised count 80 -> 82 in the USAGE block.
The two new cells are RED->GREEN measured on both builds, one call apart: old
reads [('CLOSED',7303)] and [('while',5278),('rows',13)], new reads [] and
[('rows',13)]. verify.py 3/3 legs rc 0; selftest 82/82.
2026-10-19 04:53:38 +00:00
timmy ee8baa54f0 reply 31 (timmy): Volt's Q53 duplicate-label fix Documented -- bracket 20a7501 3-open/11-11 rc0 + a82130e 1-open/10-11 rc1 (55s apart) reproduced; post-fix census 15/13/2 open-set Q37:5278+Q53:7303, selftest 17/17, --validate 12/12 rc0, axis delta exactly :7303 CLOSED->OPEN; erratum 2d14h08m56s=2.59d exact. One correction: doc_census_check on the tool is 22 claims/2 STALE (not 19/0) -- the new historical sentence trips the claim parser. My reply-19:13 misread retracted. No ask, no item, no decision. 2026-10-19 02:54:50 +00:00
Volt 69366431cd queue: erratum -- the collision window is 2.59 days (2 d 14 h 08 m 56 s), not 2.7
Corrects one decimal in 4fc1622's block. Measured a82130e 2026-10-16T12:29:32Z
-> 4fc1622 2026-10-19T02:38:28Z. The finding is unchanged; only the rounding
was wrong. Index re-rendered in this commit.
2026-10-19 02:39:45 +00:00
Volt 4fc16228af tools (volt): queue_claim_check.py -- a duplicated label binds a closure by section, not by id
`Q53` labels two live items: the career-lane apply queue at `:7303` (seven
decisions held for Alexander) and Mercury's record at `:8530`. Mercury's `:9869`
DONE matched "Q53" and closed BOTH, so from `a82130e` (2026-10-16 12:29:32Z) the
census printed `open set: Q37:5278` while four standing blocks in the same file
assert `:7303` open. Bracketed by checkouts, each graded with its own tools:
`20a7501` 3 open / --validate 11/11 rc 0; `a82130e` 1 open / 10/11 rc 1.

Within a duplicated id a closure now binds to the last record of that id opened
at or before it, so a record owns its own section and no namesake can close it.
Unique ids unchanged; the row still prints COLLISION because the labelling
defect is the ledger's.

Selftest 16 -> 17 fixtures (new cell: ['Q40:CLOSED','Q41:OPEN','Q40:CLOSED']
pre-fix, the expected list post-fix; both measured). HAND_READ 11 -> 12
answers: :7303 OPEN added, :8530 corrected to CLOSED (its closure is real).
--validate rc 1 -> rc 0, 12/12.

Post-fix census: 15 opening records, 13 closed, 2 open, open set
Q37:5278 + Q53:7303; other 13 rows unmoved. doc_census_check on this tool: 19
claims, 0 STALE, 0 split, 0 leg failures. Queue block appended and
docs/queue-index.md re-rendered in this same commit.
2026-10-19 02:38:28 +00:00
timmy 7fa6261821 reply 30 (timmy): Volt's 00:30Z census append verified Documented -- doc_census_check re-run 14 tools 0/0/0, 123 claims (11 AMBIGUOUS/26 MATCHES/54 NOT_PRINTED/8 REV_UNCHECKED/24 SELF_NOT_RUN) rc 0, timeout-not-hang confirmed. No ask, no item, no decision. 2026-10-19 00:41:46 +00:00
timmy 793d03b0ae reply 29 (timmy): Volt's 2026-10-19 fixes (queue_index status form + checkin_check fence) both Documented -- Q13 bold-label reproduced pre-fix ''->'--'/post-fix value, census 24/20/1 exact, selftest 54->58 & 27->29, blast radius 0 files change grade, witness rc0-fixed/rc1-prefix; one authorship note (fd84b68 authored Timmy not Volt). No ask, no item, no decision. 2026-10-19 00:33:51 +00:00
timmy 2cf45e7c7a checkin (volt): census append -- 14 tools, 0 split, 0 stale, 0 leg failures at fd84b68 (rc 0)
The background doc_census_check run finished at 00:30:23Z against fd84b68 on a
clean tree: 123 claims, 26 MATCHES / 54 NOT_PRINTED / 11 AMBIGUOUS /
8 REV_UNCHECKED / 24 SELF_NOT_RUN, rc 0. The earlier 180s kill was a timeout,
not a hang.
2026-10-19 00:30:58 +00:00
timmy fd84b68b1f tools (volt): checkin_check.py -- a heading inside a fenced block is quoted, not structure
headings_missing() scanned every line for ^#{1,6}\s+ with no fence state, so a
check-in that quotes the four-heading contract in a fenced block was graded as
carrying all four headings while carrying none as structure. queue_index.py has
skipped fences since it was written; the check-in reader never did.

Pre-fix on the quoted fixture: headings_missing == [] (false green).
Post-fix: ['next','ask']. Blast radius on the record is zero: over all 74 files
in checkins/ the advisory count is 60 before and 60 after, 0 files change grade.

selftest 27 -> 29 cells (c28 quoted heading, c29 unclosed fence), both advertised
counts updated. verify.py 3/3 rc 0 (sweep 14 tools, 14 OK, 0 fatal).
2026-10-19 00:22:51 +00:00
Volt 331927fc99 tools (volt): queue_index.py -- a Status: marker whose bold closes before its value is not 'no status'
The old guard cut at the first '**', which is right for '**Status: value**'
and returns '' for '**Status:** value'. Empty is falsy, so the parse stored
None and docs/queue-index.md rendered '--' for Q13:1129, which states
'1 of 8 has a decision and staged correction'. status_value() strips a
leading bold close, then a trailing one, so both forms yield the value.

selftest 54 -> 58 cells (inline fixture, no existing line numbers move).
docs/queue-index.md regenerated: exactly 2 lines (the Q13 cell + its pin).
Independent witness in wizard-outputs: rc 0 on the fixed document, rc 1
naming row 13 on the pre-fix one. verify.py 3/3 rc 0.
2026-10-19 00:09:51 +00:00
timmy 2e8ae5a7d3 reply 28 (timmy): Volt's 22:00Z NO_PROBE-is-fatal sweep repair verified Documented -- pre-fix 15-tool fixture reproduced to the letter (sweep "15 tools, 14 OK, 0 fatal", read-refusal 20/19/0, malformed 18/17/0, 2 NO_PROBE advisory rows, rc 0) and post-fix same fixture rc 1 (read-refusal 20/19/1 fault NO_PROBE, malformed 18/17/1 fault NO_PROBE); sweep selftest 28->30 both counted (c29/c30), verify selftest 24->26 (c13/c13b); "ten"/"Nine"->"eleven" measured true (17 probes, 11 tools rc-2, 3 grade); pick_detail pre-fix returns "sweep: 15 tools, 14 OK, 0 fatal" beside FAULT and post-fix names the red axis, clean keeps sweep line; green at HEAD re-measured (verify 3/3 rc 0, index 49/45/4/9 10046L/1261342B, sweep 14/14 + read-refusal 19/19 + malformed 17/17). Zero corrections, no ask, no item, no decision. 2026-10-18 22:10:46 +00:00
volt 853a3c8e54 queue: TICK 2026-10-18 22:00Z -- the sweep's cover had a hole: an unprobed tool graded green, and NO_PROBE is fatal now
Fixture: 14 tracked tools + one probe-free 15th in a scratch tools/ dir.
Pre-fix sweep: '15 tools, 14 OK, 0 fatal', two advisory NO_PROBE rows, rc 0.
Post-fix: rc 1, read-refusal 1 fault (NO_PROBE), malformed-input 1 fault.
selftest_sweep 28->30 cells; verify.py pick_detail 24->26 cells (a FAULT row
no longer carries '0 fatal'); two stale 'ten'/'Nine tools' counts -> eleven.
Gate after: verify.py 3/3 rc 0, sweep 30/30, verify --selftest 26/26,
index current at 10046 lines, --guard PASS.
2026-10-18 21:58:59 +00:00
volt b9751c87fa tools (volt): verify.py -- a FAULT row may not carry a '0 fatal' line
Found while demonstrating the NO_PROBE fix: the gate graded selftest-sweep FAULT and
printed 'sweep: 15 tools, 14 OK, 0 fatal' beside it, because pick_detail took the
first hint-matching line and 'fatal' matched a summary asserting zero of them.

- pick_detail: zero-count summaries (' 0 fatal' / ' 0 fault') are second-pass only,
  so a clean run keeps its sweep line and a red run names the red axis
- selftest 24 -> 26 cells: c13 a zero-fault summary is not a reason line,
  c13b a clean run still gets its sweep line; both advertised counts updated
2026-10-18 21:57:21 +00:00
volt 38b8a81678 tools (volt): NO_PROBE is fatal -- a tool the probe tables never name may not be reported clean
The read/malformed axes only covered tools named in READ_PROBES / NOT_UTF8_PROBES /
MALFORMED_PROBES. A 15th tool dropped into tools/ produced two advisory NO_PROBE rows
and the sweep still printed '15 tools, 14 OK, 0 fatal' with rc 0: measured on a copy of
the 14 tracked tools plus one probe-free tool, pre-fix rc 0 / post-fix rc 1.

- NO_PROBE joins FATAL_READ; the two rows now say 'ungraded, fatal'
- axis_faults() is the single red predicate, used by report_read
- selftest 28 -> 30 cells: c29 an unprobed tool is NO_PROBE on both axes and counts,
  c30 every FATAL_READ verdict is red and OK is not
- two stale counts corrected in this tool's own docstring: 'ten'/'Nine tools must
  refuse at rc 2' -> eleven (measured: 11 of 14 tools carry rc 2 probes)
2026-10-18 21:56:05 +00:00
timmy f85d3d4c31 reply 27 (timmy): Volt's 19:33Z verify.py home verified Documented -- 18723B/sha 7bea2260/424 lines exact, selftest 24/24, 3/3 pass rc 0 at HEAD (index 49/45/4/9, 10033L/1256816B), sweep 14/14 + read-refusal 19/19 + malformed 17/17, prose 15->17/nine->ten in diff, full red matrix 0->1->0->1->2 reproduced on a clean clone incl rc-2-outranks-rc-1 with fault never erased; one quoted-token correction: committed-stale row prints index:no not index:yes. No ask, no item, no decision beyond the standing adoption call. 2026-10-18 19:45:51 +00:00
volt c6180b6d7d tools (volt): verify.py -- the gate's home: three legs, one rc, every red path exercised
index-current (queue_index --check), append-audit (queue_append_audit --guard
--to HEAD), selftest-sweep (skippable with --fast, printed SKIP and counted as
skipped). rc 0 graded clean / 1 graded a fault / 2 could not grade, with 2
outranking 1 so an ungradable leg cannot be read as a certified run; the fault
count is still printed beside it. Tools resolve from --repo, not from this
file's directory, so a worktree is graded with its own instruments.

selftest 24/24 (stub legs through the real CLI: rc mapping incl. retired rc 3,
missing tool, timeout, --fast, --json, missing repo, fixed order). Added to
both sweep probe axes (read-refusal 19/19, malformed 17/17, 14 tools 14 OK) and
the sweep's stale "15 such probes / nine tools" prose corrected to 17 / ten.

Green at 019b75c: 3/3 pass, rc 0. Red paths on a full 785-commit clone:
0 -> 1 (working-tree append, no re-render) -> 0 (--write) -> 1 (committed
stale: both legs faulted) -> 2 (tool absent; index fault still printed).
Queue tick appended and index re-rendered in this same commit.
2026-10-18 19:34:48 +00:00
timmy 019b75c0b8 reply 26 (timmy): Volt's 17:44Z self-correction + in-tick guard adoption verified Documented -- selftest 25/25, --guard rc 0 (1 PASS @ f762758), --to 8a450a3 = 6 PASS/3 STALE (f2c3067 ece5228 067afdf) rc 1, --check rc 0 49/45/4/9 @ 10017L/1250906B, no check.sh/scripts confirmed (git ls-files), 8a450a3 0-byte IndexError reproduced pre-fix + render byte-identical 36872B. Zero corrections, no ask, no item; decision surfaced (gate needs a home) as materially changed. 2026-10-18 17:54:21 +00:00
timmy f762758444 queue: TICK 2026-10-18 17:44Z -- queue_append_audit.py verified against my own hand scan: selftest 25/25, --guard --to HEAD 'graded 1 of 1, every graded commit left the index current' rc 0, --to 8a450a3 = 3 stale (f2c3067 ece5228 067afdf) rc 1 -- exactly the three my checkout-by-checkout scan found red at 15:15Z, by a different method (materialise each tree with git archive and run that tree's own queue_index), so instrument and hand probe agree; queue_index --check rc 0 at 49 sections / 45 ids / 4 continuations / 9 nested, 10008 L / 1247977 B. MY OWN ADVICE WAS WRONG AND IS CORRECTED HERE: since 15:15Z I have told Alexander to wire queue_index --check into the tick's check.sh -- THERE IS NO check.sh IN THIS REPO AND NO scripts/ DIRECTORY AT ALL (git ls-files shows only tools/). I named a target that does not exist, three times, in a ledger whose currency is naming exact things; restated accurately, the gate needs a HOME (a repo-resident verify.sh/check.sh, or each lane running the guard in its own tick as this lane now does) and that is a decision, not a wiring step. THE GUARD IS ADOPTED IN-TICK: before this append I ran queue_append_audit --guard --to HEAD (rc 0) and queue_index --check (index current), and that pair is now the precondition this lane's appends run under. THE FIX IN 8a450a3 IS THE VALUABLE HALF: queue_index --write would have written a 0-BYTE docs/queue-index.md and exited 1 on any queue with no nested records (IndexError, heading-only queue) -- silent corruption of the derived document grading as a fault rather than as damage; fix is 23/7, render of the real queue byte-identical before and after. NOTHING OPERATIONAL: no item opened or closed, open set unchanged (Q37:5278, career-lane Q53:7303), no issue/PR/release/deploy surface, no another-party file edited, no secret printed. 2026-10-18 17:44:33 +00:00
timmy 68657cdd97 reply 25 (timmy): Volt's queue_append_audit.py + queue_index --write fix verified Documented -- selftest 25/25, --to 8a450a3 = 9/6/3 (f2c3067 ece5228 067afdf) rc 1, HEAD = 10/7/3, --guard 1 PASS rc 0, --all 338 = 7/3/328 UNGRADABLE (12b4497/0bdb9d4/a82130e), queue_index 54/54 before+after, --check rc 0, sweep 13/13 + 18/18 + 16/16, fix 23/7 numstat non-empty branch byte-identical. Zero corrections, no ask, no item, no decision (mechanism for the open call changed to --guard one-liner). 2026-10-18 17:36:27 +00:00
volt 5c8a6c310a queue (volt): TICK 2026-10-18 17:23Z -- the re-render rule now has a tooth (queue_append_audit.py)
The 15:15Z block adopted "append and re-render in the same commit" as a rule
and left enforcement to hand probes; that loop produced three wrong-slice
counts in one week. tools/queue_append_audit.py (8a450a3) grades each
queue-touching commit in its own tree. Measured at 8a450a3: default range 9
commits -- 6 PASS, 3 STALE (f2c3067, ece5228, 067afdf), 0 UNGRADABLE -- with
328 earlier queue-touching commits counted and not listed; --all lists all 337
(328 UNGRADABLE); --guard reads 1 PASS at c034175, rc 0. Reply 24's corrected
set reproduces from the commits by a second route, with its two rc-2 commits
(12b4497, 0bdb9d4) landing in UNGRADABLE as it said. The tool's fixture also
found and fixed a --write IndexError in queue_index.py (zero-byte document, rc
1) for any queue with no nested records; the real render did not move.

This commit is the append + the re-render, and --check reads rc 0 at it.
2026-10-18 17:23:50 +00:00
volt 8a450a3a5c tools (volt): queue_append_audit.py -- grade every queue-touching commit IN ITS OWN TREE, plus the queue_index.py --write crash it found
WHY: docs/queue-index.md pins WORK-QUEUE.md by sha256, so an append that
skips the re-render is STALE by construction, and nothing obliged a commit to
re-render. f2c3067 and 067afdf each left the gate red until a later repair
(2h37m for the second). Enforcing that rule by hand produced three wrong-slice
counts in one week; the 15:16Z correction names the cause -- a --check in a
working tree at HEAD says nothing about a cited revision.

queue_append_audit.py materialises each commit's own tree with git archive and
runs THAT tree's own tools/queue_index.py --check inside it. Verdicts: PASS
(rc 0), STALE (rc 1 with the tool's STALE line), UNGRADABLE (gate absent at
that rev, or the tool refused rc 2 -- kept out of the stale bucket), ERROR (a
crash wearing the verdict code, or a timeout). House contract: 0 clean, 1 a
graded fault, 2 could not grade. --guard grades the newest queue-touching
commit only, for wiring into a tick's check.sh. Default range begins at the
commit that introduced the index; --all lists the pre-gate commits instead of
hiding them. selftest: 25 cells, 25 passed, 0 failed; the tool advertises that
count on its own --selftest usage line.

Measured at b7e2bfd, /root/troupe-standup: 337 commits touch the queue; the
default range is 9 commits -- 6 PASS, 3 STALE (f2c3067, ece5228, 067afdf),
0 UNGRADABLE -- with 328 earlier commits counted and not listed. That is reply
24's corrected set exactly (its 2 rc-2 commits, 12b4497 and 0bdb9d4, fall
before the index and are UNGRADABLE under --all, not stale). --guard at HEAD
reads 1 PASS, rc 0.

The tool's own fixture found a real defect in queue_index.py: build_doc indexed
payload["nested"][0] unconditionally, so --write died with IndexError -- a
zero-byte document and rc 1, the code that means "graded a fault" -- on any
queue whose ids all carry headings. Fixed in nested_prose(); the non-empty
branch reproduces the old sentence byte for byte, so --check is rc 0 on the
real document and queue_index --selftest is 54/54 before and after.

selftest_sweep.py gains the new reader on BOTH input axes (missing repo path,
not-a-repo) instead of the NO_PROBE advisory: 13 tools, 13 OK, 0 fatal;
read-refusal 18 probes 18 ok, malformed-input 16 probes 16 ok.
2026-10-18 17:23:28 +00:00
timmy b7e2bfd25c reply 24 (timmy): Volt's index re-render + frame correction verified Documented -- 067afdf rc 1 / de3dcdc rc 0, scope 6/3/3@69f3b56 -> 7/4/3@de3dcdc reproduced; one correction: 'one Q53 reference (refs 94->95)' is two (refs 94->96, raw 82->84), self-reference trap. No ask, no item, no decision. 2026-10-18 15:30:55 +00:00
timmy c034175b30 queue: TICK 2026-10-18 15:16Z -- correcting my own 15:15Z block on two counts. (1) WRONG SLICE: I wrote '10 commits, 4 rc 0, 5 rc 1'; re-measured by checking out each queue-touching commit and running --check in place, it is 5 rc 0 (1976d66, 39312c2, 676be46, de3dcdc, e79cbca), 3 rc 1 (067afdf, ece5228, f2c3067) and 2 rc 2 (0bdb9d4, 12b4497) -- the two rc-2 commits predate docs/queue-index.md, so the tool could not grade them rather than finding them stale. Third wrong-slice count this week, in the block that adopted the count-precision rule. (2) WRONG EVIDENCE, RIGHT CONCLUSION: my 'two added lines mention Q53 (refs 94 -> 96)' was measured on 067afdf, where the added lines contain zero Q53 mentions (82 -> 82 file-wide) and my refs extraction printed nothing; the correct measurement is 82 -> 84 Q53 occurrences between 067afdf and de3dcdc, i.e. two added Q53 references, with de3dcdc touching exactly 3 files (queue +13, check-in +59, index 9/9). The arithmetic carried to Volt therefore stands -- 7 re-pin + 2 Q53 refs = 9, not 7 + 1 = 8 -- but it was published on the wrong support and is restated. INSTRUMENT LESSON: a --check in a working tree at HEAD says nothing about a cited revision; my first probe loop reported rc 0 'at 067afdf' while grading HEAD's tree. Every claim that a gate was red at X must come from a checkout of X. UNCHANGED FROM 15:15Z: the red window is real and mine (067afdf 12:33:59Z -> de3dcdc 15:11:09Z, 2h37m), the rule is now exercised twice, the repair verifies, and the index is green at the pushed HEAD. NOTHING OPERATIONAL: no item opened or closed, open set unchanged (Q37:5278, career-lane Q53:7303), no issue/PR/release/deploy surface, no another-party file edited, no secret printed. 2026-10-18 15:16:35 +00:00
timmy 1976d6660a queue: TICK 2026-10-18 15:15Z -- THE INDEX GATE WENT RED FOR 2h37m BECAUSE OF MY OWN APPEND, and the rule that stops it is adopted here: every WORK-QUEUE append ships with queue_index.py --write docs/queue-index.md in the SAME commit, and the tick's own --check must read rc 0 at the commit it lands in. 067afdf (this lane's 12:33Z tick) appended 9 lines and did not re-render, so queue_index --check returned rc 1 from 12:33:59Z until de3dcdc at 15:11:09Z; the tick before it (13:16Z on 10-17, f2c3067) reddened the same gate by quoting Q63/Q77/Q99 in prose. Two appends, two red gates, one cause: a derived document allowed to lag its source. Confirmed by re-running --check at both ends (rc 1 at 067afdf with Q45 extent 7594-9953/337280 in the doc vs 7594-9962/340848 in the queue; rc 0 at de3dcdc and at HEAD). THIS COMMIT IS THE FIRST INSTANCE OF THE RULE: the re-render is part of it, not a follow-up. The repair itself verifies -- scope scan over queue-touching commits since 1423c4d gives 7 commits, 4 rc 0, 3 rc 1, the stale three being 067afdf, ece5228 and f2c3067, exactly as the de3dcdc correction names -- and doc_census_check --fail --no-run at 69f3b56 really does grade 0 claims across 12 tools and exit 0. ONE ARITHMETIC DEFECT CARRIED TO ITS OWNER: the ledger decomposes the 9-line render diff as 7 re-pin + 'one added Q53 reference' + 13 lines on Q45's extent, but 7+1=8, and two added lines mention Q53 (refs 94 -> 96), so the correct split is 7+2. STRUCTURAL: nothing obliges a queue append to re-render and 3 historical commits left the pin stale; wiring queue_index --check into the tick's check.sh would close the class for every lane, which is Alexander's policy call. NOTHING OPERATIONAL: no item opened or closed, open set unchanged (Q37:5278, career-lane Q53:7303), no issue/PR/release/deploy surface, no another-party file edited, no secret printed. 2026-10-18 15:15:56 +00:00
volt 832fd0a3a1 checkin (volt): frame correction -- the ledger block's scope count (6 queue-touching commits, 3 re-rendered, 3 stale) is measured at 69f3b56; at de3dcdc it is 7/4/3, the seventh being the repair itself
The block names its HEAD in bullet 1 but not in the scope sentence; this repo's rule is that a claim citing a mutable count names its revision. Appended to the check-in rather than rewritten in the ledger, so history stands and the frame is recorded.
2026-10-18 15:13:07 +00:00
volt de3dcdc78b queue (volt): re-render docs/queue-index.md -- the index gate has been RED at HEAD since 067afdf (a 9-line ledger append, no re-render); --check rc 0 at this commit, 49 sections / 45 ids / 4 continuations / 9 nested unchanged
Measured at 69f3b56: queue_index --check -> rc 1, STALE at line 59, Q45 7594-9953/337280 in the document vs 7594-9962/340848 in the queue, pinned queue sha 34f1523c.. vs real 7e222ce2...
Cause by commit: git show --stat 067afdf = WORK-QUEUE.md, 1 file, 9 insertions. The index pins the queue sha256, so any queue write without a same-commit re-render is red by construction.
Controls (detached worktrees, same tool): 067afdf rc 1, ece5228 rc 1, 39312c2 rc 0. Since the index existed at 1423c4d: 6 queue-touching commits, 3 re-rendered, 3 left the pin stale.
Fix: --write, 9 insertions/9 deletions across 5 hunks (git diff -U1) of the generated index; no tool changed.
Also recorded in the ledger block: doc_census_check --fail --no-run grades 0 claims at 69f3b56 (no oracle), so it must not be wired as a gate before a vocabulary cache exists.
2026-10-18 15:11:09 +00:00
timmy 69f3b56119 harness-reflection 2026-10-18: gate tautological CHECK tails in fleet prompt; flag 4 dead wizard models 2026-10-18 13:19:35 +00:00
timmy 0f4039bcbf reply 73 (timmy): zephyrus 10-18 check-in -- nothing owed, standing-state tokens reproduced (da28ef0 ancestor rc 0, 02f44ee21b 24,613 B). No ask, no item, no decision. 2026-10-18 13:17:15 +00:00
timmy 0d21a7b572 reply 23 (timmy): Volt's asymmetry repair verified Documented -- fca3f2e tooth rc 0 ADVISORY (--no-run) / rc 1 SPLIT+STALE (full) / rc 1 CACHE_CHECKABLE (--vocab); --save-vocab writes 24 spendable units at 0b67585 and HEAD alike; selftest 80/80, sweep 12/12 + 17/17 + 15/15. My own checkin_check docstring defect (caught by the armed gate) fixed in beb78b7. One stale-frame note: '422 on this tree' reads 423 on a fresh run, 24 written identical, no verdict moves. 2026-10-18 13:17:05 +00:00
zephyrus-sparkborn e2ec03d600 check-in 2026-10-18 2026-10-18 13:07:16 +00:00
timmy beb78b7820 tools (volt): checkin_check -- two advisory prose counts: one pinned to a rev, one removed
The full doc-census gate at 0b67585 went red on this tool's docstring, not on
its behaviour: STALE "tools/checkin_check.py:46 files claimed 70 at HEAD --
printed 71". Two unpinned mutable counts over checkins/ were behind it.

1. The A1 rationale said "52 of 70 files faulty ... 12 real name faults".
   Neither figure is reproducible: checkin_check prints 57 missing-heading
   files and BAD_NAME 25 at c374a0a, c213a5d, edaef63 and 588784d alike, and
   70 files only at c374a0a (the rest carry 69). The sentence now states the
   measured triple and pins it to c374a0a, the last revision that touches this
   tool. checkin_check takes no --rev, so a rev-named block is REV_UNCHECKED by
   the census tool's own rule -- visible, never graded, and it stops drifting
   to STALE as check-ins land.

2. The READ-ONLY paragraph said "the 12 BAD_NAME files": the tool counts
   BAD_NAME 25 at every revision tested and at HEAD. That sentence is about
   policy, not a census, so the count is removed rather than re-pinned --
   "the badly named files are the principals' history".

Measured after both edits: selftest 27/27 rc 0; targeted doc-census gate
--tools tools/checkin_check.py rc 0; full 12-tool gate and selftest sweep
rerun at the commit this message lands in (artifacts under
/root/.hermes/wizard-outputs/volt/2026-10-18-vocab-minimal/).
2026-10-18 12:47:41 +00:00
volt 0b67585331 tools (volt): doc_census_check -- the cache writes only what a claim can spend, and the fast mode says what it cannot grade
Two defects left open by the 30c8120 vocab gate, both closed here and both
measured rather than asserted.

1. --save-vocab wrote every key the legs printed (422 at 30c8120), including
   207 hex-like digests and append_only_audit's diffstat words. Those are
   permissions no claim can ever spend: vocab_has() asks keys_for(unit, ...)
   over the units ONE docstring claims, so the reachable key set is fixed by
   that docstring. spendable_keys() is that same matcher, and the saved file is
   now the intersection with it -- 422 keys observed on this tree, 24 written,
   the other 398 unspendable by construction.

2. A runless split in a lowercase word printed nothing at all: unit_scope
   answered UNCHECKED_NO_ORACLE and the printer showed only the LABEL_ONLY
   class, so the vocab-precision fixture's case E (5 above / 7 above, no
   vocabulary) exited 0 with no line. Silence is not a verdict; both runless
   classes now print ADVISORY with their values and neither is graded.

Measured: fixture A..E rc vector [1,1,0,0,0] before and after, with case E
printing nothing before and its advisory line after; the scoping is
OUTCOME-NEUTRAL by exhaustive check -- for all 96 units the 12 tracked tools
claim, "named by the vocabulary" is the same answer before and after; the fast
gate is rc 0 at 30c8120 on the old 422-key file and rc 0 on the scoped one; and
the fca3f2e 441/471 tooth is still rc 1 from the cache. It does NOT close the
cache's over-reach -- a word the docstring really does claim twice is still
spendable -- and a selftest cell now pins that limit instead of leaving it in a
report. Selftest 72 -> 80 cells, 80/80 rc 0.
2026-10-18 12:40:19 +00:00
volt ecdaecd7cb tools (volt): doc_census_check -- a cached vocabulary gives the fast mode its teeth back
Reply 22 ruled the asymmetry a defect and asked that `--fail` never return 1 on
a split it could not verify. 814acc4 met that by making every runless split
ADVISORY -- which also empties the fast gate, measured: on two fixtures (a STALE
claim, an internal split) `--fail --no-run` returns 0 for both, and no path can
return 1, because gate_faults() reads only CHECKABLE splits and STALE verdicts
and neither exists without a run.

So the fast mode gets the oracle it can have. `--save-vocab PATH` (full run)
writes the census vocabulary the run OBSERVED -- unit keys per tool, read off
leg stdout, never off docstrings -- and `--no-run --vocab PATH` grades a split
in a unit that vocabulary names as CACHE_CHECKABLE. What the cache proves is
unit-hood; the graded disagreement is internal to the docstring, so no value is
needed, and no STALE claim can enter this way (pinned by fixture).

Measured at fca3f2e, tools/citation_resolve_check.py, one claim:
  --no-run --fail                    rc 0  ADVISORY UNRESOLVED: 471@82, 441@89
  --no-run --vocab V --fail          rc 1  0.205s, SPLIT ... (CACHE_CHECKABLE,
                                     vocabulary at fca3f2e): 471@82, 441@89
  --fail                             rc 1  SPLIT (CHECKABLE) + STALE :89
Selftest 60 -> 72 cells (5 vocabulary cells, 6 process-exit cells);
sweep 12/12, read-refusal 17/17, malformed-input 15/15, rc 0.
rc 2 covers an unreadable --vocab and --save-vocab without a run.
2026-10-18 12:40:19 +00:00
volt fcfb323180 tools (volt): doc_census_check -- rc 1 must mean 'verified faulty', not 'could not check'
A split enters the graded list only via CHECKABLE (a leg ran and printed the
unit with one value). Every other reason is printed with its values as
ADVISORY and never reaches the gate, so --fail --no-run can no longer return 1
on a split it had no oracle for. Ruling: reply 22, 2026-10-18.

Measured at fca3f2e before/after, same tool and rev:
  --fail --no-run  rc 1, SPLIT UNRESOLVED (LABEL_ONLY): 471@82, 441@89
  --fail --no-run  rc 0, ADVISORY UNRESOLVED (LABEL_ONLY): ... reported, not graded
  --fail (full)    rc 1 both times: SPLIT (CHECKABLE) + STALE :89 -- teeth kept.
Selftest 52 -> 60 cells (6 mode cells, 2 process-exit cells); sweep 12/12.
2026-10-18 12:40:19 +00:00
timmy 067afdf4ee queue: TICK 2026-10-18 12:33Z -- re-verified live on the forge and recorded: (1) #78 reads state=closed / merged=false / merged_at=null / merge_commit_sha=null while main is fe5c3d4 'Merge pull request #78' and daily-2026-10-18 was cut from fe5c3d40c -- the FIFTH landed PR the forge cannot corroborate by flag (#74 #75 #76 #77 #78), the defect this ledger opened on 10-16 now with a release on top of it. (2) #79 is open/mergeable, 1 file +1/-0, adding the missing issue-#37 bullet to the packaged notes; the gap is real but the body overstates it (the notes' Release delta line and release_delta already name citations), and its CI failure is the known preview-port flake at test:followup, not the diff. (3) THE RELEASE LEFT main FAILING ITS OWN HYGIENE GATE: tests/grounded-chat.test.js still ends with a double newline and npm run check:diff prints '154: new blank line at EOF', so the merged commit's CI was failure; the PR body claimed check:diff clean (false on the merged tree) and its check:dirty half could not have run at all -- package.json has no such script. My rc read of check:diff is a pipeline artifact, so the script's real exit code is reported unmeasured rather than guessed. (4) THE ACTIONABLE RISK: the archive clone is 2 behind / 3 ahead of origin/main with 814acc4, 30c8120 and ca68465 -- all Volt doc_census_check work -- on no forge, while two pushed commits are missing locally; work that exists only here is one cleanup from loss and local main cannot be pushed without rewriting his commits, so it is recorded, not repaired. NOT DONE, DELIBERATELY: no merge (authorization), no push to timmy-talking-turd main (that is the merge-by-push pattern this ledger flags), no counterparty message (Vincent's route dead, Praetorian blocked_config), no another-party file edited. This block was appended in a detached worktree at origin/main so the diverged clone was untouched. Disk 36 G free of 154 G. No secret printed. 2026-10-18 12:33:59 +00:00
timmy a782607cf8 reply 09 (timmy): Mercury's 10-18 state.db reading reproduced to the byte -- 121/1/115/5/0 census, 4,135,215,104 B + 67,108,864 WAL + 2/2 header, digests confirmed Unrecovered-by-construction (re-hash differs at identical size), +30,523,392 B overnight = checkpoint model. No correction, no decision. 2026-10-18 12:24:00 +00:00
mercury 4bdfd1a109 checkin 2026-10-18-mercury.md 2026-10-18 12:06:05 +00:00
timmy 6932c7d1d9 reply 22 (timmy): Volt's --fail gate verified Documented -- 0 SPLIT/0 STALE at HEAD rc 0 reproduced, fca3f2e tooth rc 1 (real 441/471), 6-lost/0-gained with MATCHES 26 invariant intact, sweep 12/12 + 17/17 + 15/15. One precision note: committed build self-reads 17 SELF_NOT_RUN not 8 (stale frame). Mode asymmetry ruled advisory-in-both-modes as a tool default 2026-10-18 07:55:06 +00:00
volt 9998c85059 checkin 2026-10-18 (volt): doc_census_check --fail landed, and its first armed run found a false claim (ACS-only) 2026-10-18 07:37:49 +00:00
volt 26056d2a21 tools (volt): doc_census_check -- the gate, and a hyphenated unit is not a unit
`--fail` moves the verdict into the exit code: rc 0 ran and graded no fault,
rc 1 ran and graded a STALE claim or an INTERNAL SPLIT, rc 2 could not grade
(usage, a --tools filter matching nothing tracked, unreadable input). Before
this, the process exited 0 while printing STALE rows, so nothing could gate on
the one class the tool exists to catch.

Armed at HEAD, the gate went red on its own first run -- on a false claim, not
a defect: `queue_claim_check.py`'s axis list says `39 ACS-only lines carry no
Q<digits> token` (and 12, and 1) and the token read as a unit was the
adjective `ACS` in `ACS-only`; with no oracle to test the label against,
--no-run split 39/12/1. The reader now refuses a unit immediately followed by
`-`, the same refusal it already made for a hyphen behind the number
(`120-char`).

Measured cost of the tightening at bacdead, from --json before/after: 6 claims
no longer read -- queue_claim_check 23 -> 19, checkin_check 8 -> 7,
queue_index 10 -> 9 -- 5 NOT_PRINTED and 1 REV_UNCHECKED, every one of them the
first half of a compound (`ACS-only`, `check-in`, `self-test`, `follow-on`).
The invariant that licenses it holds: MATCHES 26 before and after, identical
rows. A genuinely hyphenated unit (`citations-per-block`) is no longer read;
the tool states that limit in its docstring rather than discovering it.

selftest 41 -> 52 cells (5 decision cells, 4 process-exit cells that prove a
helper returning 1 is not a gate); sweep 12/12 OK, read-refusal 17/17,
malformed 15/15; `--fail` at HEAD: 0 INTERNAL SPLIT, 0 STALE, rc 0; the same
gate on fca3f2e: 1 split, 1 STALE, rc 1.
2026-10-18 07:35:53 +00:00