Skip to content

Sweep stale prose for the 3.0.0 release - #1079

Open
derek73 wants to merge 3 commits into
masterfrom
docs/3-0-stale-prose-sweep
Open

derek73 wants to merge 3 commits into
masterfrom
docs/3-0-stale-prose-sweep

Conversation

@derek73

@derek73 derek73 commented Nov 5, 2026

Copy link
Copy Markdown
Owner

Step 0 of the release checklist for 3.0.0: the stale-prose sweep. Each site the checklist names was read against the 3.0 tree, with every doubtful claim run. It changes no behavior: only docs, docstrings, message strings, comments and case notes.

What changed, by site

docs/migrate.rst

  • "Changed in 3.0" listed only the render change. It now has 13 shapes, each with a doctest, for the 3.0 bullets whose 1.4 reading moved: Graf Lambsdorff, Sta. Maria / Delos Reyes, María del Carmen, طارق عبد العزيز, Ortega y Gasset VI, the bracketed clauses (PhD, MBA) / (JP), Dumas père, Pr / Profesor, KC / MSW, U+2063, the given names Maj / Gen / Pharaoh / Saint with Brig Gen, Silva, Junior Carlos, and the case repair of ST, DELA and MACHADO. Each 1.4 reading was measured against the 1.4.0 wheel.
  • "Finding the sites" now says to upgrade to 2.8.2, not 2.8.1. It adds the config.surnames import and the unwarned read of a Lexicon set field.
  • The intro no longer says "Further output changes come with the 3.0 alphas". There are no alphas.

README.rst

  • The 3.0 announcement mentions reading-based Lexicon configuration, render in written order and the language packs.
  • The upgrade advice says 2.8.2 and names the unwarned Lexicon field read.
  • python -m doctest README.rst and PyPI's readme_renderer are both clean.

docs/usage.rst, concepts.rst, modules.rst, index.rst

  • References to internal Lexicon fields (after_given_titles, suffix_acronyms_ambiguous, given_name_abbreviations, emptying titles) became the 3.0 calls (words(...), readings_of(...)).
  • 1.x last_list became family in STABLE_TAGS.
  • "2.0 API" framing was dropped where it no longer holds.

docs/customize.rst, locales.rst

  • ES_AR is mentioned beside ES's given-name list and in the composition paragraph.
  • render()'s description covers the views and the default layout in read order.
  • The pack intro and "what a pack is for" include packs that choose languages.
  • The CLI paragraph covers language tags and --strict.
  • The rules_patch users are listed in full.

Autodoc docstrings and messages (_types.py, _locale.py, locales/__init__.py, locales/ja.py)

  • AmbiguityKind docs no longer cite internal Lexicon.title_phrases and conjunctions_ambiguous, or "planned for 2.x".
  • surname1's folded-middle example was wrong against rules/R11 (the first-surname views) and is fixed.
  • Locale names its languages.
  • The ja ImportError quotes 'nameparser[ja]' for zsh.
  • About 50 raise and warn paths were triggered, and every snippet they offer ran (22 also under mypy --strict). The one not run is segmenter=locales.ja_segmenter(): namedivider-python isn't installed in this checkout.

Pipeline stage headers (_assemble, _assign, _classify, _post_rules, _script_segment) and ParseState's ownership map

  • Consumes/Produces/Reads now match the code, checked with the checklist's grep plus aliased reads.
  • _classify over-claimed given_names and missed title_case_name_words.
  • _assign reads the title-phrase sets for H9 (the title phrase).
  • post_rules writes S1's set-apart roles and R11's first-surname tag.

tests/v2/cases.py notes

docs/design/

AGENTS.md files and nameparser/vocab/README.md

Checks

  • uv run pytest passes on 3.11 and 3.15: 37,268 passed, 29 skipped, 5 xfailed. The -n0 -m serial pass also passes (54).
  • uv run mypy and uv run ruff check are clean.
  • sphinx-build -b doctest gives 647 tests with 0 failures, and -b html gives no warnings.
  • There are no open Dependabot PRs, and uv.lock pins namedivider-python 0.4.2, the latest on PyPI.

Found, left for a decision

  • A parser deviation from rules/P9, predating 3.0. P9 says SMITH VD V, JOHN reads as SMITH V, JOHN does. The tree gives family SMITH VD, suffix V (reported) against family SMITH V. The change was bisected to Ask one predicate for every roman-numeral rule (#752, phase 2f) #886 (phase 2f). Nothing caught it because the example sits in prose rather than in a fence. It needs an issue and a deviates: marker, or a decision that the new reading is right.
  • decisions/O6's Open line rests on the closed Should two_family_names leave a known given name out of the family, so "José Luis Pérez" keeps family "Pérez"? #959. It covers two questions, a given-name list for each Latin-American region and folding ñ. They need an issue, or the line reworded.
  • decisions/vocabulary-model Standing line 35 says "Phase 2 is to put … readings in one pool". Phase 2: derive ambiguity from clashing readings and extend the gate to every reading kind #752 is closed, but this sweep found no record that the one pool was built, so it was left as written.
  • Plan tense outside 3.0: the .pyi stub is "a 3.0 candidate" in 3-0-reevaluations and differential-ledger. vocab/README's reserved names (bare_only, leading_only, trailing_only, separators) are "for phase 4", matching build.py's RESERVED. Each needs retargeting, and the README's names change with the code.
  • 2.x translation messages:
    • remove(suffix_acronyms={'ma'}) offers .add('ma', kind='given', same_as='ma'). That runs, but it rewrites the Filipino reading's same_as='maría'.
    • Lexicon(surnames={'kim'}, titles={'dr'}) offers lexicon.add(...) on a variable the caller never bound (_lexicon._refusal's prefix).
  • API reference gaps:
    • "Added in 3.0." is on some new members and missing from others.
    • The role properties, family_base, as_dict, Lexicon.default and Lexicon.empty have no docstring, so autodoc leaves them out. This predates 3.0.
    • :mod:nameparser.locales.ja`` points at a module that isn't autodoc'd.
    • modules.rst still heads its section "The 2.0 API".
  • locales.rst framing:
    • Whether "a pack never changes a name outside the shapes it declares" still holds for the language-choice packs. ES, CS and SK turn two_family_names on.
    • The section on Spanish and Portuguese titles has no label to :ref:.
  • Notes in tests/v2/cases.py were swept by script for the forms staleness takes. A note stale in some other way could remain.

Not in scope here, as planned: the moved-names report, release notes (including the 3.0 entry's "under development" line), CITATION.cff, the version, the tag and the pickle check.

🤖 Generated with Claude Code

derek73 and others added 3 commits November 5, 2026 00:07
….2's warnings

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…docs for stale prose

User docs, autodoc docstrings and messages, the pipeline stages'
Consumes/Produces/Reads lines and ParseState's ownership map, the notes
in tests/v2/cases.py, docs/design/ and the AGENTS.md files and vocab
README, each read against the 3.0 tree.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
H9's Precedence modifier clause in 3.0 terms (a caller's other title
reading), decisions/H9's pointers to the entries that hold its claims,
and vocabulary-model's phase 3 line in the shipped tense. H9's budget
record re-recorded, 778 -> 784 words: the clause reads no new signal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@derek73 derek73 added this to the 3.0 milestone Nov 5, 2026
@derek73 derek73 added the docs Documentation fixes and updates label Nov 5, 2026
@derek73 derek73 self-assigned this Nov 5, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Documentation fixes and updates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Should two_family_names leave a known given name out of the family, so "José Luis Pérez" keeps family "Pérez"?

1 participant