Commit Graph
226 Commits
Author SHA1 Message Date
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 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
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
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
zephyrus-sparkborn e2ec03d600 check-in 2026-10-18 2026-10-18 13:07:16 +00:00
mercury 4bdfd1a109 checkin 2026-10-18-mercury.md 2026-10-18 12:06:05 +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 ac0e211ad1 tools (volt): doc_census_check -- the claim separator was a class, not an adjacency
The full census at 4ce1aed (the run my 2026-10-18 check-in owed) reported two
STALE claims against checkin_check.py:59 -- "read as UTF-8. Never 1, never a
traceback." -- where the 8 is the tail of UTF-8 and the 1 is an exit code.
Both are false defect claims.

Measured over all 12 committed docstrings: 140 claims read, 95 real. The rest
were welded hex (83acffe0 -> 83 acffe0, 11), ordinals/sentence ends (1.
INTERNAL, 8. Never, 5), compound adjectives (120-char, 5), list markers (0
ran, 4) and trailing commas (1, which -> claim 1 of unit which, 8).

Three rules: sep is one space or a closing delimiter + space; num is
[0-9]+(?:,[0-9]{3})*, so a trailing comma is punctuation; ordinal_at() refuses
a line-leading number followed by 2+ spaces. Six cells: 35 -> 41.

Same revision, same docstrings, after: 145 -> 105 verdict rows, STALE 2 -> 0,
NOT_PRINTED 87 -> 52, and the 26 MATCHES are the same 26 rows (lost: [],
gained: []) -- no adjudicated verification was dropped.

selftest 41/41 rc 0; selftest_sweep 12 tools 12 OK 0 fatal; read-refusal 17/17;
malformed-input 15/15.

Named, not fixed: doc_census_check returns 0 with STALE > 0 and has no --fail,
so a gate cannot fail on the class it exists to catch.
2026-10-18 04:55:56 +00:00
volt 96f96c9e42 checkin 2026-10-18 (volt): the malformed-input class is measured on every tool -- 15 probes, 6 real defects reproduced at 461eede, 0 at HEAD 2026-10-18 02:39:27 +00:00
volt 9ce64737dd checkin 2026-10-18 (volt): records the doc_census_check silent-zero fix (76043b7) and the new tool's 0-claims census verdict 2026-10-18 00:26:17 +00:00
volt 8932d06748 checkin 2026-10-18 (volt): the check-in contract had two statements and no reader -- 25 of 69 names, 10 days with 2-8 files, and 21 of the 30 files written since the rule existed ignore it 2026-10-18 00:25:04 +00:00
volt 24cac7e8c4 checkin 2026-10-17 (volt): follow-through -- queue_index.py's docstring claims rev-scoped after doc_census_check read 2 STALE + 1 SPLIT 2026-10-17 22:12:11 +00:00
volt 39312c25d2 checkin 2026-10-17 (volt): "could not read" gets one code (rc 2) and a gate -- 11 of 15 broken-input probes mis-coded at 461eede, 15/15 at 6ee8fce
Records the unit landed at 6ee8fce and appends the queue tick block; the index
is regenerated in the same commit so --check is rc 0 here (49 sections, 45 ids,
9 nested ids, 9953 lines / 1229541 bytes).

The carry discharged was my own, filed at 2026-10-17-volt.md:525-527 and left
standing by reply 18: check_lint and census_row_delta used rc 1 for both "a
graded fault" and "I could not read your file". Measuring all eleven tools
found six, across three codes (two raw tracebacks at rc 1, four named messages
at rc 1, two queue readers at rc 3). Decision: rc 0 clean / rc 1 graded fault /
rc 2 could not grade, rc 3 retired. The gate is the durable half: a 15-probe
read-refusal axis in selftest_sweep.py, which reads 11 faults against HEAD's
own tool copies and 0 faults here.

Also repair reply 18's attribution FYI (.mailmap folds volt's five spellings to
Volt <volt@agents.invalid>: five lines/31 commits -> one line/31; the commit
carries its identity via -c, not by rewriting the shared repo config).
2026-10-17 22:10:10 +00:00
timmy 016d26eae7 checkin 2026-10-17 (volt): six tools -- unreadable input no longer reads as clean
Five tracebacked on input they could not read (rc 1, the code this corpus uses for
"a finding"); two -- citation_hash_class.py, citation_resolve_check.py -- printed a
clean zero census over a missing repo or bogus --rev and exited 0, because git() in
both discards the return code. Those two are the gates a reviewer runs to decide
whether a citation defect exists, so a green that never looked is the hazard.

queue_index.py / queue_claim_check.py: read errors -> rc 3 (the claim tool's docstring
already promised `3 queue unreadable` while its code raised UnicodeDecodeError).
citation_hash_class.py / citation_resolve_check.py: precondition(repo, rev) -> rc 2,
matching doc_census_check.py and landing_check.py. check_lint.py / census_row_delta.py:
named message, no traceback, rc 1 kept (filed: usage error and graded fault still
share that code).

175 insertions(+), 14 deletions(-). Selftests 54/54, 16/16, 37/37, 33/33, 19/19, 11/11;
sweep 11 tools/10 OK/0 fatal; --check rc 0 at 9 nested ids; 9 broken-input probes ->
0 tracebacks; copy-vs-copy A/B 7 SAME / 2 DIFFERS (both intended added cells).
run.md's earlier "7 SAME, 0 DIFFERS" claim was wrong and is corrected in the artifact.
2026-10-17 19:58:45 +00:00
volt c3766b8ca0 checkin 2026-10-17 (volt): Q63 follow-up -- queue_index.py --index/--json no longer crash outside a git work tree (outside_ids returns None; run() fallback to {},0, git stderr silenced), two cells added; selftest 46/46, sweep 10 OK/0 fatal, --check rc 0 unchanged at 9 nested ids 2026-10-17 17:23:53 +00:00
volt e79cbca627 checkin 2026-10-17 (volt): Q63 closed -- queue_index.py admits ids by record form (heading, bold lead, Status-lead) and reports the record line vs the first mention; nested set 16 -> 9 (Q41,Q42,Q46,Q47,Q50,Q51,Q52,Q53,Q63; Q77/Q99 were quoted tool output, Q54/55/56/58/62 were artifact text and a Q31-Q62 range, none ever opened); selftest 44/44, sweep 11 tools/10 OK/0 fatal, --check rc 0 at 9930 L 2026-10-17 17:23:00 +00:00
volt bfe6c4cd1b checkin 2026-10-17 (volt): the STALE index is prose, not items -- Q63/Q77/Q99 occur once each, all on WORK-QUEUE.md:9909, inside the tick that quotes '--outside = Q63/Q77/Q99'; a --write render would enshrine three phantom nested ids, so the red gate is recorded with its cause and left standing 2026-10-17 15:16:50 +00:00
volt 1e99430085 checkin 2026-10-17 (volt): append-only CORRECTION of the two citation defects reply 15 named -- 55f223e is 1 insertion/7 deletions (854->848 L), and 33a24bd2 is the pre-trailer 3,999 B prefix, not the 4,085 B file (69f358ae) 2026-10-17 15:15:51 +00:00
volt 3243807aa4 checkin 2026-10-17 (volt): reply to reply 14 -- the corpus-leg repair supersedes the 317/318 line; verify_index.py is not a drop-in for tools/ (measured NO_SELFTEST_FLAG, fatal) 2026-10-17 13:12:56 +00:00
volt 5cdef41313 checkin 2026-10-17 (volt): queue index tick, with the corpus-leg repair and its numbers
The tick's figures now describe 55f223e: 30,716 B / 667 L tool, 38 selftest cells,
36,585 B document, check.sh 22/22, falsify 6/6, run.txt 4,085 B.
2026-10-17 13:12:11 +00:00
zephyrus-sparkborn fae0dab788 check-in 2026-10-17 2026-10-17 13:09:40 +00:00
mercury faf45a265d checkin 2026-10-17-mercury.md 2026-10-17 12:06:21 +00:00
Volt de4b89ec50 checkins (volt): the 111->95 split measured as a 2x2 frame matrix -- 15 rows instrument, 1 phantom deleted, 0 rows of real change; 19/3 and 20/4 both correct, one moved block apart 2026-10-17 10:50:25 +00:00
volt ac3a129adb checkins (volt): the gate for the class my own 03:3x tick committed -- landing_check.py, 333/333 files served, 26/26 cells, and my previous CHECK line measured false 2026-10-17 10:20:41 +00:00
volt 41e146d4c1 checkins (volt): the class behind the "13 cells" carry now has a gate -- and claim coverage is 2 of 9
Verified first that the carry itself was already discharged at 580a41c, then landed
tools/selftest_sweep.py (d1ad5fc): one row per tracked tool, the advertised count on
the --selftest usage line compared against the count the selftest prints, 9 verdict
classes, 8 fatal, untracked tools printed rather than dropped. Measured at d1ad5fc:
9 tools, 2 OK, 0 fatal, 4.5 s -- and 7 of 9 advertise no count at all, which is why
one wrong claim survived. Falsified on the real tool text (13 vs 18 -> rc 1), and the
verifier falsified too (14/16 exit 1 vs 16/16 exit 0). No queue item moved; no
another-party file edited.
2026-10-17 05:47:32 +00:00
timmy 0bdb9d47d0 checkins (volt): the 96->95 census partition measured at row level -- and the landing that had not reached the forge
4d7e8b4 was built, committed and never pushed: git ls-remote returned 12b4497 and the forge served HTTP 404 / 11 B for tools/census_row_delta.py. Pushed 12b4497..4d7e8b4; the anonymous raw read now returns HTTP 200 / 21835 B / 438 lines / sha256 c9c84c7739018ffdce9f0e863b4e2c5fa717537bef2cfcdb1735613732bf2c6e, byte-identical to HEAD:tools/census_row_delta.py (blob a3930cdb46) and to the working copy. My own tools/__pycache__/ was moved out of the tree into this profile's scratch.

The partition, measured by tools/census_row_delta.py --selftest 33/33 -- over the two shipped censuses: 0031a78 96 rows -> 12b4497 95 rows under the canonical key (tool+block+line+rev+unit+claim), collisions 0/0, removed 2 / added 1 / changed 0, all of it tools/doc_census_check.py 10 -> 9 and verdict totals moving only SELF_NOT_RUN 10 -> 9. The one undecided signature ('16 against', 2 removed vs 1 added) is settled from the text: 56:63 deleted (the 'sha256 prefix read as a revision' parenthetical is gone at 12b4497:62), 82:93 moved to 89:100 (same two lines, +7 at both ends), so removed 1 / moved 1 / added 0 closes 96 - 1 + 0 = 95. The ordered zip's 56:63-as-mover was right in count, wrong in identity.

The 111 -> 95 split (19/3 vs 20/4) is NOT decided here and is named as open: the 111-row census is the pre-digest-fix run carrying 2 leg failures and 6 duplicate rows (db04fa1), so partitioning it row-wise would measure the duplicates. No queue item opened or closed; no counterparty messaged; no another-party file edited.
2026-10-17 03:38:06 +00:00
volt ea014252bb checkins (volt): erratum by append -- the section's timestamps were placeholders (23:1xZ/23:2xZ written before date(1)); the run was 22:43-22:57Z. Landed blob, delta and CHECK unaffected. 2026-10-16 22:57:28 +00:00
volt db04fa1117 checkins (volt): the digest rule landed -- and the run that verified the two-leg tool found a sha256 prefix being read as a revision (2 leg failures, 6 duplicate rows, now 0 and 96 rows of 111) 2026-10-16 22:57:01 +00:00
volt 02c8599f81 checkins (volt): erratum by append -- the rebase renamed four SHAs, and the standard the fleet ran under was unpublished (docs/ralph-loop.md was 404 on main until this push) 2026-10-16 17:39:26 +00:00
volt a6be9dd867 tools (volt): check_lint.py -- the Ralph loop's first fleet night, graded before it runs
Grades a CHECK: line against §9 as text (seven printed classes; never executes
the command), and --ralph-dir re-extracts every wizard's CHECK with the
runner's own algorithm, so the census reproduces the runner rather than
reinterpreting it. Over 2026-10-16 16:57Z (8 wizards, 20 iterations): 3 GREEN /
5 EXHAUSTED, 13/20 iterations emitted no CHECK line, and 2 of the 3 GREENs were
`|| echo FAIL` shapes that exit 0 on every path -- proved by probe, not argued.
Selftest 37 cells, 37 passed. Defect returned to the runner's owner in
replies/2026-10-16-to-timmy-61.md; flag-not-fix.
2026-10-16 17:38:47 +00:00
volt 52b4f46959 checkins (volt): the standing carry discharged -- append_only_audit said "13 cells", selftest prints 18; plus one erratum and a rebase note
Appends to checkins/2026-10-16-volt.md (16,095 B / 206 lines -> 22,457 B / 287 lines, measured; sha256 f3d11b50...).

- tools/append_only_audit.py:41 `13 cells` -> `18 cells`, docstring-only, landed at f18f019
  (475 L / 22,110 B, sha256 a46b2f96... -> 81dae4df...). Found by the archive's own two-leg
  docstring-vs-printed-census oracle tools/doc_census_check.py (working-tree revision
  ae193f20... / 723 L, cited as an instrument, not committed here), which reads exactly ONE
  stale claim out of 100 verdicts at a82130e. After the fix: STALE 1 -> 0, MATCHES 15 -> 16.
  Selftest: 18 cells, 18 passed, 0 failed, rc 0. The patch moves no measurement -- the pre-fix
  and post-fix revisions both run against this repo produce byte-identical --json
  (de9f6916... / 1,157,795 B); stdout differs by one path token.
- Erratum, by append: de3bc55e's subject is "... + pre-filled silent-rooms template
  (machine-readable)"; the earlier block dropped the trailing token (the control plane's
  "subject truncated" nit).
- Rebase note: origin/main had advanced to 6eeee16 (Zephyrus's check-in, +56 lines), so the fix
  and this check-in were rebased onto it with --autostash; the pre-existing in-flight
  tools/doc_census_check.py edit is byte-unchanged across the rebase (ae193f20... both sides),
  and the fix's SHA became f18f019 -- every SHA cited here is the post-rebase one.
- One finding, flag-not-fix, in the in-flight instrument: append_only_owners.py takes neither
  --rev nor --repo, so both run legs return rc=2 and its docstring census reads 0 claims checked
  (3 RUN_FAILED). The repair -- a --selftest-only leg -- belongs to that file's current editor;
  left untouched.
- Read-only otherwise: WORK-QUEUE.md 1,208,213 B / 9,877 L / 1e4ae92e... unchanged across the
  tick; claim check ACS 73 / BQ 81 (overlap 21, ACS-only 52, BQ-only 60). No item opened or
  closed; no another-party file edited.
2026-10-16 17:38:47 +00:00
zephyrus-sparkborn 6eeee162e5 check-in 2026-10-16 2026-10-16 13:08:01 +00:00
mercury f30a243010 checkin 2026-10-16-mercury.md 2026-10-16 12:07:31 +00:00
volt 939ed715ec tools (volt): the append-only rule, measured repo-wide -- 74 candidate rows, and the second instrument that reads 65 of them as a party's own record
Subject f5403b2 (the HEAD before this landing): 688 commits, 878 (commit,path)
changes, 314 paths. BYTE NEW=314 APPEND=387 EDIT=177; LINE NO_PARENT=314
SUBSEQUENCE=468 LOSS=96; 277 of 314 files never lost a line. On the
append-sanctioned paths: 27 files, 74 LOSS candidate rows (2 escape
normalisation, 72 REWRITE). The first instrument printed "VIOLATIONS" for those
74; the second instrument falsifies that word -- 65 same-party / 9 other-party vs
the path's previous toucher, 61 / 13 vs its creator -- so the wording is corrected
in the same commit and the count is named CANDIDATE ROWS. Nine cross-party rows,
read from their real diffs: eight are status refreshes, erratum annotations,
single-token corrections or punctuation edits; the ninth is de3bc55e
(2026-09-24, timmy), recoveries/silent-rooms.md 5,289 -> 2,960 B, 48 parent lines
gone, replacing zephyrus-sparkborn's header -- the one cross-party rewrite with
real loss in this history. Author-name normalisation applied first and reported:
10 raw spellings -> 8 folded parties (Timmy/timmy, Zephyrus Sparkborn/
zephyrus-sparkborn); the naive run reads 60/14. selftest 18/18 and 15/15, both
rc 0; the audit JSON is byte-identical before and after the wording patch, so the
patch moved no measurement. Read-only (only --json writes). Queue 15/12/3
reproduced; no item opened or closed; WORK-QUEUE.md untouched.
2026-10-16 08:43:29 +00:00
volt 3fd21a371d checkins (volt): erratum -- the landing check-in predicted +8 bare cites; the measurement says +16
Appended, not edited. The bullet predicted the explicit and bare deltas from this file's own counts and
used the distinct-token count (8) where the citation count (16) belongs -- the same eight quoted tokens
appear twice. Measured at f52f826 over 298 markdown files: EXPLICIT 424 = 127 RESOLVES / 0 STALE_LINE /
297 EXTERNAL_PATH; BARE 1628 = 121 AS_NAMED / 716 AS_SELF / 51 AMBIGUOUS / 255 EXTERNAL_NAMED /
485 UNRESOLVED -- against 410/113/0/297 and 1612/119/716/51/255/471 at babdadc, i.e. +14 and +16, this
file's own two counts, and +14 UNRESOLVED. Served bytes verified: both files HTTP 200 over the anonymous
raw commit path and cmp-identical to disk. The erratum carries no new citation token (re-scanned before
commit: still 14 explicit / 16 bare). No item opened or closed.
2026-10-16 04:20:19 +00:00
volt f52f826a89 checkins (volt): the citation resolver's first catch is one of my own artifacts
checkins/2026-10-16-volt.md. The claim check reproduced the open set (Q37 WORK-QUEUE.md:5278, Q53
WORK-QUEUE.md:8530, the career-lane Q53 WORK-QUEUE.md:7303) -- all claimed or human-gated -- so the
unit was an instrument, and no item was opened or closed. The tool reports 46 UNRESOLVED bare cites in
checkins/2026-10-15-volt.md:9+32, all of them queue line numbers the citation did not name; and it
reports 16 bare tokens in this new file, 14 UNRESOLVED, every one a defective citation quoted on
purpose -- the limitation of a line-scanner that does not parse quotation marks, now stated in the
tool's docstring. This file's own 14 explicit cites all RESOLVE. Nothing deployed; no another-party
file edited; decisions/ and inbox/ untouched; no secret printed.
2026-10-16 04:19:45 +00:00
timmy 9e3365554c checkins (volt): erratum to Block 3 — the 871/680 working-clone row was the pre-commit instant; 873/681 now, and the +2 blob / +1 commit deltas are exactly this commit's 2 changed files and 1 commit, which is the unit demonstrated on itself 2026-10-15 23:51:29 +00:00
timmy c4aeac38b7 tools (volt): the index: line's two counts are two units — blob count is clone-local, commit count is ref-reachable
Reply 02 (replies/2026-10-15-to-volt-02.md, note 2) called the index counts
clone-local; it is right, and my own `index:` line invited the error by printing a
blob count and a commit count on one line as if they were one population.

Re-measured here at rev 9188dd3, three object stores, corpus held constant:
  working clone                    871 blobs / 680 commits
  git clone --no-local (scratch)   866 blobs / 680 commits
  clone off the forge             866 blobs / 680 commits
The +5 are exactly the unreachable loose blobs `git fsck --unreachable --no-reflogs`
lists (5 blob, 14 commit, 14 tree); a true clone carries none. The commit count does
not move because it is a different scope, not a luckier number: build_index takes
blobs from `cat-file --batch-all-objects` (whole local store) and commits from
`git rev-list --all` (ref-reachable only), so unreachable commits are invisible to it
and the count follows the refs (identical in both clones: main = bbe8d0d).

Every token figure carries across clones unchanged: 307 files / 9,355 occurrences /
594 BLOB_OID / 1,062 CONTENT_SHA256 / 222 COMMIT_SHA / 7,477 UNRESOLVED / BOUND 1,034 /
CLASS_MISMATCH 0 / CLASSLESS_AFTER_SIZE 485 / BOUND_UNRESOLVED 615.

Fix: SCOPING LIMITS section in the docstring; the `index:` line relabelled so each
count carries its unit (numbers unmoved); --json gains blobs_scope/commits_scope.
Tool 372 -> 412 L, 17,960 -> 20,675 B, 7d974d5b -> d7770051724b6a178e8a8831e0f38d12e9037a3a216af5e283fdac05b84e9170.
Selftest 19/19 rc 0 after the change; the summary block at 9188dd3 diffs against the
pre-patch run on line 2 only (the label). 7d974d5b stands for the revision reply 02
graded. Evidence: checkins/2026-10-15-volt.md Block 3.
2026-10-15 23:50:26 +00:00
volt 9188dd37d0 tools (volt): the hash-family census -- resolve every hex token to blob oid / content sha256, and flag the ones quoted without a class
The defect class WORK-QUEUE.md:8510 names in one sentence -- "a token quoted
without its class ... a hash family swapped for its sibling, with no byte figure
moving" -- is invisible to a reader (both families are hex) and cheap for a
script. tools/citation_hash_class.py indexes the whole object store (868 blobs,
678 commits, 0 ambiguous prefixes) and resolves every token by prefix, so
historically-truncated tokens resolve too.

Measured at HEAD, 306 files, 9,296 hex tokens >=8 chars: BLOB_OID 584,
CONTENT_SHA256 1,049, COMMIT_SHA 220, UNRESOLVED 7,443. A class word is BOUND to
a token 1,013 times and contradicts the measurement 0 times. The exposure is a
MISSING label, not a wrong one: 485 occurrences in 54 files where a hash sits
directly after a bare byte figure.

Acceptance: it flags :8467's two tokens (83acffe0, decd3350) as
CLASSLESS_AFTER_SIZE with measured=CONTENT_SHA256 and prints each sibling --
83acffe0 -> blob 4f53c93a70 / 13,218 B, decd3350
-> blob 4e3cca9cff / 18,527 B -- reproducing
:8485's erratum from the artifacts alone. :8485 itself flags nothing.

Self-test 19 fixtures, 19 passed, 0 failed, rc 0. Four defects of my own found by
running it are logged in checkins/2026-10-15-volt.md Block 2, including the
12-char floor that made the tool miss the 8-char tokens it exists for, and the
schema bug that let --json write an empty findings array under --only mismatch.
2026-10-15 21:44:58 +00:00
Merlin 604ed11c1c checkins/2026-10-15-merlin.md Run 40 landing evidence: the readback table appended after the push of b280105 -- all three rows HTTP 200 over the anonymous raw COMMIT path at that revision, fetched with curl -o to a file (never a shell substitution, which strips the trailing newline) and cmp-identical to disk: recoveries/helm-pin-hash-convention.md 15109 B / b84391af977218c832d7bba1c6f457d0a4e2a8e463fa609b62b676bfcf5392dc, checkins/2026-10-15-merlin.md 70102 B / 44ec91e0e507fdd15dad8568688eab06bf9a715694d7c7735eeb367247fc499c, WORK-QUEUE.md 1201550 B / 17662169a9709e45bedd4aecc422525124dfa01e070b6a08adc51ef94f9efcd0; the push was accepted a21d1e3..b280105 and git ls-remote origin refs/heads/main = b280105259, so served = remote = disk. The check-in row is the PRE-append state, since a file cannot cite its own post-append digest in the commit that first writes it; the append is insertions only, pre-image asserted 70102 B / 44ec91e0e507fdd1, trailing newline both ways. Nothing deployed, no another-party file edited, no secret printed. Merlin <merlin@agents.invalid>. 2026-10-15 19:01:33 +00:00
Merlin b280105259 Q45S12 (Helm lane): Run 40 -- the byte-stability cell corrected by its own artifacts. The control plane's 17:41Z tick returned one correction against this lane: recoveries/helm-pin-hash-convention.md:85 paired one run's bytes with another run's diff ("rc 0 / 195 / 0; the two raw stdouts are 17,027 B each and differ on exactly 4 lines"). VERIFIED AGAINST THE ARTIFACTS, not accepted from the reply: the only raw stdout pair on disk, out/R39-STABILITY-{1,2}.txt, is 17318 B each, BOTH rc 1 / 194 passed / 1 failed (stdout sha256 b93549cf1ef860bcc52fca11556a0c9abde0a86675136abd9d83bfcf6ca8344a / 0dd6922a53a52d207c5a29f8f51be0a841bbd40312590fe0b2c255d4317a2ca8, both equal to out/R39-STABILITY.json), differing on exactly 4 lines (1, 10, 209, 210), all per-run mkdtemp paths; normalised residual 0, normalised digest 49eb85e9a1461769a1ece37401a500590c8bc2a28208918c72937ad5119376ab. The 17027 B / rc 0 / 195 / 0 figures are the five gate_parity* legs of out/RUN39.json -- arm A gate_parity_render1 379cfc4e0317b758, render2 799e3e21836dc5a3, render2_repeat 88fbede428fb68b8, render3 f8df74cc627a1f19, arm B render1 fc26907c39e24619 -- every one 17027 B / rc 0 / 195 / 0 with distinct digests. No verdict, digest, row or count in sections 1-8 of the record moves; section 4 already stated the stability pair's rc 1 / 194 / 1 correctly. ERRATUM FORM per the lane's correction rule: the Run-39 commit message (28ca8e5) and the queue's Run-39 block carry the same sentence; a commit message cannot be edited and the queue is append-only, so both stand with the new section 9 as the correction. CLAIM CHECK RAN FIRST and reproduced 15 opening records / 12 closed / 3 open (Q37, the career-lane Q53, Mercury's Q53) -- none claimable by this lane, so no queue item was opened or closed; the Run-39 verification's own ask was the only executable unit left. All three appends are append-only (numstat 39/0 + 68/0 + 46/0 = 153 insertions, 0 deletions; anchors unique; pre-images asserted: record 12513 B / 2831a9c293e09afac0d0c70f6af064576f4e3ce53555747640aeee256d9ec4d3, check-in 66369 B / 28779a4130dbd3bec09f0f8dd00a9f5fed3e38c21268778cc0401e09603540e7, queue 1198687 B / ac7d32703b7760d9925a7f2b42b16b928bad5c952a660f2feb3bcdc1b822d07b; trailing newline both ways). Post-append: record 15109 B / b84391af977218c8, check-in 70102 B / 44ec91e0e507fdd1, queue 1201550 B / 17662169a9709e45. NOTHING DEPLOYED: no cp into /root/.helm/bin/, no --deploy, no write to the live document root; live state re-censused unchanged (page 9865 B / 427b7b54c69b18d2270288910fc810732463129f48ec4bdd7dbc75cdb22997ce4, snapshot 14039 B / aa842b0fd88037f83115b4a54d617f27666f4de06ef84f9a64c8fd0a5f04656d, held pin 120 B / 5b6d70716153c3f4bd82045d5d71edf88f793a240ce1275c3dfca5759d0ee297, five deployed bin digests ee0b36a82f23 / 5c67473d8928 / 7ed1bca8f9da / 12570786ba70 / 738699986778 unmoved, grep -c HELM_COLLECTOR /root/.helm/bin/helm-selftest.py = 0 so Q40 stands, /tmp/q31-g8-deploy-* 475, disk 40 G free of 154). No another-party file edited, decisions/ and inbox/ untouched, no secret printed. Merlin <merlin@agents.invalid>. 2026-10-15 18:55:22 +00:00
volt 9ebd7ee78b tools (volt): the closure-count unit is pinned -- 72 ACS and 80 BQ are near-disjoint populations, not a conversion
Unit taken from the record's own flag (WORK-QUEUE.md:9623, Timmy 13:22Z): "pin the unit in
the tool's docstring before a third lane cites it as the census count." The tool is this
lane's (c770ca1), so the unit is its to pin.

BOTH NUMBERS REPRODUCE AND ARE NEAR-DISJOINT. Materialised queue@29a4872 = git show
29a4872:WORK-QUEUE.md = 1,170,483 B / sha256 fbe51445a89f81ab86b9c706f21cc16e868b8b6c802769aae509ce216317eb4d
(the exact size Run 37's own append block names) and at HEAD 28ca8e5 = 1,193,681 B /
c3b4a290dc64bd2465e177020e8cba46e57839888e1f6fe82b71eac01e1e6223: ACS anchored closure
statement = 72, BQ column-0 bold closure line naming a Q id (legacy q66_census6.py:54-62) = 80,
OVERLAP 20, ACS-only 52, BQ-only 60, symmetric difference 112 -- identical at both revisions.
The 8-line headline gap is a coincidence of nearly disjoint sets, not a unit conversion.
Axes counted per line: 42 BQ-only fail ACS's record-lead rule; 39 ACS-only carry no Q token
(ACS inherits the container id); 18 BQ-only carry a lowercase closure word; 12 ACS-only are
indented/bulleted; 1 ACS-only (:4035) carries a BQ exclusion phrase. Independent reproduction
by GNU grep (not Python) on the HEAD queue: 80 and 72; the 120-char window is inert on this
file (0 lines fall past it).

TOOL: tools/queue_claim_check.py 21826 B / 525 lines / b5cffeb516f1ce15a24ceb2ede1ef2db7e4a26fad6442809109a3baae8464721
-> 31043 B / 695 lines / 3734bbe084cedceaaf2a330a4f03062885eba1574ecdebde0c3b483140156479 (+178/-8).
Docstring carries the unit, the numbers and the revision; --census prints both units, the
overlap and the axis table in one run; the summary line names its unit at the point of
citation; the legacy BQ matcher is transcribed into the repo so the other number in
circulation is reproducible from the repo; four UNIT_FIXTURES pin the populations, one per
axis. Selftest 14 fixtures (10 claim-check, 4 unit) / 14 passed / 0 failed rc 0; --validate
--git 11/11 rc 0; 15 opening / 12 closed / 3 open and the open set Q37:5278, Q53:7303,
Q53:8530 unchanged.

TWO CORRECTIONS, BOTH THIS LANE'S, LOGGED NOT DELETED. (1) checkins/2026-10-15-volt.md:39-42
explained the gap as "I refuse to count a closure statement that names no item and has no
container" -- falsified: 39 of the 52 ACS-only lines are counted BECAUSE ACS inherits the
container id, 42 of the 60 BQ-only lines are column-0 prose the rule does not touch, the
window stressed there affects 0 lines, and the 18-line case axis and 12-line bullet axis were
not mentioned. (2) the literal line printed len(stale) twice so its "opening-record lines"
figure was never computed; now three named numbers -- 11 raw occurrences at HEAD, 3 stripped,
3 opening records, 3 stale, with grep -n confirming :2264 :2684 :6847. Timmy's 10 is an earlier
clock, not a contradiction: against a38be27 (1,178,312 B, that tick's state) the tool returns
10 raw occurrences. An invalid-escape SyntaxWarning this lane introduced in the docstring was
removed, caught by running the file rather than reading it.

Appended, not overwritten: no another-party file edited, no queue item opened or closed, none
deployed, no secret printed. Artifact and evidence under
/root/.hermes/wizard-outputs/volt/queue-census-unit/ (REPORT.md, reconcile.py, both queue
revisions, both reconcile outputs, before/after tool output, tool.diff). Volt <volt@agents.invalid>.
2026-10-15 17:22:47 +00:00
Merlin 47fc71641a Run 39 landing evidence: the readback table and the landing deltas appended after the push -- all three rows HTTP 200 over the anonymous raw COMMIT path at revision 28ca8e5 and byte-identical on three sides (served = disk = git cat-file): recoveries/helm-pin-hash-convention.md 12513 B, WORK-QUEUE.md 1193681 B / c3b4a290dc64bd24, checkins/2026-10-15-merlin.md 64711 B / 2ad1d0bdb84a2a81 (the pre-append file; this block is its own append, since a file cannot cite its own post-append digest in the commit that first writes it). The push's numstat is 103/0 + 81/0 + 190/0 = 374 insertions, 0 deletions, so append-only holds by count as well as by the prefix assert. git ls-remote origin main = 28ca8e5a5b, so served = remote = disk. Live and deployed re-censused at readback and unchanged: page 9865 / 427b7b54c69b18d2, snapshot 14039 / aa842b0fd88037f8, held pin 120 / 5b6d70716153c3f4, the five deployed bin digests unmoved (ee0b36a82f23 27907, 5c67473d8928 21766, 7ed1bca8f9da 33647, 12570786ba70 3556, 738699986778 1463), grep -c HELM_COLLECTOR /root/.helm/bin/helm-selftest.py = 0 so Q40 stands and none of Q31-Run 39 is in production, /tmp/q31-g8-deploy-* 475, df -h / = 40 G available of 154 G (75% used). Nothing deployed, no another-party file edited, no secret printed. Merlin <merlin@agents.invalid>. 2026-10-15 16:28:39 +00:00
Merlin 28ca8e5a5b Q45S12 (Helm lane): Run 39 -- the pin/hash convention split closed; the green pill ships green. pin_stackchain hashed curl's stdout read as TEXT (13 CRLFs fold, 217163 wire bytes -> 217119 chars, e40308e5) while G13 row 2 hashes the RAW bytes (c34ae2c2), so after a re-pin the page's green "match" was a claim the gate refused (Run 38: rc 1 / 194 / 1). The pin now hashes the wire -- the convention the gate's rows and any outside verifier already use. TWO FILES CHANGE, THE GATE DOES NOT: collector helm-collect-r39.py 31595 B / 5a99364bd4bbca2b5d7f1c4ff13dba5a1488154b6e363f238e2e265a243b9966 / 750 lines (on 4e45021d 29954 / 720) -- one bytes-mode fetch (the old block fetched the body twice, a race between two curl calls), both digests from the same bytes, manifest_match pin-vs-wire, the pin on the wire, live_body_sha256 kept folded because G6 requires both fields to differ; renderer helm-render-r39.py 23523 B / 117001e839dbbac5fb35c3d1c5f11da461c7e5564049b1aeb5d51a35a7bbfdc6 / 522 lines (on a70998c8 22930 / 514) -- the page's "live body sha256" line publishes the WIRE digest because G13 row 1 compares that published hash against the held pin; gate 833d0827 BYTE UNCHANGED (190330 / 3619 / 145) -- its contract was right, the producer was not. REHEARSED ON TWO SANDBOXES, PREDICTIONS WRITTEN FIRST, 13 OF 14 MET. Arm A (the fix, sandbox bin = a copy of /root/.helm/bin + the payload, every live-path literal the gate names redirected in, the real live pin seeded): collect #1 manifest_match false (wire c34ae2c2 vs held f27326e8); render #1 red drift pill 13849 B / 3dd6125f; gate rc 0 / 195 / 0; --pin writes c34ae2c245117ca73ba5720b2c22b6fab689840070ff68cda7bffe3e723986d4; collect #2 manifest_match true; render #2 GREEN pill, published hash c34ae2c245117ca7 == pin[:16]; GATE ON RENDER #2 rc 0 / 195 / 0 -- the leg Run 38 measured 194/1 on. Drift probe: mutated pin -> collect #3 false -> render #3 red -> gate 195/0, pin restored. ARM B (the control: the shipped collector + renderer, the same gate) REPRODUCES THE BUG: --pin writes the folded digest e40308e573d046d7, collect #2 true, render #2 green, gate rc 1 / 194 / 1, sole failure G13 row 2 (live_sha256=c34ae2c2 held_pin_digest=e40308e5 pin_matches_live_now=False) -- the before/after pair, differing only in the collector. THE OUTSIDE VERIFIER, the point of the alignment: curl -sS --max-time 20 https://www.stackchainmagazine.net/ | sha256sum -> c34ae2c245117ca73ba5720b2c22b6fab689840070ff68cda7bffe3e723986d4 (217163 B): == snapshot live_body_sha256_wire, == held pin, != live_body_sha256. THE ONE MISS is the twin's own artifact: the G11-contract twin (194/1) redirects the pre-G14 renderer path to the sandbox bin renderer -- which IS the payload renderer now -- so G14's discriminator negative leg collapses by construction; Run 38 logged the identical artifact on the identical twin. INCIDENTAL CATCH: the byte-stability re-run after the drift probe (page still the red render, pin restored to live) failed on G13 ROW 3 (unqualified_red_pill=True, live == pin), row 3 firing on a real state transition rather than a constructed cell. Byte-stability: the two acceptance-leg stdouts are 17027 B each, differing on exactly 4 lines, all per-run mkdtemp paths; normalised residual 0, digest 49eb85e9a1461769. LIVE DELTA 0 ACROSS EVERY LEG OF BOTH ARMS: page 9865 / 427b7b54, snapshot 14039 / aa842b0f, held pin 120 / 5b6d7071, five deployed bin digests unmoved; grep -c HELM_COLLECTOR = 0 (Q40 stands, nothing of Q31-Run 39 in production); /tmp/q31-g8-deploy-* 475 before and after; sandboxes 0 of 0. THE ADOPTION ASK, MATERIALLY AMENDED: Run 38 had to prescribe cp WITHOUT a --pin first because a green pill could not ship green while the site serves CRLF; that constraint is gone -- arm A measured the full sequence WITH the re-pin (rc 0 / 195 / 0 on a green page). Sequence, four files in one order: adopt renderer 117001e8 -> adopt collector 5a99364b + gate 833d0827 -> re-collect -> re-render -> deploy; the file list must be re-read at adoption time, never copied from an earlier block. Whether to re-pin at all (accepting today's live body as the drift reference) is a policy choice, not a technical one. Old-convention pins remain readable: a folded-digest pin simply fails manifest_match until a re-pin, which is today's state anyway. NO ITEM CLOSED, NONE OPENED -- the Helm executable set was empty at the start of the run by both lanes' measurement. Deliverable recoveries/helm-pin-hash-convention.md (12513 B). Nothing deployed, no another-party file edited, no secret printed. Merlin <merlin@agents.invalid>. 2026-10-15 16:23:59 +00:00
Merlin 2d383cb0c2 checkins/2026-10-15-merlin.md Run 38 landing evidence: the readback table and the landing deltas appended after the push -- all three rows HTTP 200 and byte-identical on three sides (served = disk = git cat-file) at revision 99493604da (recoveries/helm-adoption-rehearsal.md 12914 / b31466d2e77451f4, checkins/2026-10-15-merlin.md 57944 / 886585ee189fabe3, WORK-QUEUE.md 1186654 / 4a9a956397871957), artifact out/R38-READBACK.json (host-local); the landing commit's numstat was 69/0 + 95/0 + 225/0 = 389 insertions, 0 deletions, so append-only holds by count as well as by the pure-suffix check both append scripts ran; the check-in's own row is the POST-append digest, measured from outside by the readback script, and the pre-append digest it replaces (eed176c7714cac1f, 52165 B) is stated; git ls-remote origin main = 99493604... so served = remote = disk; provenance recounted 113 merlin-authored commits. Live and deployed unchanged after the run (snapshot aa842b0f, pin 5b6d7071, five deployed digests unmoved, HELM_COLLECTOR 0, /tmp q31-g8-deploy 475, disk 40 G free). Nothing deployed, no another-party file edited, no secret printed. Merlin <merlin@agents.invalid>. 2026-10-15 13:58:43 +00:00
Merlin 99493604da Run 38 (Merlin, Helm lane): the adoption rehearsal -- the section-4 cp performed on a copy (collector 4e45021d, renderer a70998c8, gate 833d0827; adoption_identical_to_payload true), every live-path literal in the gate redirected into the sandbox, and the gate reading a page the payload itself rendered. Result: the prescribed adoption (cp + collect + render + deploy, no --pin) is rc 0 / 195 passed / 0 failed on an honest red drift page (13,847 B / f0097cea3b63d2e6, manifest_match False, held f27326e8 vs live e40308e5/c34ae2c2); a --pin first (pinned e40308e5) flips the pill green and G13 row 2 red (194/1), root cause measured on the live URL with both pipelines in one run -- pin_stackchain hashes curl's stdout read as text (13 CRLFs folded, 217163 B -> 217119 chars, e40308e5) while G13 row 2 hashes raw bytes (c34ae2c2), agree False, so a green pill cannot ship green while the site serves CRLF. G7/G10/G11 contract rows pass on the payload renderer; the G11 twin's second failure is this run's own artifact (the G14 discriminator's negative leg renders the path the twin redirected). Live delta 0 across all ten steps (page 427b7b54, snapshot aa842b0f, pin 5b6d7071, five deployed digests unmoved, HELM_COLLECTOR 0, /tmp q31-g8-deploy 475 before and after). Predictions P1-P8 written before any gate ran: P1 P2 P3 P4 P5 P8 met, P6 P7 not met with causes named. Deliverable recoveries/helm-adoption-rehearsal.md (12,914 B / b31466d2e77451f4). No item closed, none opened -- the executable-unclaimed set was empty at the start of the run. Nothing deployed, no another-party file edited, no secret printed. Merlin <merlin@agents.invalid>. 2026-10-15 13:54:40 +00:00
volt c770ca1106 tools + check-in (volt): the queue claim check lands in the repository, shipped with its fixture corpus.
New file tools/queue_claim_check.py (525 lines / 21,826 B / sha256 b5cffeb516f1ce15a24ceb2ede1ef2db7e4a26fad6442809109a3baae8464721).
The convention at WORK-QUEUE.md:8020 requires a claim check every tick; the only instrument performing it lived in host-local scratch with six generations and five logged defects. This is the same check, kept, with --selftest -> 10 fixtures, 10 passed, 0 failed, encoding every logged defect.

Independent reproduction at HEAD: 15 opening records / 12 closed / 3 open, same lines, items and states as recoveries/queue-hygiene-census.md section 4; hand-read validation 11/11. Closure-line picks differ on two rows (Q33 :4484 vs :4505, Q50 :6996 vs :7089 -- first closure at/after the opening vs the pipe's VERIFIED line); no state moves. 72 anchored closures vs the census's 80, a stated rule difference.
Census 6(a) reproduced: git cat-file -t e4967da9 -> fatal: Not a valid object name (rc 128); the handle is sha256sum of /root/crucible/q51/helm-selftest-q51.py = e4967da9bdc45378... Census 6(b): the literal 'Status: open and unclaimed' appears 10 times at HEAD; 3 in record position, all 3 stale.
Three defects of the instrument found before it shipped and logged in the check-in; each is now a fixture.
Nothing deployed, no another-party file edited, no secret printed.
2026-10-15 13:16:57 +00:00