Repository navigation
Keep the titles 2.6.0 listed in v1's Constants().titles (#752) - #904
Merged
Merged
Conversation
Phase 2j moved titles that are also given names (king, mahdi, wing, ...)
out of TITLES into the phrase-only TITLES_AMBIGUOUS, and v1's default
titles, copied from TITLES, lost them: Constants().titles.remove('king')
raised KeyError where 2.6.0 accepted it.
Freeze 2.6.0's TITLES (config/_titles_2_6_0.py, generated from the wheel)
and add every 2.6.0 title now in TITLES_AMBIGUOUS back to v1's default.
The snapshot reads a kept one by the phrase, as Lexicon.default() does,
and a removed one as no title, phrase readings included. A word 2.6.0
never listed (dean) still becomes a title everywhere when added. Tests
derive the moved words from the compiled sets, so later batches are
swept with no edit. decisions/H9, 2026-10-26.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#752) A v1 entry Lexicon folds onto a moved title ('king。') skipped the split and read as a title everywhere. Pin the replaced-list Standing sentence too, and correct two counts in decisions/H9 (39 rows; seven agnomens). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The second review of the fold found it narrowed at the intersections: 'wing。' kept its phrase reading but lost its modifier one, so 'Wing Commander Smith' read no title. Fold all three intersections, and sweep the full-stop spelling over every moved word. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e-only-words # Conflicts: # docs/design/decisions/H9-title-phrase.md # docs/release_log.rst
This was referenced Oct 27, 2026
Merged
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.
Summary
Phase 2i/2j of #752 moved titles that are also given names (
king,mahdi,bard,buddha,siddha,gyani,wing) out ofTITLESinto the phrase-onlyTITLES_AMBIGUOUS(rules/H9, the title phrase). v1's defaultConstants().titleswas copied fromTITLES, so it lost them: on masterConstants().titles.remove('king')raisesKeyErrorand'king' in Constants().titlesis False, where 2.6.0 accepted the removal and answered True. Never released; this lands it before 2.7.0.nameparser/config/_titles_2_6_0.pyfreezes 2.6.0'sTITLES(812 words, generated from the wheel, never edited, deleted with the facade in 3.0).titles=TITLES | (TITLES_2_6_0 & TITLES_AMBIGUOUS).Constants._build_snapshotpasses a kept moved word totitles_ambiguous(phrase reading, so a defaultConstantsstill equalsLexicon.default()), and a removed one to neither, which turns its modifier, style and phrase readings off too. Afterc.titles.remove('king'),Hon. King Smithreads title 'Hon.', given 'King', as 2.6.0 does after the same removal.dean,justice,grace,major,marshal) are untouched:c.titles.add('dean')still makes a title everywhere (the 1.4 recipe).Constantsentry that is only a CJK full stop raisesValueErrorat the first parse:c.titles.add('。')thenHumanName('john smith', c)#582's rule) in the moved test and in the modifier/style/phrase intersections, soking。/wing。read asking/wingdo.The family sweep
Every v1 set attribute and the
capitalization_exceptionskeys, compared word by word against the 2.6.0 wheel (PYTHONSAFEPATH=1,nameparser.__file__asserted both sides): onlytitleslost words (the seven above).suffix_not_acronymsgained the seven agnomens andfils(phase 2h, release-logged).suffix_acronyms_ambiguous, the 2h sets andgiven_name_abbreviationshave no v1 manager that lost a word.Gap, accepted
v1 has one bit per word; a moved word now has three readings. Adding a moved word in v1 restores the default (phrase-only), not 2.6.0's title everywhere — that takes
Lexicon.default().add(titles={'king'}). This also moves an unreleased 2.7dev reading: on masterc.titles.add('king')/Constants(titles=['dr', 'king'])read King as a title everywhere; now phrase-only. Release-log limit sentence added to the phrase-only bullet.Tests
tests/v2/test_config_shim.py, moved words derived from the compiled sets (TITLES_2_6_0 & TITLES_AMBIGUOUS), so a later batch is swept with no edit — #903 has since merged into this branch:sultanandsultanajoined the rows with no edit and pass. Membership, iteration,len, set operators,remove/discard, re-adding, replaced list, pickle/deepcopy/copy, folded spellings. 37 of the first commit's 39 rows fail on master6ba78d0d(the two passing are the non-empty guard anddean's recipe); the review round'swing。row fails on the commit before it.Measured
uv run pytest(27,060 passed),-n0 -m serial(frames/benchmarks, 43 passed),--python 3.15, mypy, ruff, sphinx doctest.wing。's modifier reading (Wing Commander Smith), fixed by folding the intersections.Docs
decisions/H9: a Standing line and a dated 2026-10-26 Log entry. decisions/3-0-reevaluations: a (B) entry. AGENTS.md's shim roster. The release-log limit sentence.
🤖 Generated with Claude Code