Indic honorific vocabulary: the renunciate class, Devanagari and Bengali - #513
Merged
Conversation
The four renunciate titles were in the TITLES-only block, so
rules.md#H1 familied the one name word behind them: "Swami
Vivekananda" read family 'Vivekananda' with no given name at every
release since 1.4.0. rules.md#H's Background has stated the criteria
since the docs landed -- membership in the given-name-title list
follows HOW THE TITLE ADDRESSES, and whether an empty family is
correct output follows SURNAME RETENTION -- and renunciation answers
both at once. So they move, and "Swami Vivekananda" reads given
'Vivekananda', family ''.
rabbi and imam stay out: those traditions keep surnames, and the
control row surname_retaining_title_keeps_the_family pins "Rabbi
Cohen" at family 'Cohen'. venerable stays in TITLES only -- Buddhist
monastics drop the family name, Anglican archdeacons and Catholic
candidates keep it, and this set has no way to say "sometimes".
Four corpus names move, all from the radar-tier corpus_issues.jsonl
and all the same way: 'Swami Vivekananda', 'Guru Nanak', 'Baba Ramdev'
and 'Lama Zopa'. The boundary holds and is pinned by the ledger's
_MUST_NOT_MATCH probes -- 'Swami Vivekananda Saraswati' and 'Guru
Gobind Singh' keep their family names, H1's fold needing exactly one
name word -- and 'Md Abdul Karim' does not move. TITLES membership is
unchanged: TITLES is GIVEN_NAME_TITLES | {...}, so the words only
changed which side of the union they enter from.
Gate: 364 / 258 / 170 / 32 intentional at 1.4.0 / 2.0.0 / 2.1.0 /
2.2.0, 0 unexplained, 0 radar unclassified.
Closes #346
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Nine entries join SUFFIX_WORDS: Latin rinpoche, Devanagari जी, साहब, साहिब, साहेब, महाराज, and Bengali সাহেব, বাবু, মহারাজ. They ride the spaced suffix-word path that serves 氏/殿/님 today, so no code moves. "नरेन्द्र मोदी जी" reads family 'मोदी', suffix 'जी'; "Lama Zopa Rinpoche" reads title 'Lama', given 'Zopa', suffix 'Rinpoche' -- the suffix takes the third word out of the name, which is what leaves SPACED ONLY. None of the nine is a GLUED_HONORIFICS entry and none may become one. जी was already a standing prohibition and the reason generalizes to the set: Banerjee, Mukherjee and Chatterjee are written बनर्जी, मुखर्जी, चटर्जी, and a glued peel strands बनर् on a bare virama. That is the 殿 criterion in a non-CJK script. The cost is that गांधीजी stays unpeeled, and it is the correct trade -- an unrecognized honorific costs one field, a strand cuts a real family name in two. Both shapes are pinned. Bengali বাবু is TRAILING (অমল বাবু) where Devanagari बाबू is a leading title. Different codepoints, so the two cannot interact; the divergence is stated in both wordlist comments so a sweep does not harmonize them. Gate unchanged: 364 / 258 / 170 / 32 intentional, 0 unexplained, 0 radar unclassified. No corpus name moves under this commit. Refs #344, refs #343, refs #346 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Nineteen civil honorifics join TITLES beside the श्री/श्रीमती/डॉ that shipped with #269, and four renunciate ones -- स्वामी, गुरु, बाबा, संत -- join GIVEN_NAME_TITLES, which puts them in TITLES too. "डॉक्टर शर्मा" reads title 'डॉक्टर', family 'शर्मा'; "स्वामी विवेकानंद" reads given 'विवेकानंद' with an empty family, the same fold the Latin renunciate commit opened. "स्वामी शिवानंद सरस्वती" keeps family 'सरस्वती' -- H1's fold needs exactly one name word -- and that boundary is pinned. No Latin transliterations: Sri, Pandit, Sant and the rest collide with real given names where the native script cannot, which is the sri/shri precedent this block's own comment already states. They belong to the opt-in packs of #345. महात्मा is civil, not renunciate: it addresses by surname ("महात्मा गांधी"), so TITLES only. महाराजा is the LEADING spelling; trailing महाराज is a suffix word from the previous commit. बाबू is leading in Hindi where Bengali বাবু is trailing -- different codepoints, and both wordlist comments say so. कुमारी, बेगम, शेख, आचार्य, राजा/रानी and ठाकुर are deliberately not shipped; the records commit puts each one's reason in decisions.md. Gate unchanged: 364 / 258 / 170 / 32 intentional, 0 unexplained, 0 radar unclassified. No corpus name moves under this commit. Closes #344 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The first Bengali vocabulary in the default lexicon. Twenty-five civil honorifics join TITLES and four renunciate ones -- স্বামী, শ্রীল, গুরু, বাবা -- join GIVEN_NAME_TITLES, which puts them in TITLES too. Three shapes are pinned. "ড. মুহাম্মদ ইউনূস" reads title 'ড.', given 'মুহাম্মদ', family 'ইউনূস': a one-letter-plus-period Bengali abbreviation is is_initial-shaped and the vocabulary wins, which is the fork #343 asked about -- while "র. কে. নারায়ণ", real initials with no entry behind them, is unchanged. "মোঃ আবদুল করিম" reads title 'মোঃ', given 'আবদুল', family 'করিম', the mirror of the Latin Md row; the visarga spelling and the মো. period spelling both match: the visarga ঃ (U+0983) is a spacing combining mark the lookup fold never touches, the fold stripping only edge periods and whitespace, while the period comes off through that same edge-period normalization. The women's মোসাঃ/মোসা. pair ships the same way. "স্বামী বিবেকানন্দ" folds like its Latin and Devanagari twins. মোঃ/মো and মোসাঃ/মোছাঃ are name prefixes rather than titles semantically. TITLES is the functional home because `given` must stay the name the person is addressed by -- মোঃ আবদুল করিম is called আবদুল করিম -- and the parser has no name-prefix field. The bound-given-name set is the wrong home: Arabic abdul is an inseparable half of one name, মোঃ is detachable. rules.md#H2's Accepted clause keeps its claim and loses its example. The clause says an unlisted abugida honorific stays a name word because the shape rule cannot see an unbroken letter run through combining vowel signs; that is still true, but its example used প্রফেসর, which this commit lists. The example is now "প্রকৌশলী. Sen" -- Engineer, a word this bundle deliberately does not ship -- and corpus_rules.jsonl is regenerated. The example is a CONTRACT-tier corpus name, so the swap belongs in this commit rather than in the records commit: leaving it would exit the gate 1 here. ঠাকুর (Tagore), কুমারী, বেগম and শেখ are deliberately not shipped; the records commit puts each one's reason in decisions.md. Latin transliterations wait for #345. Gate unchanged: 364 / 258 / 170 / 32 intentional, 0 unexplained, 0 radar unclassified, corpus sizes unchanged. Closes #343 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The #indic-honorifics entry carries the bundle's decisions in the doc's own shapes: the two criteria applied (membership follows how the title addresses, an empty family follows surname retention); venerable left in TITLES only and deliberately NOT an Excluded entry, the traditions splitting on surname retention; Rinpoche postpositional and the Tibetan prefix titles deferred to a follow-up; the Latin md history corrected, so the record stops implying md was added for Muhammad; মোঃ's functional home argued; and the visarga and edge-period storage rules with the one-liner that recomputes each. Every number carries its recipe. The three Open pointers (#346, #343, #344) leave the contested- membership block, which now holds #342 alone. The जी standing prohibition generalizes to the whole spaced trailing set the bundle shipped, keeping the Banerjee evidence as the reason and गांधीजी as the accepted cost. Six entries join Excluded (TITLES) beside ঠাকুর: ठाकुर, कुमारी/কুমারী, बेगम/বেগম, शेख/শেখ, आचार्य and राजा/रानी, each with the position the collision sits in. docs/locales.rst now says seven scripts and states what each ships; tests/v2/test_locales.py's #269 section header names Devanagari and Bengali. The 2.3.0 release notes gain an Additions section, one bullet per script plus the renunciate/Rinpoche bullet, with the moved names read off the gate's classified summary. rules.md#H2's example moved in the Bengali commit, not here, that example being a contract-tier corpus name. Refs #346, refs #344, refs #343 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #513 +/- ##
=======================================
Coverage 98.66% 98.66%
=======================================
Files 45 45
Lines 3232 3232
=======================================
Hits 3189 3189
Misses 43 43 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Three review agents on the whole PR. The inert ঠাকুর rows become a leading-position pair that reddens if the exclusion is broken; the বাবু/बाबू split, the संत/Sant asymmetry, the Latin two-name boundary and the Guru Dutt collision are pinned; the ledger guard gains the left-anchor probe. Prose: rabbi/imam fail the ADDRESSING criterion (Rabbi Cohen addresses by title), not the retention one; the two-entries-per-abbreviation rule is scoped to Bengali; Latin most already ships; the locales.rst per-script coverage sentence was false for Cyrillic, Greek and Hebrew and now says which script ships what; the six Excluded Indic words are noted in the wordlist blocks where a sweep meets them. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This was referenced Sep 7, 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.
One vocabulary bundle in which each class is decided once and each script's membership is then argued word by word. No parser code changes: four existing forks carry the whole thing, and all four were confirmed on the pre-bundle tree with a throwaway
Lexicon.default().add(...)override before any wordlist was edited.The renunciate class.
swami,guru,babaandlamamove from the TITLES-only block intoGIVEN_NAME_TITLES, with Devanagariस्वामी/गुरु/बाबा/संतand Bengaliস্বামী/শ্রীল/গুরু/বাবাbeside them (three overlapping lists, not one list in three scripts).Swami Vivekanandareads givenVivekananda, family"", where every release since 1.4.0 read familyVivekananda.rabbiandimamstay out — those traditions keep surnames, andRabbi Cohenis pinned as the control.venerablestays in TITLES only, the traditions using it splitting on surname retention.Trailing honorifics.
rinpoche,जी,साहब,साहिब,साहेब,महाराज,সাহেব,বাবু,মহারাজjoinSUFFIX_WORDS, spaced only. None is ahonorific_tailsentry: Banerjee/Mukherjee/Chatterjee end in theजीsubstring, so a glued peel would cut a real family name in two, andगांधीजीstaying unpeeled is the accepted cost.Devanagari and Bengali honorifics. Nineteen Devanagari and twenty-five Bengali civil honorifics, plus the renunciate sets.
ড. মুহাম্মদ ইউনূসreads titleড.— the vocabulary beats the initial reading — whileর. কে. নারায়ণis unchanged.মোঃ আবদুল করিমmirrors the LatinMdrow in both the visarga and the period spelling; the Latinmdentry's 2015 origin (the degree, #32) is now recorded so the record stops implying it was added for Muhammad. No Latin transliterations: they collide with real given names where the native scripts cannot, and belong to #345.Measurement. Four corpus names move, all under the renunciate fold, all from the radar-tier
corpus_issues.jsonl:Swami Vivekananda,Guru Nanak,Baba Ramdev,Lama Zopa. The multi-name spellings do not —Swami Vivekananda SaraswatiandGuru Gobind Singhkeep their families — andMd Abdul Karimdoes not. Gate: 364 / 258 / 170 / 32 intentional at 1.4.0 / 2.0.0 / 2.1.0 / 2.2.0, 0 unexplained, 0 radar unclassified. Every commit is green on its own.rules.md#H2's executable example moved offপ্রফেসর(which this bundle lists) toপ্রকৌশলীin the Bengali commit rather than the docs commit, that example being a contract-tier corpus name.Closes #346
Closes #344
Closes #343
🤖 Generated with Claude Code