Skip to content

abdul Smith V loses the family name — the bound-given join counts an initial-shaped suffix as a name word to spare #401

Description

@derek73

The join that makes abdul Smith one given name reserves a word so a family name survives it. An initial-shaped Roman numeral defeats the reserve, and the family name disappears:

abdul Smith II   ->  given='abdul'        family='Smith'   suffix='II'    correct
abdul Smith Jr   ->  given='abdul'        family='Smith'   suffix='Jr'    correct
abdul Smith V    ->  given='abdul Smith'  family=''        suffix='V'     family lost
abdul Smith I    ->  given='abdul Smith'  family=''        suffix='I'
abdul Smith X    ->  given='abdul Smith'  family=''        suffix='X'

Why

The reserve counts the pieces that are neither title nor suffix, and _is_suffix_piece vetoes on initial:

return "vocab:suffix" in tags and "initial" not in tags

A bare V carries both vocab:suffix and initial, so it is not counted as a suffix. The reserve sees three name words and lets the join fire; assign then reads that same V as a suffix, and the family name the reserve believed it was protecting was never there.

Only the single-letter numerals reach it — V, I, X. II and Jr are unaffected because neither is initial-shaped. Every bound given-name word is affected (abdul, abu, abd, أبو), so this is not one vocabulary entry misbehaving.

The veto is right for assign and wrong for the reserve

A lone V in the middle of a name genuinely may be a middle initial, and that is what the veto protects — rule S3's territory. But the reserve is not classifying the word. It is asking a different question: will a family name survive this join? For that question the only correct answer is the one assign will actually give, and assign gives suffix.

Scope

Pre-existing and unrelated to #400 — reproduces on master with abdul, shipped since the 1.x line. Rule P5's statement in docs/design/rules.md now states the reserve ("it needs a name word to spare, so two name words alone do not join"), and this is a case where the rule believes it has a word to spare and does not.

Verification is weak here

Of the 751 differential corpus names, 11 start with a bound given-name word and only one loses its family name — the degenerate single-token "abdul", which is a different shape. No corpus name has this one, so the harness cannot see the fix. Tests are the verification.

Found by an adversarial review of #400, which fuzzed 71,904 inputs and isolated the 142 family-losing shapes; all 142 reproduce with abdul on unchanged code.

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions