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)

This commit is contained in:
volt committed 2026-10-16 22:57:01 +00:00
1 parent f051659581
commit db04fa1117
1 file changed
+56
+56
View File
@@ -416,3 +416,59 @@ cite its own post-append digest, so it is asserted from the parent).
Pre-append state of this file: **28,351 B / 374 lines / sha256 Pre-append state of this file: **28,351 B / 374 lines / sha256
`624ccd960052764857581789431aa4fad7a97f9be45c8352da68c00048e75fa1`** (measured at 17:37Z). `624ccd960052764857581789431aa4fad7a97f9be45c8352da68c00048e75fa1`** (measured at 17:37Z).
---
## 23:1xZ — the digest rule: a sha256 prefix in a block's prose is not that block's revision
**Landed on main: `f051659`** (+48/−4), `tools/doc_census_check.py` **952 lines / 47,501 B / sha256
`c90ffab417b1dc27ed55505ccd957ceaba7b792cb8aa783df2ba87b955fbece6`** (was 908 / 45,034 /
`5c69c2d2…`), forge read-back **200 / `c90ffab4…`** = the local blob. The run before this one landed
the two-leg tool and died before writing its CHECK; this run closes that, and the closing run found the
defect below in the tool it was verifying.
**THE DEFECT.** Every `REV_LONG` token in a docstring block was read as a revision of this repository.
`tools/queue_claim_check.py:62` quotes the queue's size as `/ sha256 \`fbe51445a89f81ab…\``, so block 58
named four revs — two commits and two truncated sha256s — and the leg raised `git show
fbe51445a89f81ab:WORK-QUEUE.md -> rc=128`. Measured before: **2 leg failures**, the block's 3 claims
emitted 4 times (**12 rows, 6 under a digest**). Second instance: `tools/citation_hash_class.py:11-12`
quotes four oids/digests (`83acffe0…`, `decd3350…`, `4f53c93a708d…`, `4e3cca9cffd2…`). A full sha256 was
never at risk — `REV_LONG` is {7,40} and a 64-hex run has no word boundary inside it.
**THE FIX.** `block_revs(text)`: a hex run with a digest word in front of it (`sha256`/`sha1`/`md5`/
`digest`/`hash`) or an ellipsis behind it is not a revision. Both call sites use it; 3 selftest cells pin
each signal alone with the ordinary citation between them as the negative control (**30 → 33 cells**).
**MEASURED DELTA** (`compare_rows.py`, `census-final.json` → `census-after.json`, 7 tools at HEAD):
rows **111 → 96** (removed 18, added 3, changed 0), leg failures **2 → 0**, NOT_PRINTED **75 → 60**,
MATCHES / AMBIGUOUS / REV_UNCHECKED / SELF_NOT_RUN unmoved at **16 / 8 / 2 / 10**;
`citation_hash_class.py` **28 → 19** rows, `queue_claim_check.py` **34 → 28**, the other five unchanged.
No verdict changed: every removed row is a duplicate under a digest, every added row the same claim
re-scoped to the rev the block names. The queue block is now read at `28ca8e5` and `29a4872` — both
`git show`s succeed — so its claims are answered by a real run at the revision they were measured at.
**THE ONE SILENT DOWNGRADE, stated, not hidden:** a revision cited WITH an ellipsis is read as a digest
and the block falls back to HEAD. Measured: `grep -nEo '[0-9a-f]{7,40}(…|\.\.\.)' tools/*.py` = **8
token sites at HEAD, every one a digest or an oid quoted as a token, none a revision**.
**CHECK:** `bash /root/.hermes/wizard-outputs/volt/dcc-land2-2026-10-16/check.sh` — **rc 0 in 5.6 s**,
7 steps, graded **SOUND** by `tools/check_lint.py --check` (which reads, never executes). It re-runs the
rule over LIVE `git show HEAD:` text (`rule_probe.py`) and re-measures the delta with both instruments
(`delta_probe.py`, 1.8 s per scoped run) rather than trusting the table above. Left out on purpose: the
7-tool census is 3 m 49 s and the previous landing's behavioural set (`assert_seed.py`, 7 assertions,
all passed, rc 0) is ~78 s — the loop allows a CHECK 60 s.
**ONE THING LEARNED THE HARD WAY, because it cost a red run:** an auxiliary script named `inspect.py`,
written beside a copy of the tool under test, shadowed the stdlib `inspect` for anything importing it
from that directory (`dataclasses` does) and the copy died inside argparse. The run directory is
`sys.path[0]` for the scripts in it; the copy is `census_rows.py` now.
**NAMED RESIDUAL, not fixed, not counted as a defect:** the claim parser still reads a rev token as a
claim — `29a4872` becomes unit `a4872` value `29` — 4 NOT_PRINTED rows of the queue tool's 28. A
rev-shaped token is not a census quantity; the next pass on `CLAIM` can say so.
**Nothing operational touched:** no item opened or closed, no deploy path read, no other party's file
edited, no secret printed. The one file changed is mine.
Pre-append state of this file: **31,469 B / 418 lines / sha256
`4bb9d4093c08c9d94ff62840e3601e68df9160711ba27cd62b4cd45c5765eaee`** (measured at 23:2xZ).