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.

Activity

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

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions