de4b89ec50d9c9b6bfe10fb207ce4daf3d1c84c8
15
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4034645b9d | tools (volt): landing_check.py -- every file at a revision, compared byte-for-byte with what the forge serves | ||
|
|
1d5f634e85 |
tools (volt): claim coverage 2 of 9 -> 8 of 9, and the sweep stops tripping the census
Six instruments printed a cell/fixture count that nothing checked: a docstring
could say 13 beside a selftest printing 18 and no instrument would notice. Each
now advertises its own printed count on a line that names --selftest, so
selftest_sweep reads it as a claim (2 OK/7 NO_CLAIM -> 8 OK/1 NO_CLAIM, 0 fatal,
all 9 selftests still green). doc_census_check.py is left NO_CLAIM on purpose:
its docstring already carries a `13 cells` claim, and a second cells claim there
is an internal split by the census's own rule.
selftest_sweep.py's own docstring quoted a fixture line ("selftest: 7 cells ...")
and a `13 cells` aside, which doc_census_check read as real claims: 2 STALE and
a {7,13,18} SPLIT against a tool that prints 18. Reworded to N placeholders and
words; the remaining claims are the real one (18 cells) and a commit sha the
claim reader still reads as `580 a41c` (NOT_PRINTED, not a defect).
|
||
|
|
d1ad5fcfcd |
tools (volt): selftest_sweep.py -- every instrument's advertised cell count, checked against the count it prints
The append_only_audit "13 cells" defect (fixed at
|
||
|
|
4d7e8b43cf |
tools (volt): census_row_delta.py -- a row-level partition of two censuses, and the 96->95 pair measured instead of argued
The briefs over the 2026-10-16 digest-rev fix agreed on the new census total and disagreed on the partition, because a partition is a property of the two runs AND of the key a row is identified by. This tool prints the partition under a NAMED key, prints it under every key shape it knows with --keys, and takes position out of the key so a row that MOVED is not reported as a delete plus a create. Where a signature has a different number of rows on each side the pairing is not guessed: the candidates are printed with their block/line deltas and the content counts are reported as a RANGE, because two removed rows and one added row of one shape can be a move plus a deletion or two deletions plus a create, and the records are identical in every field the tool can see. The ordered zip that used to answer this called 56:63 the moved row on the live pair; the text says 82:93 moved to 89:100 and 56:63 was deleted. Count right, identity wrong -- the defect class this tool exists for. selftest: 33 cells, 33 passed, 0 failed. |
||
|
|
f051659581 |
tools (volt): a sha256 prefix in a block's prose is not that block's revision
The two-leg tool read every REV_LONG token in a docstring block as a revision of
this repository. A block that quotes the queue's size as "/ sha256
`fbe51445a89f81ab…`" therefore named a revision that cannot exist: the leg raised
`git show fbe51445a89f81ab:WORK-QUEUE.md -> rc=128`, the block was counted as a
leg failure, and -- because the oracle loop runs once per rev -- each of its
claims was emitted AGAIN beside the real ones. Two spurious failures and six
duplicate rows, in the tool whose whole job is to make a docstring figure
adjudicable.
WHAT IS LANDED (908 -> 952 lines, 45,034 -> 47,501 B, sha256 5c69c2d2 ->
c90ffab4; the diff is one new helper, three call sites, three selftest cells and
the docstring paragraph that states the rule):
1. `block_revs(text)` -- the revisions a block names, with hex runs read as
digests excluded. Two signals, both local to the token: a digest word in
front of it (`sha256 <hex>`, `hash <hex>`, `sha1`/`md5`/`digest`), or an
ellipsis behind it (`<hex>…`), which is how this archive writes a truncated
digest. A FULL sha256 was never at risk: REV_LONG is {7,40} and a 64-hex run
has no word boundary inside it.
2. `check_tool` (the live path) and `_fixture_checks` (the fixture) both call it,
so the fixture and the tool read revs by the same rule.
3. Three selftest cells: each signal exercised alone, with the ordinary citation
between them as the negative control.
4. The docstring says so. It also states the one silent downgrade this rule can
cause -- a revision cited WITH an ellipsis is read as a digest and the block
falls back to HEAD -- and that side is measured, not guessed: `grep -nEo
'[0-9a-f]{7,40}(…|\.\.\.)' tools/*.py` returns 8 tokens at HEAD and every one
is a digest or an oid quoted as a token, never a revision.
MEASURED DELTA, all 7 tools at HEAD, before = c90ffab4's predecessor run
(census-final.json) vs after (census-after.json), compare_rows.py:
rows 111 -> 96 (removed 18, added 3, changed 0)
leg failures 2 -> 0
verdicts 8 AMBIGUOUS / 16 MATCHES / 75 NOT_PRINTED / 2 REV_UNCHECKED /
10 SELF_NOT_RUN
-> 8 AMBIGUOUS / 16 MATCHES / 60 NOT_PRINTED / 2 REV_UNCHECKED /
10 SELF_NOT_RUN
per tool citation_hash_class.py 28 -> 19 rows, queue_claim_check.py
34 -> 28 rows, the other five unchanged
Every removed row is a duplicate emitted under a digest; every added row is the
same claim re-scoped to the rev the block actually names. No verdict CHANGED --
the fix removes rows, it does not re-judge any. The queue block is now read at
`28ca8e5` and `29a4872`, the two commits it cites, instead of at those commits
plus the two digests it quotes.
TWO INSTRUMENTS, NOT ONE. `--selftest` is 33 cells / 33 passed / 0 failed, rc 0
(30 -> 33 with the three new cells), and it is the instrument that pins the rule
in isolation. The rule's effect on live text is pinned separately by the scoped
live run, 1.8 s: `--tools tools/queue_claim_check.py` yields 0 leg failures and
28 rows, against 2 and 34 for the same file the commit before. A cell for the
rule plus a run of the rule, because the last defect in this tool was a rule its
own fixture could not see.
FOUND WHILE MEASURING, and worth a line because it cost a red run: an auxiliary
script named `inspect.py` written beside a copy of the tool shadows the stdlib
`inspect` for anyone importing it from that directory (`dataclasses` does), and
the tool died with a traceback that named argparse. The copy is `census_rows.py`
now; the lesson is that the scratch directory is sys.path[0] for the scripts in
it.
|
||
|
|
0031a7831f |
tools (volt): the two-leg doc_census_check -- leg 2 is the tool's own --selftest, and the seed defect was invisible without it
The scanner reads a tool's module docstring, compares every `<value> <unit>` claim against the census that tool PRINTS, and until this commit it had one oracle: the tool's own run. So a claim about a number the run does not print read NOT_PRINTED -- and `13 cells` against a selftest that prints `18 cells`, the exact defect class this tool was built to catch, sat inside its own default scope and was never adjudicated. WHAT IS LANDED (907 -> 908 lines; the only edit in this commit is the splice below, byte-measured in the check-in): 1. Leg 2 -- the tool's own `--selftest` -- is a second oracle leg, carrying the tag `selftest`. A claim is adjudicated by the FIRST leg that prints its unit; NOT_PRINTED now means no leg printed it. A tool with no --selftest simply has one leg: a fact about the tool, not a defect in it. 2. REV_UNCHECKED -- neither a `no-rev` leg (it measured the working tree) nor the selftest leg (it measured the tool's own fixtures) is a verifier for a block that names a revision. Such a claim is reported, never counted as a match and never counted as a defect. 3. SELF_NOT_RUN -- this scanner is in its own default scope, and running it on itself spawns it again without a floor, so its own claims are printed as rows and excluded from the run leg. 4. RUN_FAILED, and the fall-through: a leg that produced no census adjudicates nothing, and a surviving leg still answers the block's claims. A recipe whose revision will not materialise raises rather than handing the tool the empty file it left behind -- an empty queue is a census of zeros, and a census of zeros reads as that revision's census. 5. A recipe for append_only_owners.py (tag `no-rev`), and the argparse fall-through: a tool that rejects `--repo R --rev REV` is re-run with exactly the tokens argparse named dropped, tagged `no-rev`. MEASURED DELTA, same 6 tools at HEAD, HEAD tool vs this one (compare.py on head6.json / cand6.json): 101 verdict rows, 13 MATCHES -> 16, 80 NOT_PRINTED -> 75, 8 AMBIGUOUS -> 8, 0 -> 2 REV_UNCHECKED. Five rows change and three of them are substantive: append_only_audit.py `18 cells` NOT_PRINTED -> MATCHES (leg 2); append_only_owners.py `2 folded` / `10 raw` NOT_PRINTED -> REV_UNCHECKED (the honest non-verdict); queue_claim_check.py `0 bold` twice NOT_PRINTED -> MATCHES by notation (the docstring phrase `column-0 bold` is read as the claim `0 bold`; 0 = 0 on a number that counts nothing -- do not cite the new total without that split). THE SPLICE THIS COMMIT FIXES, and why it is in the same commit: the working-tree revision carried a paragraph merged from two drafts -- "answers that with an argparse diagnosis and no a census at all, silently. It is now re-run ..." -- and a docstring that does not say what the code does is the defect this tool exists to catch. The correction is documentation only; behaviour is unchanged and the selftest is 30 cells, 30 passed, 0 failed, rc 0, before and after. The tool never checks its own docstring (SELF_NOT_RUN), so this one was read by hand. |
||
|
|
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. |
||
|
|
580a41cf92 |
tools (volt): the standing carry discharged -- append_only_audit's docstring said "13 cells", its selftest prints 18
The repo-wide two-leg docstring-vs-printed-census oracle (tools/doc_census_check.py, the working-tree revision sha256 ae193f20f10bcceeb1b2c699f0f86ffda02179872f0c32356dc2e182861a2f55 / 723 L, cited here as the instrument used and NOT committed by this change) reads exactly ONE STALE claim across all six tools/*.py scanners at HEAD |
||
|
|
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 |
||
|
|
f5403b2510 |
tools (volt): the docstring-vs-printed-census checker, and the defect it was built to catch fixed
tools/doc_census_check.py (548 L / 25,058 B / sha256 dbbbdc01bb19dbcbbe87141c90a80e0bff19c98557c80f91c81347c53c98f1c5) checks a scanner's module docstring against the census that scanner PRINTS, two independent ways: (1) INTERNAL SPLIT -- one unit, one revision scope, two values in one paragraph, caught with no subprocess at all; (2) ORACLE -- the tool is re-run at the revision its docstring names and every '<value> <unit>' claim is compared with the value that run prints (MATCHES / STALE / CLONE_LOCAL / AMBIGUOUS / NOT_PRINTED). A unit the tool prints with two values is SECTION_SPLIT_BY_TOOL and no claim is made about it; a unit the tool never prints is NOT_A_CENSUS_UNIT and no claim is made about it either. Selftest 14 fixtures, 14 passed, rc 0; the only write path is --json. THE DEFECT IT CATCHES, AND THE FIX: the control plane returned it against this lane's own resolver (reply 04, |
||
|
|
fca3f2ee3d |
tools (volt): the citation resolver -- every <path>:<line> citation in the archive's prose, resolved; the bare :line idiom measured as a candidate, not a verdict
402 -> 407 lines / 20,460 B / sha256 7d063b39e2e4f9e5691b720cb57895b29450ece77051a7db6a8584dfd7173237.
Census at
|
||
|
|
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 |
||
|
|
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 |
||
|
|
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 ( |
||
|
|
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. |