Repository navigation
Conversation
…ily (#1237) A plain choice of mn with mn.toml's [rules] order, family first with the given name last, so the father's name a Mongolian name writes first is the family, as #1253's decision states. The genitive is not read into the patronymic view, and the choice of mn changes no reading. The default does not move. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hoice From review: the glued initial is divided by script_segment (rules/T8), not tokenize; the traditional-script example holds its U+202F; the JRC and ORCID figures name the population each recipe classifies; the Russian-name cost of the given-last order is recorded; contributing.rst and decisions/deviates-registry name the inert choice. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From the round-2 review of f0bfd08: O1 stands down under either declared order; the view is empty because R9's East Slavic rule reads a middle word, and FAMILY_FIRST_GIVEN_LAST puts the patronymic in given. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he in suggest_measure local_parliaments.DATASETS gains mn_parliament (126 members, each in Cyrillic, father's name first), so #1237's pack is measured from the cache. suggest_measure.py read each local corpus's raw.jsonl directly, which skipped local_corpora.load's checks and kept running on a parliaments cache fetched from fewer datasets; it now reads through load, and a stale or edited corpus stops the run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…script that settles none (#1237) Decided in coordination: the pack reads a name written wholly in Cyrillic family first with the given name last, and leaves a romanized name to the caller's order, since Mongolians mostly write their names given-first in Latin letters (65 of 87 two-word ORCID credits). Script.CYRILLIC joins the enum and the script table; the readers that mean the East Asian scripts (rules/T3's interpunct flank, the two-family-names run count, the segmenter's neighbour test) read _EAST_ASIAN_SCRIPTS, so a parser without the pack reads every name as before (the snapshot and the 16 local corpora match master). A Cyrillic word with a hyphen or apostrophe inside it classifies too. PolicyPatch.script_orders composes by script, so the pack adds its entry without erasing a caller's own; parser_for warns where two packs set one script differently. The entry orders a name and settles no lone word (rules/O5). rules/W4 gains the pack's Except, decisions/W4 the entry, and root AGENTS.md says Cyrillic does not mean family-first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
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.
Closes #1237. Refs #1253.
Adds
locales.MN, a Mongolian pack, the first leaf of #1253's decision (its first statement:familyis the name a convention files a person under).1.4.0 through 3.0.1, and the default still, read given
Батын, familyСүхээ.What the pack is
mnand mn.toml's new[rules]table,name_order = "family-first-given-last", so the father's name, which a Mongolian name writes first and passports file as the surname, is thefamily.Боржигин Батын Сүхээ) leaves the given name in place. The clan name itself is not read as one.mnchanges no reading (mn.toml'slamaand an exclusion are on by default); it is recorded so a strict parser reads mn.toml. Two choice tests assumed a non-empty surface, so_INERT_CHOICESexempts MN and a test holds its surface empty.Ц.Сандаг-Очир(Should a Mongolian choice read a glued father's initial as the family? (Ц.Сандаг-Очирgives given 'Ц.', family 'Сандаг-Очир') #1306) reads familyЦ., givenСандаг-Очир, by tokenize's full stop; not changed.ᠪᠠᠲᠤ ᠶᠢᠨ ᠰᠦᠬᠡ→ family the joined genitive, rules/T6). The default's reading of it is decisions/T6's open question, unchanged.Gate: measured before the code (2026-11-12, master 2b39f23)
Default against
FAMILY_FIRST, right wherefamilyis the father's name:mn_parliament, OpenSanctions 2026-11-06, read directly;opensanctions-parliamentsdoes not fetch it)creditnames with a family box, against that boxЦ.Сандаг-Очирgives given 'Ц.', family 'Сандаг-Очир') #1306) and 13 the given name and an initial (8 spaced).mnsample renderings (fictional) render every order: the per-pack view reads 19 of 24 by default and 15 of 24 under the pack, losing the given-first renderings.Ухнаагийн Хүрэлсүхgives given 'Ухнаагийн', family 'Хүрэлсүх') #1237's Wikidata label counts were not re-taken (the tool cache holds no Mongolian citizen).Recipes, the comparators and the collisions are in decisions/vocabulary-model's 2026-11-12 #1237 entry.
Decisions for the maintainer
Abiy Ahmed Ali,Ухнаагийн Хүрэлсүх,Бекмырза Чолпонбай уулу) #1253 allows one. I recommend against it for now, for three reasons:family. The one reading it adds alone, a romanized given-first name with the genitive last, appears in no cached source.-ynincludeMervyn King,Carolyn PorcoandKathryn Gustafson, and its-ийнones include the Bulgarian spellings of Madeleine, Gene and Dean.PatronymicRulemember and aPolicychange, in a file another worker is editing.Policy.script_orderscould say that ifScripthad a Cyrillic member, but it has none (_policy.pyagain), and rules/W4's licence is a script that settles the order, which Cyrillic, shared with Russian, does not. The pack ships the order Should a Mongolian choice read the father's name first? (Ухнаагийн Хүрэлсүхgives given 'Ухнаагийн', family 'Хүрэлсүх') #1237's option 1 and Where does a father's name go when the name has no family name? (Abiy Ahmed Ali,Ухнаагийн Хүрэлсүх,Бекмырза Чолпонбай уулу) #1253's decision name.Suhee Bataagiin→ familySuhee).Uyanga B.→ familyUyanga), which the default reads right and reports as anorderambiguity: 8 spaced among ORCID's 150, against 2 with the initial first.Сидоров Иван ПетровичgivenПетрович, whereFAMILY_FIRSTreads givenИван; and underparser_for(locales.MN, locales.RU)the patronymic lands ingiven, where R9's East Slavic rule (which reads a middle word) does not see it, so no patronymic is read. Neither the clan-name shape the order was chosen for nor this one is measured; your call whetherFAMILY_FIRSTis the better default.ᠪᠠᠲᠤ ᠶᠢᠨ ᠰᠦᠬᠡ) reads the suffix as a middle name, as the default does; with U+202F it joins (rules/T6).Ноён(Mr.) is no listed title: a vocabulary candidate, not filed.Sweeps under the pack
Батын, Сүхээ,Сүхээ, Батын,, Сүхээ).Др. Батын Сүхээ,Dr. Bataagiin Suhee,Батын Сүхээ Jr.andBataagiin Suhee, PhDread the father's name as the family.Policy.lone_name_word=Role.FAMILYon the base reads it family.Дорждэрэмийн,Khürelsükh).Parser.revisekeeps the family. No view fills.parser_for(locales.MN, locales.RU)declares the order, soСидоров Иван Петровичreads givenПетрович(O1's scope: a declared family-first order stands).MN+TR_AZandMN+VIread by the order too.strict=Truereads the same names alike;Lamastays a title.PolicyPatch.initials_as_family, a military reading'ssame_as), as every 3.1 pickle is. A hand-builtLocaleof the same data parses alike there.Батын Сүхээ/Сүхээ Батынconflicts under the pack as it does by default;across-rolesdoes not reach a two-word swap.Б. Сүхээis consistent with the full name only withfamily-initialaccepted.Батын/Бат(genitive against nominative) conflict: a candidate, not filed.tools/differential/snapshot.py→ no reading moves; the snapshot gains one row, O4's new example read by default.snapshot.py --local <each> --base <master 2b39f23d checkout>→matches the basefor all 16 local corpora (ctgov-officials, cz-candidates, dof-signatures, fec-individuals, govuk-people, jrc-names, nepal-candidates, opensanctions-parliaments (re-run on the refreshed cache), orcid-researchers, patentsview-inventors, psc-individuals, tse-donors, tw-donors, uit-vinames, ukec-individuals, vn-assembly).Also in this PR
tools/differential/cldr_agreement_locales.jsongains MN's record, and nothing else moved in the re-record.docs/contributing.rstand decisions/deviates-registry record the inert choice.docs/policy.rststill names onlyvias settingFAMILY_FIRST_GIVEN_LAST; that file belongs to another in-flight PR, so it is left alone.feat(#1237)case rows. Each was checked against the 1.4.0 and 3.0.1 wheels, and each fails on master (nolocales.MN).[mn]example.~/.cache/nameparser-tools/local/opensanctions-parliamentswas refreshed: it held 17 datasets, which the tools now refuse, and now holds 23 (24,066 names).Checks
uv run pytestwith thejaextra: 46,040 passed. Without it: 46,008 passed. Python 3.15 in its own environment: all passed apart from the corpus test the rules-corpus rebuild then fixed.uv run pytest -n0 -m serial: 35 passed.uv run mypy,uv run ruff check,tools/vocab/build.py --check: clean.sphinx-build -b doctest docs,sphinx-build -W -b html docs,python -m doctest README.rst: clean.Reviews
Each review ran as a subagent in its own detached worktree on the pushed head (b4aee8e), with a read-only master checkout beside it.
Enkhtaivan Erdenecited as written family-first, though its boxes say given-first. #1237's option 1 misquoted (it namedfamily-first). The JRC "9 of 9" and "Latin and Greek" overstated what the recipe classifies. "Three in four" taken from the wrong population. The spaced-initial and population counts did not reproduce (8, not 6). The traditional-script example had lost its U+202F.given. Everything else re-verified (ORCID and JRC counts over the stated filters, the U+202F, T8's division, the snapshot row, the doctest and prose, the new tests' mutations).🤖 Generated with Claude Code