Skip to content

Indic honorific vocabulary: the renunciate class, Devanagari and Bengali - #513

Merged
derek73 merged 6 commits into
masterfrom
claude/346-renunciate-vocab
Sep 7, 2026
Merged

Indic honorific vocabulary: the renunciate class, Devanagari and Bengali#513
derek73 merged 6 commits into
masterfrom
claude/346-renunciate-vocab

Conversation

@derek73

@derek73 derek73 commented Sep 7, 2026

Copy link
Copy Markdown
Owner

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, baba and lama move from the TITLES-only block into GIVEN_NAME_TITLES, with Devanagari स्वामी/गुरु/बाबा/संत and Bengali স্বামী/শ্রীল/গুরু/বাবা beside them (three overlapping lists, not one list in three scripts). Swami Vivekananda reads given Vivekananda, family "", where every release since 1.4.0 read family Vivekananda. rabbi and imam stay out — those traditions keep surnames, and Rabbi Cohen is pinned as the control. venerable stays in TITLES only, the traditions using it splitting on surname retention.

Trailing honorifics. rinpoche, जी, साहब, साहिब, साहेब, महाराज, সাহেব, বাবু, মহারাজ join SUFFIX_WORDS, spaced only. None is a honorific_tails entry: 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 Latin Md row in both the visarga and the period spelling; the Latin md entry'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 Saraswati and Guru Gobind Singh keep their families — and Md Abdul Karim does 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

derek73 and others added 5 commits September 6, 2026 22:14
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

codecov Bot commented Sep 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.66%. Comparing base (79160f3) to head (8f8ac6b).

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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>
@derek73 derek73 added this to the v2.3 milestone Sep 7, 2026
@derek73
derek73 merged commit 266154d into master Sep 7, 2026
11 checks passed
@derek73
derek73 deleted the claude/346-renunciate-vocab branch September 7, 2026 18:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

1 participant