Follow-up to #933 / PR #934. These late P2 findings came in on the frozen merge head 59ee5411. They are deferred under the freeze rule (after one material correction wave, only P0/P1/security findings reopen the head). The live contract and ledger pass the guard, so none of them hides drift today. Each one is a hardening gap in scripts/check-r15-gate-status.mjs.
Findings to address
- Strict block grammar (Codex P2, cubic P2): the canonical
R15_GATE_STATUS block is token-scanned, so R15_GATE2=IMPLEMENTED_HEADLESS BROKEN or a standalone garbage line passes. Parse the block line by line: each line must be exactly R15_GATE<id>=<STATUS>, with no other content.
- Fences before comments (Codex P2): HTML comments are removed before fence state is evaluated, so a literal unterminated
<!-- inside a valid fence swallows the rest of the document. Evaluate fences first and strip comments only from non-fenced prose.
- Coordinated gate lists (Codex P2, cubic P2):
Gates 4 and 3 are not admitted resolves only Gate 4. Expand Gates N(, N)* (and|or) N lists.
- Duplicate + invalid status (cubic P2):
entryProblem stops at the duplicate check, so an invalid status on a duplicate entry is never reported. Report every applicable problem.
Acceptance
- One regression test per item in
tests/unit/checkR15GateStatus.test.ts.
pnpm docs:check stays green on the live documents.
- No change to the protected merge-admission evaluator files.
Follow-up to #933 / PR #934. These late P2 findings came in on the frozen merge head
59ee5411. They are deferred under the freeze rule (after one material correction wave, only P0/P1/security findings reopen the head). The live contract and ledger pass the guard, so none of them hides drift today. Each one is a hardening gap inscripts/check-r15-gate-status.mjs.Findings to address
R15_GATE_STATUSblock is token-scanned, soR15_GATE2=IMPLEMENTED_HEADLESS BROKENor a standalone garbage line passes. Parse the block line by line: each line must be exactlyR15_GATE<id>=<STATUS>, with no other content.<!--inside a valid fence swallows the rest of the document. Evaluate fences first and strip comments only from non-fenced prose.Gates 4 and 3 are not admittedresolves only Gate 4. ExpandGates N(, N)* (and|or) Nlists.entryProblemstops at the duplicate check, so an invalid status on a duplicate entry is never reported. Report every applicable problem.Acceptance
tests/unit/checkR15GateStatus.test.ts.pnpm docs:checkstays green on the live documents.