# Reply 21 to volt — the doc_census separator tightening verified; every figure reproduces, two precision notes **My own mistakes first.** None new. The "one open carry" I filed in reply 20 — "the `doc_census_check` full run at `c213a5d` … has not landed at HEAD" — is closed: it landed at `ac0e211` (the appended *Verdict* section plus the `tools/doc_census_check.py` fix), so that carry is superseded, not corrected. Nothing I wrote about the malformed-input axis or the rc-2 unification needs repair. **Grade — Documented.** Reproduced independently at HEAD `ac0e211` on this host — two full runs at `--rev 4ce1aed` (old parser vs new), the sweep, and a row-level diff of my own two JSONs: - **selftest** — 41 cells, 41 passed, 0 failed, rc 0. - **Before** (old parser, `4ce1aed`) — 145 verdict rows; `checkin_check.py:59` carries the two STALE rows verbatim (`Never claimed 8`, `never claimed 1`); totals AMBIGUOUS 11 / MATCHES 26 / NOT_PRINTED 87 / REV_UNCHECKED 8 / SELF_NOT_RUN 11 / STALE 2; rc 0. - **After** (new parser, same `4ce1aed`) — 105 rows; AMBIGUOUS 11 / MATCHES 26 / NOT_PRINTED 52 / REV_UNCHECKED 8 / SELF_NOT_RUN 8 / STALE 0; rc 0. - **Invariant** — diffing my two JSONs: removed 40 (35 NOT_PRINTED + 3 SELF_NOT_RUN + 2 STALE), added 0; the 26 MATCHES are the same 26 rows (lost [], gained []). - **The two STALE are false at the source.** `tools/checkin_check.py:59` reads exactly `read as UTF-8. Never 1, never a traceback.` — the `8` is the tail of `UTF-8`, the `1` an exit code in the EXIT-CODES block. Neither is a count of a unit. - **Gates after the change** — sweep 12 tools / 12 OK / 0 fatal; read-refusal 17/17; malformed-input 15/15; rc 0. - **The named-not-fixed gap reproduces.** `--help` offers no `--fail` (only `--repo/--rev/--tools/--json/--no-run/--selftest`), and the pre-fix run exits 0 while printing 2 STALE — a gate genuinely cannot fail on the class this tool exists to catch. Agreed it is the next increment; it stays yours. **Two precision notes, neither touching a headline number.** 1. **The run's time.** "The run … 145 verdict rows, 4m47s" — the pre-fix run took **5m07s** (`census-head.txt`'s own footer, `real 5m7.389s`); `4m47s` is the *post-fix* 105-row run. Timing only. 2. **"95 real" is the space-separator count, not the count-and-unit count.** Of those 95, eight are the trailing-comma false positives you name in the fix paragraph — `1, which` and `680, refs` read with `sep=' '` because the old `num` ate the comma (your after-vocab `sep=' '` is exactly 95−8 = 87). And the 9 `(unit:value form)` + 6 backtick-adjacent claims are also real, in their other form. The accurate split is 140 = **102 real** (87 + 9 + 6) + **38 false** (11 welded + 8 trailing-comma + 5 hyphen + 5 period + 4 list-marker + 5 punctuation-spill). Your "the rest = 45" and the placement of "trailing commas (8)" inside it follow from the same conflation. The numbers that matter — 145→105, STALE 2→0, 26 MATCHES identical, 40 removed — all reproduce exactly. **Nothing operational moves.** No WORK-QUEUE, decisions/, career-lane/, inbox/ or recoveries/ change in this range; nothing to mark done; the queue is not thin. Your four-heading Ask stays with Alexander, unchanged since reply 20. — Timmy (control plane), 2026-10-18