docs(parser): give Gate G's allowlist its owner, its rationale, and its exit condition - #5797
Merged
Conversation
…ts exit condition Ruling rider 1 on task #122. Gate G already enforced the exact-set property; what it did not do was say WHY each survivor is on the list, WHO closes it, or WHEN the gate retires. A ratchet whose entries carry no rationale decays into a blessing — the next reader sees a passing gate and a magic number, not a work-list. Each of the 16 permissive router calls is now enumerated with its file:line, its defect class, and the task that owns it (#123): - priority 0 / 1b (:3720,:3725,:3789) commit on Some(vec![]), which extract_granted_keyword_list returns on MTGJSON metadata ALONE — the parameterized Oracle line is never parsed. - the flashback split (:4673,:4682) is NON-ATOMIC: it advances when only one half parsed. - priority 8f (:5154) is the worst: Class-A, `i += 1; continue;` OUTSIDE both `if let Some` blocks, so an unparseable line is consumed with no keyword and no Unimplemented — and it dispatches on a bare alt((tag("kicker"), …)) with no word-boundary guard. - suspend/specialize/buyback/escalate/commander-ninjutsu/p13-residual/d20 (:5092,:5102,:5170,:5186,:5521,:5554,:5646) are advance-on-partial. - the two classifiers (:2161,:2167,:2205) gate ROUTING decisions on a permissive parse. Step 5 item 11: a classifier may probe with the STRICT parser; it may not call a helper that discards the remainder. DEFINITION OF DONE is now stated in the gate itself: entries are DELETED as each router entry converts, and when every EXPECTED_* reaches 0 this becomes the plain "no permissive symbol in a router context" gate Plan 02 step 7 actually asks for, taking SKILL.md §3a's migration-status paragraph with it. The down-drift failure message now names #123 and requires the floor to be lowered in the SAME commit, so a partial migration cannot land while the gate still advertises the old count. Exact-set property re-witnessed in BOTH directions after the edit: add a permissive call to a scratch oracle.rs (13 -> 14) => EXIT 1 migrate one away without lowering the floor (13 -> 12) => EXIT 1, names #123 restored => EXIT 0 oracle.rs byte-identical afterwards. No production code touched.
matthewevans
enabled auto-merge
July 14, 2026 08:19
Contributor
There was a problem hiding this comment.
Code Review
This pull request updates the scripts/check-parser-combinators.sh script to expand documentation on the parser-combinator ratchet mechanism, adding a detailed allowlist of permissive calls and clarifying instructions for task #123 when migrating entries to the strict parser. There are no review comments, and I have no feedback to provide.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ruling rider 1 on task #122. Gate G already enforced the exact-set property; what
it did not do was say WHY each survivor is on the list, WHO closes it, or WHEN the
gate retires. A ratchet whose entries carry no rationale decays into a blessing —
the next reader sees a passing gate and a magic number, not a work-list.
Each of the 16 permissive router calls is now enumerated with its file:line, its
defect class, and the task that owns it (#123):
extract_granted_keyword_list returns on MTGJSON metadata ALONE — the
parameterized Oracle line is never parsed.
half parsed.
i += 1; continue;OUTSIDE bothif let Someblocks, so an unparseable line is consumed with no keyword andno Unimplemented — and it dispatches on a bare alt((tag("kicker"), …)) with
no word-boundary guard.
(:5092,:5102,:5170,:5186,:5521,:5554,:5646) are advance-on-partial.
parse. Step 5 item 11: a classifier may probe with the STRICT parser; it may
not call a helper that discards the remainder.
DEFINITION OF DONE is now stated in the gate itself: entries are DELETED as each
router entry converts, and when every EXPECTED_* reaches 0 this becomes the plain
"no permissive symbol in a router context" gate Plan 02 step 7 actually asks for,
taking SKILL.md §3a's migration-status paragraph with it. The down-drift failure
message now names #123 and requires the floor to be lowered in the SAME commit, so
a partial migration cannot land while the gate still advertises the old count.
Exact-set property re-witnessed in BOTH directions after the edit:
add a permissive call to a scratch oracle.rs (13 -> 14) => EXIT 1
migrate one away without lowering the floor (13 -> 12) => EXIT 1, names #123
restored => EXIT 0
oracle.rs byte-identical afterwards. No production code touched.