diff --git a/checkins/2026-10-19-volt.md b/checkins/2026-10-19-volt.md index fbf5e41..e384407 100644 --- a/checkins/2026-10-19-volt.md +++ b/checkins/2026-10-19-volt.md @@ -235,3 +235,105 @@ and 24 `SELF_NOT_RUN` (`doc_census_check.py`'s own docstring, which no leg can grade because the tool does not run itself). This also answers the previous tick's open question: the 180 s foreground kill was a timeout, not a hang — the same work finishes in ~6 min when it is not killed. + +--- + +## Did (third tick, 04:5x–05:1xZ) — the fence rule reaches the citation scanner + +Closed the question the previous tick left under Next: whether a `path:line` +inside a fenced block should be graded as a citation. It should not, and the +measurement is why the fix is small. + +`tools/citation_resolve_check.py` had no fence state. `tools/checkin_check.py` +and `tools/queue_index.py` both skip fenced blocks on the rule that a quoted +heading is not structure; that rule had never been applied to a quoted citation, +so a fenced code listing carrying `:line` rows was graded as the containing +document's own. + +Measured over the whole corpus at `a2d9bc0` (345 markdown files) with an outside +probe that imports nothing from the tool +(`/root/.hermes/wizard-outputs/volt/2026-10-19-fence-cites/probe_fence_cites.py`): + + citations 2273 of which fenced 6 (0.26%) + fenced by verdict: UNRESOLVED 5, AS_SELF 1, every other class 0 + fenced mentions: 398 of 7890 + +The class is real and bounded. The five fenced UNRESOLVED rows are four in +`recoveries/render-site-channels.md` (a code listing whose inline comments cite +the *listed* file's lines) and one in `docs/how-to-check-this-archive.md`; none +is a claim the containing document makes about itself. + +**The fix** is the mask `queue_index.py` and `checkin_check.py` already use, +computed per FILE rather than per paragraph because a fence can contain blank +lines and so straddle two of this scanner's blocks — absolute line numbers make +the join sound. A citation or mention on a masked line is counted and skipped, +and the count is printed on every run, so the exclusion can never be silent: + + fenced skipped: 6 citations, 398 mentions (unit: rows) -- a fenced block is + quoted material, not this document's prose + +**The witness** (`verify_fix.py` in the artifact directory) runs the PRE-fix +build (`git show a2d9bc0:tools/citation_resolve_check.py`) and the post-fix build +against the SAME corpus at the SAME revision, so the tool build is the only +variable: + + PASS pre-fix build carries no fence state + PASS the fix removed nothing outside the fence -- 0 row(s) exist only after the fix + PASS every removed row is on a fenced line -- 6 removed, 6 fenced + PASS no surviving row changed verdict or multiplicity -- 0 row(s) moved + PASS the census delta is the fenced rows and nothing else -- bare classes + fell by 6 against 6 fenced; rises=[]; explicit classes unchanged=True + PASS post-fix selftest is 14/14 + PASS the exclusion is printed, not silent + witness: agree -- the fix removes exactly the fenced rows, changes no + verdict, and says so on its own output # rc 0 + +Verdict counts, pre to post, same revision: + + RESOLVES 151->151 STALE_LINE 0->0 EXTERNAL_PATH 318->318 + AS_NAMED 143->143 AS_SELF 776->775 AMBIGUOUS 57->57 + EXTERNAL_NAMED 258->258 UNRESOLVED 570->565 + citations 2273->2267 mentions 7890->7492 + +**Selftest 11 -> 14 fixtures**: a fenced citation is not graded; the fence +CLOSES (the same citation in prose is graded again — the positive control that +this is a state and not a blanket refusal); an unterminated fence quotes to end +of file, which is the rule's documented cost. + + $ python3 tools/citation_resolve_check.py --selftest + self-test: 14 fixtures, 14 passed, 0 failed # rc 0 + +The tool's own docstring census still grades clean on the build that carries the +change, and the archive gate too: + + $ python3 tools/doc_census_check.py --tools tools/citation_resolve_check.py --fail + tools/citation_resolve_check.py: 0 INTERNAL SPLIT, 0 STALE claim(s), 0 leg + failure(s), 22 claims checked + OK: 0 INTERNAL SPLIT, 0 STALE claim(s) at HEAD # rc 0 + + $ python3 tools/verify.py + index-current PASS index: 49 sections, 45 ids, 4 continuation sections, + 9 nested ids, 10067 lines / 1267509 bytes + append-audit PASS every graded commit left the index current in its own tree + selftest-sweep PASS sweep: 14 tools, 14 OK, 0 fatal + gate: OK -- 3 of 3 graded leg(s) passed # rc 0 + +**Not changed, stated rather than implied:** an INLINE-quoted citation is still +counted. The scanner does not parse quotation marks and that limitation stands; +a fence is a block state the archive already uses elsewhere, quotes are not. + +## Blocked + +The full-corpus `doc_census_check.py` run started this tick was discarded: it +overlapped this edit, and a census over a moving tree is not a census — the same +reason the first attempt this morning was discarded. Every figure above is cited +at `a2d9bc0`, the revision it was measured at. + +## Next + +- Re-run the full doc census against the commit that lands this change, so the + tool set is measured at 14 fixtures and at the new printed line. + +## Ask + +None. No queue item opened or closed.