Repository navigation
Add ParsedName.patronymic, the words naming the bearer's parent (3.0, 4c) - #948
Merged
Merged
Conversation
… 4c) A patronymic particle the shipped vocabulary holds (bin, binti, ibn, bint, bar, bat and the native-script forms) and the words after it in its field read `patronymic`, and so do a middle word carrying the East Slavic ending and a Turkic marker with the name before it, wherever RU or TR_AZ turns the rule on. The view is a render key, not a field: family and middle keep the words. Classify tags the particle's kind from the reading index and assemble drops the tag, so 2.x pickles still compare equal. rules/R9, decisions/R9; the snapshot and the agreement records gain the view. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
P6's attachment and O3's fold both write the folded mark, so the attached particle is now told by its shape, not its field. A Turkic father is read only once its marker reads as a name word, and the arm reads the maiden name as the particle arm does. The user docs no longer say the ending rules fill the view under every order. Each clause the review found untested has a test, a benchmark row guards the opt-in arms, and R9 records the accepted shapes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…(4c) The attachment was inferred from the folded mark's shape, which lost the family behind a second attached particle (Bakar, Ali bin Abu) and read a particle P6 declined and O3 folded as attached (Rahman, Al bin). P6 now marks what it attaches, assemble drops the mark, and a word P6 attached stands as the family under the fold. A Turkic father is built once, at its marker. An invariant grid holds middle_as_family to the default's patronymic wherever R2 reads alike; R9 records the cases it does not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Behind an empty head P6 attaches the particle as the whole family; O3's
fold gave it a base, and it read as an attached patronymic alone
(', Siti Aminah binti' under middle_as_family). An attached particle
now needs a family word not folded, the condition the shape test held.
The stage headers and mechanisms.md name the attached tag; the grid
test says what it cannot see. Third review fixes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A generator resumed a frame per word. Rows for an empty head under FAMILY_FIRST_GIVEN_LAST, behind a nickname-only head and before a third comma part; R9 shows the empty-head attachment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 31, 2026
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.
Sub-phase 4c of #754: the
patronymicview, rules/R9 (the patronymic view), decisions/R9.What it does
ParsedName.patronymicholds the words read as a patronymic, in whatever field the parse put them.familyandmiddlekeep those words.render()key. It is not inas_dict(),--json,comparison_key()or the repr.Token.readingtakesReadingKind.PATRONYMIC, which 4a added and nothing used until now.Lexiconfield, and no new field on any pickled type.Decisions the spec left open
patronymic. The view is the tokens of that kind, and its text has to bebin Mohamad.vocabulary, and its files arear msforbin.positionand names no file.ibn Ali Hasangivesibn Ali Hasanby default andibn Aliunder a family-first order, matching the family.middle_as_familythe run follows the field the word stands as.Mohamad, Mahathir bingivesbin Mohamad, in the family's order. P6 marks the words it attaches (vocab:attached, a private tag dropped at assemble likevocab:patronymic), so the attachment is recorded rather than inferred from the folded mark that O3's middle fold also writes.Bakar, Ali bin Abugivesbin Abu Bakar, and the exception holds undermiddle_as_familywithout misreading a particle P6 declined (Rahman, Al bingives nothing). An attached particle names a parent only where the family holds a word P6 and O3 did not fold, so one P6 attaches as the whole family behind an empty head (, Siti Aminah binti) reads nothing under any policy.Fritz Freiherr und von Baras patronymicBar(the German family name, spelled like the Hebrew particle). The snapshot showed it._vocab.is_patronymic_particlecalls_reading_index.holds_kind. It ignores the reading'sdefault.vocab:patronymictag is dropped from published tokens. A 2.8.0-wheel pickle ofMahathir bin Mohamadis a new fixture, and it compares equal.benstays out: the vocabulary excludes it as a patronymic.binread as a given name used to nameparticle as familyas its alternative. It now namespatronymic as family(_vocab.particle_reading, at both of assign's particle alternatives).Roman Abramovichis a surname.Aliyev, ogluandoglu Aliread nothing. The father's name is read only once its marker reads as a name word, so a marker a caller lists as a connective reads nothing._post_rulesto_vocabashas_patronymic_ending/is_patronymic_marker. The rotations and assemble ask the same predicates, and the packs' hand copies are pinned against them there.-ївнаending.Measured (2026-10-29, against a9884bf)
Snapshot
patronymickey. Each is a particle's run.bin Stromae Elizabeth Windsor Maria Teresa MPunder FAMILY_FIRST, fromparticle as familytopatronymic as family.Agreement records
cldr_agreement.pynow scorespatronymicon its own, as itsPENDING_ROLESwere written to do once the attribute existed.-ївна.bin.Frames per parse (
sys.setprofile, re-taken after the review fixes)John Smith(153).Mohamad, Mahathir bin263 → 272,Bakar, Ali bin Abu289 → 298).John Smith153 → 156,Ali Ahmad Vali oglu243 → 251). Guarded by a newpatronymic_rulesrow intest_benchmark.py's_POLICY_SHAPES.Checks
uv run pytest: 32,880 passeduv run pytest -n0 -m serial: passeduv run --python 3.15 pytest: passedmypy,ruffandtools/vocab/build.py --check: cleanThe comma shapes, all three orders and the bound-given interaction (
Abdul Rahman bin Ahmad) are swept intest_types.pyand R9's examples, and a grid invariant holdsmiddle_as_familyto the default policy's patronymic words wherever R2 reads the particles alike (it guards the attached word standing as the family under the fold; the D2 and empty-head shapes, whose R2 marks differ, are held by explicit rows).test_cases.py's view walk now also holds that the patronymic names only words of given, middle and family.🤖 Generated with Claude Code