Skip to content

Read a lone V, I or X after a first name as the family name (#718) - #719

Open
derek73 wants to merge 5 commits into
masterfrom
fix/issue-718-lone-numeral-needs-words-to-spare
Open

derek73 wants to merge 5 commits into
masterfrom
fix/issue-718-lone-numeral-needs-words-to-spare

Conversation

@derek73

@derek73 derek73 commented Oct 18, 2026

Copy link
Copy Markdown
Owner

Closes #718.

What changes

A single capital I, V or X ending a name written without a comma now needs a word to spare, counted exactly as rules/S4 (the ambiguous acronym needs words to spare) counts Ma: in name units, a particle chain counting as one word and a title as none.

input 2.4.2 now 1.4.0
John V given John, suffix V, no family given John, family V last V
Malcolm X suffix X, no family family X last X
Dr Smith V family Smith, suffix V given Smith, family V first Smith, last V
John Smith V suffix V suffix V (unchanged) suffix V
John W. Ingram V suffix V suffix V (unchanged) —
John Smith vi suffix vi, reports suffix vi, reports nothing suffix vi
  • Reports. Either reading reports suffix-or-name, both ways as Jack Ma does (Derek's call). The one exception is a letter that classify already reported as an initial (HENRY I, one-case i), which reports nothing new.
  • Lower case. A lowercase numeral in a mixed-case name is settled by its writing: it reads as the generation and reports nothing.
  • Comma paths. The given part after a family comma is not counted, as S4 already says of the acronym.

Docs

  • New rules/S10 (the trailing roman numeral) and decisions/S10 record the decisions, what moved, what was declined and why, and the recompute recipes.
  • Amended rules:
    • P2 (the chain's stop, and its boundary example Freiherr von Richthofen V)
    • P3 ("the generation it also spells" now defers to S10)
    • P5 (the words-to-spare list)
    • M2 (examples)
    • O5 (its worked example is now John III, Dr.)
    • S2 and S4 (implemented:/interacts:)
  • Elsewhere: a release-log bullet, and two AGENTS.md amendments: the spelling sweep, and the group-side-predictor gotcha.

What moved (snapshot diff)

Four pre-existing corpus names:

  • John V → family V
  • Mohamad X → family X
  • John née Jones Smith V → maiden 'Jones Smith V', since the clause-free name John V no longer reads the V as a suffix
  • Freiherr von Richthofen V → family 'von Richthofen V': behind a title the chain is the one name word, the same reading Freiherr von Richthofen Ma already gets

The snapshot also gains S10's examples as new names. Re-pinned case rows are listed in decisions/S10; the two whose purpose needed a suffix kept their purpose on III spellings, and the old inputs became new rows.

Review

  • Design-docs review (eleven axes) found 8 issues, all fixed in 98f75f5. The main ones: S10's Accepted clause over-scoped to i; P3 and O5 were stale; the release bullet missed Dr. Smith V.
  • Code review found that the count leaked into a family comma's given part through the chain's bound: Smith, Freiherr von Berg V read given 'von Berg V', unreported, across 2,880 grid parses. Fixed in ede4d25. A second pass re-ran the same 558,423-parse grid over the fix commits: 0 unreported numeral moves remain (2,880 before), every reading ede4d25 changed equals master, and the flag introduced no new divergence.

For Derek

  1. Freiherr von Richthofen V now reads family 'von Richthofen V'. That's consistent with S4 (... Ma), but it is a corpus name.
  2. john v (one-case, lowercase) still loses its family, while john x and JOHN V keep theirs. A lowercase v is a listed suffix word and never reaches the fork. This is recorded as Accepted in S10; closing it would mean touching the suffix-vocabulary path.
  3. H1 behind a comma is now unpinned. John V, Sir was the only spelling where a given-name title behind a comma kept the lone word as the given name (H1). John III, Sir, John Jr., Sir and John PhD, Sir read family on master already. The row is renamed for what it pins. A follow-up issue is worth drafting.
  4. Garbage-input observation: Berg nee MA V used to report the clause's kept MA; now the clause keeps MA V and reports only the V.

Checks

  • Tests: the full suite (21,055 passed), mypy and ruff are clean.
  • Frame budget: test_benchmark passes.
  • Snapshot: re-recorded.

🤖 Generated with Claude Code

derek73 and others added 5 commits October 18, 2026 02:38
A capital V, I or X ending a name with no word to spare for it is the
family name: 'John V' and 'Malcolm X' read family V and X, as 1.4.0
read them, where 2.0.0 through 2.4.2 gave suffix V and X and no family.
'John Smith V' keeps the suffix. A numeral in lower case in a mixed-case
name is settled by its writing: still the generation, and no longer
reported ('John Smith vi').

States the comma-less numeral as rules/S10 (the trailing roman
numeral), with its decisions entry; amends P2's chain stop, P5's
words-to-spare list and M2's examples, which the count moves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
'John V' now reports suffix-or-name while reading family V, as
'Jack Ma' reports keeping its family. The declined numeral is a pick of
the trailing walk, and three sites take its branches, so three report
it: assign (a lone name word), the particle chain ('Freiherr von
Richthofen V'), and a maiden clause that keeps it ('abdul nee Smith V').

A letter classify already reported as an initial reports nothing new
(INV10 found 138 one-case rows, 'HENRY I', carrying both kinds).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
S10's Accepted clause named every listed lowercase letter where only
'v' bypasses the count ('john i' is counted, as P3's connective read as
an initial), and left out that 'john smith v' reports nothing. P3's
"is the generation it also spells" now defers to S10; O5's example is
'John III, Dr.', 'John V, Dr.' no longer being a lone word; the H3
contrast comment and the release bullet ('Dr. Smith V' moves the
surname into first) catch up. The case row that lost its H1 reading is
renamed for what it pins, and says that nothing pins H1 behind a comma.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Code review found the chain's bound in a family comma's given part
asking the count through tail_reading, which assign's walk there never
asks (S4: "read without it"), so the chain took the V of 'Smith,
Freiherr von Berg V' into the given name, unreported. The bound now
reads with count_numeral=False and the four shapes read as on master.
Two case rows pin it; AGENTS.md's group-side-predictor gotcha records
the from-the-peel side of the class.

Also: assign uses the shared _AMBIGUOUS_CREDENTIAL_TAGS rather than a
second spelling of it, and group's Produces: line lists the chain's
and clause's reports.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@derek73 derek73 added this to the 2.5 milestone Oct 18, 2026
@derek73 derek73 added the bug label Oct 18, 2026
@derek73 derek73 self-assigned this Oct 18, 2026
@codecov

codecov Bot commented Oct 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.03%. Comparing base (958d252) to head (ed64d54).

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #719   +/-   ##
=======================================
  Coverage   99.03%   99.03%           
=======================================
  Files          46       46           
  Lines        4557     4578   +21     
=======================================
+ Hits         4513     4534   +21     
  Misses         44       44           

☔ 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.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Should "John V" and "Malcolm X" read V and X as the family name rather than a generational suffix?

1 participant