Skip to content

Commit 499c402

Browse files
derek73claude
andcommitted
docs(rules): P3's examples were all single-letter conjunctions
Every P3 example used y, E or И — the carve-out cases — so the ordinary multi-letter join was never shown, and the boundary line ("Juan y Garcia" keeps y a name word) read as if three-word names never join at all. Two contrast examples fix it: the same shape with "and" joins, and so does "&", which is single-character but not a letter. Measured, the predicate is len(text) == 1 and total < 4 and text.isalpha(). The prose now says the carve-out reaches every single-letter connective the vocabulary holds — Cyrillic и/і/й and Arabic و, not just the two Latin ones — while the capital veto reaches only the Latin ones, which is the asymmetry #383 is open about. decisions.md#3-0-reevaluations gets the locale consequence: Spanish, Portuguese and Dutch each want a different subset of single letters joined, so a locale pack would have to carry the join threshold and the initial veto as per-word policy. That is a stronger requirement than yesterday's particle entry, which only asked packs to override vocabulary membership. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent a5ccd13 commit 499c402

2 files changed

Lines changed: 9 additions & 0 deletions

File tree

‎docs/design/decisions.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,3 +545,4 @@ Promoted 2026-08-15 from session memory (Derek's 2026-07-30 ask; promotion appro
545545
- (B) The 1.3.0-era legacy-pickle property-key skip (suffixes_prefixes_titles in old blobs) rides in the shim's __setstate__ and dies with it.
546546
- (B) The FAMILY_COMMA doctrine (rule W3): inherited from v1's lastname-comma but correct on its own terms — an explicit comma is stronger evidence than script.
547547
- (A) 2026-08-17 — PARTICLE VOCABULARY AS LOCALE PACKS. Raised while reversing the order-independence decision above: every argument in the leading-particle thread is a language judgement wearing a position heuristic. `de` and `do` lead surnames in Vietnamese, `von` is German, `dos` Portuguese, `das` both Portuguese and a borne Bengali surname — and the per-word comments in nameparser/config/particles.py cite exactly these traditions as their justification. Locale packs already exist (ru, tr_az, zh, ja) and already carry vocabulary and rotations, so particles are the obvious next tenant: a caller who knows the tradition could opt into a tuned set instead of the parser splitting the difference globally. Not 2.x work — it needs the packs to carry vocabulary OVERRIDES rather than additions, and it would give C-i's positional qualifier a per-locale answer rather than one global one.
548+
- (A) 2026-08-18 — LOCALE CONTROL OF P3's SINGLE-LETTER CARVE-OUT, and the sharper requirement it puts on the entry above: a pack would have to carry per-word POLICY, not just membership. Which single letters a tradition wants joined differs by language — Spanish writes "y" and would want "e" read as an initial, Portuguese wants the reverse, Dutch would want every single letter read as an initial. One global rule serves all three today: a single ALPHABETIC character in a name of fewer than four pieces stays a name word, and a bare Latin capital never joins (#383). It is v1's Google Code issue 11 fix ("john e smith") generalized to a vocabulary v1 did not have — the set now holds six single-letter conjunctions (y, e, и, і, й, و), and the carve-out reaches all of them because it counts characters, while the capital veto reaches only the Latin ones because it tests a Latin shape. That asymmetry is the visible seam and it is why #383 is open. A pack that could only ADD or REPLACE vocabulary could not express any of it; the join threshold and the initial veto would have to be per-word, per-pack values. Measured while documenting P3: "&" is single-character but not a letter, so it joins at any length ("Juan & Garcia" is one part while "Juan y Garcia" is three).

‎docs/design/rules.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,16 @@ P3. Rationale: connective words ("y", "of the") bind name words into
156156
"Juan y Eva Garcia" → given="Juan y Eva"
157157
"Jose E Maria Santos" → middle="E Maria"
158158
"Juan y Garcia" → middle="y" · boundary
159+
"Juan and Garcia" → given="Juan and Garcia"
160+
"Juan & Garcia" → given="Juan & Garcia"
159161
"Mr. Jack and Jill" → family="Jack and Jill"
160162
"Mr. Jack Jill" → given="Jack" · boundary
163+
Both exceptions are about the written FORM, not the word: the
164+
three-word carve-out counts letters, so a symbol connective joins
165+
at any length, and it reaches every single-letter connective the
166+
vocabulary holds — Cyrillic и/і/й and Arabic و as well as y and
167+
e. Which single letters a tradition actually wants joined differs
168+
by language, and no locale gets its own answer today.
161169
Accepted: the initial veto is a LATIN shape — a Cyrillic
162170
capital joins ("И".isupper() is true, so this is not a
163171
Unicode-uppercase rule); #267's closure blessed the Cyrillic

0 commit comments

Comments
 (0)