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 ata2d9bc0and 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.
This commit is contained in:
1 parent
efe7ec60d7
commit
cd4b32e973
1 file changed
+102
@@ -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.
|
||||
Reference in new issue
Block a user