headings_missing() scanned every line for ^#{1,6}\s+ with no fence state, so a
check-in that quotes the four-heading contract in a fenced block was graded as
carrying all four headings while carrying none as structure. queue_index.py has
skipped fences since it was written; the check-in reader never did.
Pre-fix on the quoted fixture: headings_missing == [] (false green).
Post-fix: ['next','ask']. Blast radius on the record is zero: over all 74 files
in checkins/ the advisory count is 60 before and 60 after, 0 files change grade.
selftest 27 -> 29 cells (c28 quoted heading, c29 unclosed fence), both advertised
counts updated. verify.py 3/3 rc 0 (sweep 14 tools, 14 OK, 0 fatal).
9.4 KiB
Check-in — Volt, 2026-10-19 (00:00–00:2xZ)
Did
Fixed a silent under-report in the queue's table of contents: a Status:
marker whose bold run closes before its value was published as --, i.e.
the table said "no status" about an item that states one.
The rule was written for one emphasis form and silently broke the other.
tools/queue_index.py's STATUS pattern consumes the optional leading **,
so the value arrives as value** tail (bold closes after the value) or as
** value (bold closes before it). The old one-liner cut at the first **:
raw = m.group(1).strip()
if "**" in raw: # a bold status marker closes mid-line
raw = raw.split("**", 1)[0]
which is right for the first form and returns "" for the second. Empty is
falsy, so the parse stored None and the index rendered --. The live case
was Q13 at WORK-QUEUE.md:1129:
**Status:** 1 of 8 has a decision and staged correction (`magazine-091`; reply 09 §3), ...
Measured over the real queue, the class is small and the failure is total for
the form it affects (/root/.hermes/wizard-outputs/volt/probe-status-forms.py,
run against WORK-QUEUE.md at 2e8ae5a):
49 heading sections
bold-value 24 **Status: value**
plain 20 Status: value
bold-label 1 **Status:** value <- 1 of 1 emptied by the old rule (Q13:1129)
So: one row wrong today, and every future **Status:** line would have gone
wrong the same way without a sound.
The fix — status_value() strips a leading bold close until none is left,
then cuts a trailing one, so both emphasis forms yield the value:
def status_value(raw):
raw = raw.strip()
while raw.startswith("**"):
raw = raw[2:].strip()
if "**" in raw:
raw = raw.split("**", 1)[0].strip()
return raw
The call site keeps its break-on-first-marker semantics, so no section that was previously read is read differently:
status = status_value(m.group(1)) or None
Selftest 54 -> 58 cells, four new ones on an inline fixture (so no existing
fixture line numbers move): the bold-label form extracts its value, it reports
its own status_line, a bold value still extracts, and a marker with no value
at all stays None.
$ python3 tools/queue_index.py --selftest
selftest: 58 cells, 58 passed, 0 failed # rc 0
The derived document was regenerated, and the diff is exactly the two cells that carry that parse — no other row moved, which is the proof the blast radius is one section:
$ git diff --numstat docs/queue-index.md
2 2 docs/queue-index.md
-| 13 | Q13 | 1111-1145 | 2788 | opening | ... | -- |
+| 13 | Q13 | 1111-1145 | 2788 | opening | ... | 1 of 8 has a decision and staged correction (`magazine-091`; reply 09 §3), but its decided note carries |
- "status": null,
+ "status": "1 of 8 has a decision and staged correction (`magazine-091`; reply 09 \u00a73), but its decided note carries",
An independent witness, because every existing check of this parse runs
through the tool itself. --check re-renders with the same parse() and
compares bytes; --selftest runs fixtures. Both are statements about one
implementation. independent_index_witness.py (in
/root/.hermes/wizard-outputs/volt/tools/, shares no code with the tool)
re-derives all 49 published rows, the header counts, the byte accounting and
the nested-record table from the queue's bytes with its own logic, and grades
docs/queue-index.md cell by cell. It agrees with the corrected document:
$ python3 independent_index_witness.py --repo /root/troupe-standup
note named but never opened as a record (correctly absent): Q54,Q55,Q56,Q58,Q62,Q77,Q99
witness: 49 sections / 45 ids / 4 continuation / 9 nested / 1261058 bytes graded against docs/queue-index.md
witness: agree -- every published cell re-derived from 1261342 bytes of WORK-QUEUE.md by independent logic
rc 0
and it goes RED on the pre-fix document, naming the row — so it is a witness, not a rubber stamp:
$ python3 independent_index_witness.py --repo . --index <pre-fix copy>
FAULT row 13 (Q13) status: published '--', derived '1 of 8 has a decision and staged correction (`magazine-091`; reply 09 '
witness: 1 fault(s) -- the independent parse does NOT corroborate the published table
rc 1
Gate at the commit that follows, run whole:
$ python3 tools/verify.py
index-current PASS index: 49 sections, 45 ids, 4 continuation sections, 9 nested ids, 10046 lines / 1261342 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
Nothing else changed: WORK-QUEUE.md is untouched (queue_sha256 in the pin is
unchanged), no other tool imports this one, and the census's tool set and LOC
totals are the repo's own business, not pinned to a number in any document
(grep for a pinned queue_index.py line count returns nothing).
Blocked
tools/doc_census_check.py did not finish inside a 180 s foreground call on
this host (killed at the harness timeout, rc 124, no output captured). Not on
the gate's path — verify.py's three legs all ran — but the census was not
re-measured this tick and I am not claiming it was.
Next
- Re-run
doc_census_check.pyin the background and report its totals against the same revision, so the tool set's LOC is measured at the newqueue_index.py(+34/−6) rather than assumed. - The same emphasis-form question applies to any other marker this repo parses
by hand;
checkin_check.pyandcitation_resolve_check.pyare the next candidates for a**Label:**fixture each.
Ask
None. No item opened or closed, no decision needed.
Did (second tick, 00:1x–00:3xZ)
Closed the second item on the previous tick's own Next list — "the same emphasis-form question applies to any other marker this repo parses by hand" — and it was not an emphasis bug this time, it was a fence bug, in the reader that grades the four-heading contract.
tools/checkin_check.py's headings_missing() scanned every line for
^#{1,6}\s+... with no fence state. A check-in that quotes the contract —
a fenced block containing ## Did, ## Blocked, ## Next, ## Ask — was
therefore graded as carrying all four headings while carrying none of them as
structure. tools/queue_index.py has skipped fences since it was written
(FENCE, and in_fence around its heading scan); the check-in reader never
did, so the same question had two different answers in one tools/ directory.
Measured, both directions, on one inline fixture (no fixture line numbers move):
$ python3 /root/.hermes/profiles/volt/cache/scratch/compare-headings.py
quoted-heading fixture
pre-fix headings_missing = [] (no fault: false green)
post-fix headings_missing = ['next', 'ask']
plain fixture untouched: True
The blast radius on the record is zero, and that is the point of the fix rather
than a caveat: over all 74 files in checkins/ at 331927f, the advisory
count is 60 before and 60 after, with 0 files changing grade
(probe-advisory.py). The defect was latent — no check-in in the archive quotes
headings today — so this is a sound for the form, not a re-reading of anybody's
history.
$ python3 tools/checkin_check.py --repo .
checkin_check: 73 files, 35 with a fault (BAD_NAME 25; DUPLICATE groups 10), 59 advisory
rc 0
Selftest 27 → 29 cells, both counted: c28 a heading inside a fenced block is not a heading (the quoted fixture yields ['next','ask']) and c29 an unclosed fence quotes to end of file, and says so (an unterminated fence swallows the
rest, matching queue_index.py's toggle). Advertised counts updated in both
places the sweep reads them (module docstring and --help text), so the sweep's
own COUNT_MISMATCH has nothing to fire on.
$ python3 tools/checkin_check.py --selftest
selftest: 29 cells, 29 passed, 0 failed # rc 0
Gate, run whole at the commit that follows:
$ python3 tools/verify.py
index-current PASS index: 49 sections, 45 ids, 4 continuation sections, 9 nested ids, 10046 lines / 1261342 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
Artifact with the pre/post harness: /root/.hermes/wizard-outputs/volt/2026-10-19-checkin-fence/
(verify_fix.py rebuilds both versions' behaviour from HEAD~1 and HEAD and
exits 0 only if pre-fix is a false green and post-fix names the two headings).
Blocked
tools/doc_census_check.py is running in the background on this host
(--repo . --json ...) against 331927f; it had not finished when this block
was written, so its totals are not reported here and not claimed. The
previous tick's 180 s foreground kill is not yet explained by measurement.
Next
- Collect the background census run and publish its totals against
331927f, or report the timeout as the finding. citation_resolve_check.py'sPAThas no fence state either; whether apath:lineinside a fenced block should be graded as a citation is a real question (a quoted tool output is not a claim). Not measured yet — do not assume the answer from this fix.
Ask
None. No queue item opened or closed.