R-426: one-register reads the leading verdict; decoys added, exemption removed
DONE/IDEA were searched over the whole state cell, so an open ROADMAP row whose state named ANOTHER row's verdict (`READY — split out after R-86 CLOSED`) escaped as shipped — R-87's shape from R-378, one file over. The gate now reads register_table.leading_verdict(state); all 28 current rows classify unchanged. Decoys: that shape (seen to PASS against the old gate), an id present in the register only as prose (seen to PASS when `have` is loosened to any mention), the existing suffix-id row; genuine: a row with a counterpart, and an `idea` row asserted BY DESIGN — R-424's hole, accepted by the operator 2026-10-05. EXEMPT drops `felhom.eu/one-register`. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -21,7 +21,8 @@ WHAT THIS GATE CANNOT SEE — the residual holes, named rather than implied:
|
||||
|
||||
1. **A finding filed with the state `idea` escapes.** The state column is a human judgement, and a
|
||||
defect written under `idea` looks exactly like a proposal to this gate. It is the same shape as
|
||||
the problem it fixes, one level up.
|
||||
the problem it fixes, one level up. **Accepted by the operator 2026-10-05 (R-424, closed): no
|
||||
mechanical fix exists; a person reads the roadmap.** test_gate_decoys.py asserts it BY DESIGN.
|
||||
2. **A finding written in prose with no `R-` identifier escapes entirely.** This gate matches ids.
|
||||
A survey that enumerates a gap and never numbers it is invisible here — that is the previous
|
||||
session's sweep territory and the PROMPT-TEMPLATE rule "an enumerated gap becomes a row".
|
||||
@@ -45,8 +46,9 @@ ROADMAP = os.path.join(ROOT, "documentation", "backlog", "ROADMAP.md")
|
||||
REGISTER = os.path.join(ROOT, "documentation", "backlog", "OPEN-ITEMS.md")
|
||||
|
||||
ROW = re.compile(r"^\|\s*\*{0,2}R-(\d+[a-z]?)\*{0,2}\s*\|") # 2026-10-03: a suffix id (R-27b, R-27c, R-50b) was skipped unchecked
|
||||
# DONE and IDEA are matched against the row's STATE cell only, never the whole row: the body of a
|
||||
# finding routinely contains the word "shipped" while describing something else.
|
||||
# DONE and IDEA are matched against the LEADING VERDICT of the row's STATE cell only, never the whole
|
||||
# row (the body of a finding routinely contains the word "shipped" while describing something else) and,
|
||||
# since 2026-10-06, never the whole cell either (a state can name another row's verdict).
|
||||
# BANKED and PROVEN-LIVE are this project's own done-words and were found by running the gate: a row
|
||||
# reading "BANKED in full" or "first slice PROVEN-LIVE" is shipped work, not an open finding.
|
||||
DONE = re.compile(r"\b(SHIPPED|CLOSED|KILLED|DONE|SUPERSEDED|OBSOLETE|WITHDRAWN|MERGED|DISCHARGED|"
|
||||
@@ -77,10 +79,15 @@ def main():
|
||||
have = set(rid for rid, _, _ in rows(REGISTER))
|
||||
offenders, ideas, done, ok = [], 0, 0, 0
|
||||
for rid, state, line in rows(ROADMAP):
|
||||
if DONE.search(state):
|
||||
# R-426 (2026-10-06): the LEADING VERDICT of the state cell, not the whole cell — R-378's lesson,
|
||||
# one file over. A cell reading `READY — split out after R-86 CLOSED` matched DONE on the other
|
||||
# row's word and the open finding escaped as shipped (and `READY — was an idea` would escape as
|
||||
# an idea). Decoy: test_gate_decoys.py `one-register/done-word-about-another-row`.
|
||||
verdict = register_table.leading_verdict(state)
|
||||
if DONE.search(verdict):
|
||||
done += 1
|
||||
continue
|
||||
if IDEA.search(state):
|
||||
if IDEA.search(verdict):
|
||||
ideas += 1
|
||||
continue
|
||||
if rid in have:
|
||||
|
||||
Reference in New Issue
Block a user