Repository navigation
Migrate the S rules (S1–S9) to the skeleton format (#761, part 8) - #783
Merged
Merged
Conversation
… format M3's statement that S1 takes a marker-led clause first stands as a Precedence bullet. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n format The comma's two exceptions (C5, C11) stand as Precedence bullets; the script clause stays in a Then bullet, having no example by design. The _vocab.py citation chains its two quotes, the chunk rule's exception now being an Except bullet. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…on format The evidence that outranks the count (S5, S6 with C4, S7) stands as Precedence bullets. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he skeleton format The never-given particle opening the part and a particle in front of the word stand as Except bullets; P6's reading of the member that is also a particle stands as a Precedence bullet. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The first slot after a family comma, where the count decides first, and C4's capitals exception stand as Precedence bullets. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… format The title-run word that speaks for nothing stands as an Except bullet; the company's rank over the count, the case and P6's attachment stands as Precedence bullets. The maiden-clause clause stays in a Then bullet, no example of it being written. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The particles P6 attaches out of the given part stand as an Except bullet. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the skeleton format The comma's two exceptions to the dotted shape (C5, C11) stand as Precedence bullets. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the skeleton format The map becomes the bullets under Then. The opening-the-string and family-comma boundaries, the order against P3, P2 and P5, H3's floor, and the order among the sub-rules that their own texts state (S3, S4 with S5-S7, S7 with S8) stand as Precedence bullets. The title chain's history moves to a dated decisions/S2 bullet. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The descriptive note they name left rules/S2 in its skeleton migration for a dated decisions/S2 bullet. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…review) S1's When said a bracketed clause follows a name; the rule fires wherever one stands (`Andrew (MBA) Perkins`). S3's switched-off Msc.Ed. row shows Then holding, so it leaves the Except fence. S2's first Accepted bullet named "this clause", which lost its referent when the never-opens-the-string sentence became a Precedence bullet. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #783 +/- ##
=======================================
Coverage 99.05% 99.05%
=======================================
Files 47 47
Lines 4642 4642
=======================================
Hits 4598 4598
Misses 44 44 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
S8 gains a Precedence bullet: an ambiguous acronym written with its periods starts the credential run, S3 making it unambiguous (`John Smith M.A. Jones`); scoped to the periods. S6's first-slot Precedence lead says "a comma", as S4 does and the parser reads (`John Smith, Ma`). No behavior moves; dated decisions bullets record both. Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 20, 2026
Part of #761. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
derek73
added a commit
that referenced
this pull request
Oct 21, 2026
…retired-ID guard (#761 follow-up) (#788) * Quote the bullet a citation comment names (#761 follow-up) Fourteen comments named a rule's Except or Accepted bullet by description and quoted nothing, so test_doc_citations could not check them. Each now quotes the bullet (an Except bullet by its whole bold lead, which bullet_lead_findings holds it to) beside its rule ID, says which clause the code implements or pins, and points at the decisions entry. Two named the wrong bullet: test_parser.py's 'M2 Accepted row' is M2's Except bullet on post-comma text, and test_pieces.py's 'no-comma peel's Accepted limit' is S7's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add the Except-fence check to the design review's axis 3 (#761 follow-up) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Refuse a rule file that reuses a retired rule's ID (#761 follow-up) PR #786 replaced the tombstone with 'A retired rule's decisions entry records the retirement', which left 'never reused' unenforced. A retired rule's decisions file now carries a line opening 'Retired:', and test_no_rule_reuses_a_retired_id refuses a rule file with that ID. The reader lives in tests/v2/design_docs.py. A misspelled Retired line and one in a file keyed by no rule ID are findings too, since either would switch the refusal off silently. No rule is retired yet, so the real-tree test refuses nothing; test_a_rule_file_reusing_a_retired_id_is_refused builds a synthetic decisions file and a rule file reusing its ID and is the negative control (it fails with the ID check disabled, measured). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Address the design-docs review (#761 follow-up) - test_properties: drop the two maiden-clause pairs said to differ; measured, both spellings of each read alike since #601, and M2's bullet the new citation quoted accepts no such split. - _extract: the M3 contrast is a suffix word ('née PhD'), not V, which M2 also reads as the maiden name. - Retired: a numbered '1. Retired:' line is a misspelling too (the new row failed against the old pattern first). - docs/design/AGENTS.md axis 3: two incidents on the record (H1 in #779, S3's Msc.Ed. row in #783), not three; a row Then decides may belong under Accepted. The skip list names the new guard. - cases.py: shape 7's U+00B7 half is what the W4 Except decides. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.
Part of #761.
This PR moves S1–S9 from the block format to the skeleton format, one commit per rule. S10 already was. It is the last section. After it, a final PR retires the block format, its parser branch and axis 13.
No rule changes meaning, and every example line is kept verbatim. Each rule's example multiset matches master,
corpus_rules.jsonldoes not move, and the suite, mypy and ruff pass. Each commit re-records its rule's row oftests/v2/rules_budget.json.Growth worth a look
S2 (a suffix word ends a name and never opens the string), the hub, grows from 357 to 586 counted words. Almost all of it is new Precedence bullets. These collect the order among S3–S10 that their own texts already state, the way C1 did:
The bullets also hold what S2's own statement said about opening the string, the family comma, the ordering against P3/P2/P5, and H3's floor. The title chain's history moves out of the rule into a dated decisions/S2 bullet. That history is how
Dr King Jrused to read, and theDr Smith Jrcontrast.Decided
Derek answered the four questions on 2026-10-20 ("i agree with your recommendations"). None of these moves a reading.
S3 (credentials written with interior periods) against S8 (the credential's trailing run): S3 wins. On
John Smith M.A. Jones, S8 said a member of the ambiguous class never starts the run, and S3 said a word written with its periods counts unambiguously. The parser already read suffixM.A. Jones. Derek: "writing periods makes it unambiguously not a name". S8 now has a Precedence bullet saying so, scoped to the periods. Capitals alone still do not start the run (John Smith MA Jonesreads middleSmith MA). That case, and the report onJohn Smith MA PhD, → Should capitals in a mixed-case name settle a credential the way periods do? #785. A dated bullet in decisions/S8 records the decision.S10 (the trailing roman numeral) against S8: no change here → Should
John Smith VI MDread likeJohn Smith III MD? #784. The run start asks the vocabulary, so a listed numeral starts the run and a numeral read by shape alone does not:John Smith III MDreads suffixIII MD.John Smith VI MDreads familyVI, suffixMD.The issue will also ask why the numerals are recognized two ways.
S6 (the case signal at the suffix slot): "a comma", not "a family comma". S6's first-slot Precedence lead now says what S4 says and what the parser does:
John Smith, Mareads suffixMa. A dated bullet in decisions/S6 records the change.Two clauses stay without examples, by decision. No corpus rows are added for shapes nobody types:
Jane PhD nee Smith Ma.Old
interacts:IDsCode comments
nameparser/_pipeline/_vocab.py: S3's chunk-rule citation now chains two quotes, since the single-character exception became an Except bullet.tests/v2/cases.py: two notes point at decisions/S2's new bullet.No other code quote moved.
Review
The docs-review agent ran (axes 1–13). It found nothing high-severity and three low findings: S1's When was too narrow, an S3 Except row showed Then holding, and an S2 Accepted bullet's "this clause" had lost its referent. All three are fixed in c7c177c, and the reviewer re-checked that commit. Its fourth finding is Decided item 3. Derek's decisions landed in a later commit, which the reviewer also checked.
🤖 Generated with Claude Code