Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/design/decisions/C1-suffix-comma-decision.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,5 @@ Open: none in this file.
SUPERSEDES: decisions/C4's 2026-10-01 #562 bullet's mechanism and its accepted reports (its pair report and the settled-run test); decisions/C13's 2026-10-04 #603 bullet's "segment decides" wording; and decisions/C3's #575 bullet's account of WHY segment builds its unit facts from vocabulary -- `_comma._whole_name` counts over classify's tags, and `name_word_count`, which reads the vocabulary, is asked by decide and by script_segment, the agreement sweep `test_surname_unit_tags_agree_with_classify` keeping the vocabulary view equal to the tags.
- 2026-10-18 #728 — SPLIT. rules/C1 held what are now C1 and C3–C11, and this file their history; each entry moved to the file of the rule it decided, and the #429, #436/#437 and #511 entries, which decide R1's entry pass, to decisions/R1. The entries kept here moved nothing but the pointers the split broke and the measurement paragraphs, each cut to one line naming its population, counts, baseline and PR. The #611 entry stays here, an open question on #728.
- 2026-10-19 (Derek), #761 — A GENERATION BEFORE THE COMMA AGAINST PAIRED INITIALS AFTER IT: DOTTED, THE INITIALS ARE THE GIVEN NAME AND THE GENERATION STAYS THE SUFFIX; UNDOTTED, THEY ARE THE CREDENTIAL. rules/C12 (a suffix word ending the name before the comma makes the comma a suffix comma) and rules/C5 (paired initials after the comma are the given name) both claim `John Smith Jr., M.J.`, and no rule text said which wins; the C section's move to the skeleton format, which gives a hub Precedence bullets, asked. Measured on 732a2716: `John Smith Jr., M.J.` reads given 'M.J.', family 'John Smith', suffix 'Jr.', and `John Smith Jr., MJ` reads given 'John', family 'Smith', suffix 'Jr., MJ', each reporting `suffix-or-name`. Decided: that reading is the rule, for every generation C12 reads, written in rules/C1's Precedence with both as examples and in C5's and C12's Precedence where they meet. It is the reading C12's Accepted clause (`Lloret Palol II, JA`) and its `Smith Jones Jr., J.A.` boundary already gave behind a two-word surname. The review found a roman numeral S10 reads by shape breaking it today: `John Smith V, M.J.` gives given 'M.J.', family 'John Smith V' and no suffix, while `John Smith V, MJ` reads suffix 'V, MJ'. So does every numeral S10 reads (`John Smith VI, M.J.`, `I`, `IX`, `X` alike). Derek ruled that a bug, so C1's Precedence carries the intended reading as two `deviates:` examples, V for the one-letter count and VI for the shape-only path, tracked by #774. The same pass collected into C1's Precedence the order among C4, C5 and C6 that their own texts already state (C4 counts name words first and asks written case second, C5 is the exception to that count, C6 gates when an unlisted all-caps word joins the class), deciding nothing new there; and the strict switch left C1 for rules/C14 (decisions/C14).
- 2026-10-25 #774 — A NUMERAL ENDING THE FAMILY PART IS READ AS THE COMMA-LESS NAME READS IT. The family part's walk took a word into the suffix by the suffix-piece test alone, so a listed generation stayed the suffix (`John Smith III, M.J.` → suffix 'III') while `V`, which the initial veto refuses, and `VI`, which no list holds, went into the family (`John Smith V, M.J.` → family 'John Smith V'), the split rules/C1's #761 Precedence example tracked as a `deviates:` row. The walk now asks the numeral's predicate (decisions/vocabulary-model's 2026-10-25 2f entry) of a single-word piece shaped as a roman numeral with nothing but suffix pieces behind it: the generation where it reads as one, a one-letter numeral needing two pieces of the part in front of it, as S10's count asks of the comma-less name's pieces, and reported where a shape reads it, as the comma-less name reports. `John Smith V, M.J.` and `John Smith VI, M.J.` keep the numeral as the suffix, `Smith VI, John` reads suffix 'VI', and `Smith V, John` keeps family 'Smith V' (one word in front), silent, the comma having named the family. The two `deviates:` markers come off.
- 2026-10-25 #774 — A NUMERAL ENDING THE FAMILY PART IS READ AS THE COMMA-LESS NAME READS IT. SUPERSEDED IN PART 2026-11-05 (#1080): before a family comma the count is over the pieces that are not wholly particles, not over every piece (decisions/S10's 2026-11-05 entry). The family part's walk took a word into the suffix by the suffix-piece test alone, so a listed generation stayed the suffix (`John Smith III, M.J.` → suffix 'III') while `V`, which the initial veto refuses, and `VI`, which no list holds, went into the family (`John Smith V, M.J.` → family 'John Smith V'), the split rules/C1's #761 Precedence example tracked as a `deviates:` row. The walk now asks the numeral's predicate (decisions/vocabulary-model's 2026-10-25 2f entry) of a single-word piece shaped as a roman numeral with nothing but suffix pieces behind it: the generation where it reads as one, a one-letter numeral needing two pieces of the part in front of it, as S10's count asks of the comma-less name's pieces, and reported where a shape reads it, as the comma-less name reports. `John Smith V, M.J.` and `John Smith VI, M.J.` keep the numeral as the suffix, `Smith VI, John` reads suffix 'VI', and `Smith V, John` keeps family 'Smith V' (one word in front), silent, the comma having named the family. The two `deviates:` markers come off.
ACCEPTED, found by the PR's reviews: a part holding a connective surname reads its one-letter numeral as its comma-less twin does only where the two join the connective alike. The part before the comma joins `Vega y Lopez` into one piece where the comma-less `Vega y Lopez V` leaves it unjoined, so `Vega y Lopez V, Mary` keeps family 'Vega y Lopez V' where the twin reads suffix 'V'. Counting a join's words instead fixed that row and broke the longer joins, which both spellings join (`Smith and Jones V, Mary`, `Ortega y Gasset y Lopez V, Mary`, family 'V' comma-less and suffix 'V' with the count), so the piece count stands. Also as on master: `St Smith V, Mary` (a title-particle is no title run before a family comma, rules/H6) and `Jane nee Smith VI, Mary` (the clause keeps the numeral) differ from their twins.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

- A particle that is also an unambiguous suffix word, with a name piece behind it in the part before a family comma, heads that name and stays family in any case (`SMITH VD MA, JOHN`) — 2026-10-02 #573.
- Such a word standing between post-nominals after a family comma keeps the post-nominal reading in any case and reports the fork it decided (`suffix-or-name`); with nothing behind it, it ends the name and attaches by P6 — 2026-10-02 #573.
- Before a family comma, a one-letter numeral's words to spare are counted without the part's particles, wherever they stand: a piece made wholly of particles is no word, so `SMITH VD V, JOHN` reads as `SMITH V, JOHN` and `de Mesnil V, Jean` keeps family 'de Mesnil V'. The count is rules/S10's, stated there and in rules/C1's Precedence, and decisions/S10 carries its Standing line; the record is this file's — 2026-11-05 #1080.
- A never-given particle opening the given part makes the member behind it a name rather than a credential. This is rules/S5's site, indexed here because this entry is its record (decisions/S5's #573 entry points back here) — 2026-10-02 #573.

Open: none in this file. The mixed-case `Doe, Jane PhD vd Ma`, which #573 left aside, was decided silent the same day (decisions/S5's #578) and that was reversed by #602 (decisions/S8's 2026-10-04 entry): it reads suffix 'PhD vd Ma'.
Expand All @@ -17,3 +18,4 @@ Open: none in this file. The mixed-case `Doe, Jane PhD vd Ma`, which #573 left a
NOT DECIDED HERE: the mixed-case `Doe, Jane PhD vd Ma` (middle 'vd Ma', silent), the issue's fourth bullet. Its reading is unchanged; whether the family-comma path should report the chain's fork there is a separate question. Open: #578 (decided the same day, the S2 section's #578 entry: silent, as it reads). Nor the positional read of a part before a comma followed by no name word, where the case still splits the word: `Smith vd Ma, Prof.` reads given 'Smith', family 'vd Ma', and `SMITH VD MA, PROF.` family 'SMITH', suffix 'VD MA', on this tree and on `e56dd296` alike — that part reads as the comma-less name does, and the comma-less name splits the same way.
BLAST RADIUS, measured 2026-10-02 with `e56dd296` (the pre-change master) as the comparator. The gate's output is byte-identical at all five baselines apart from the tree path: no corpus name holds these shapes, the rules.md examples aside. Over a generated grid, 5,676 of 409,498 parses move, every one in one of two classes — 3,534 where a family gains the words behind its particle, 2,142 where `vd` or `mc` leaves the family for the credential run — and no list of ambiguity kinds changes; 1,310 of the movers are written in mixed case. Recompute: from the pool `vd mc de van do Ma MA PhD Jr John Berg V la Prof.`, build every `<1 or 2 words>, <exactly 2 words>`, `<3 words>, <1 word>`, `Smith <the same 1-3 words>, John`, `Doe, Jane <2-4 words>` and `Smith, <2-4 words>`; deduplicate, then parse each as written, `.upper()` and `.lower()`, keyed by the resulting text; keep the entries whose `as_dict()` or sorted ambiguity kinds differ between the trees, and class each by whether the new family holds every old family word and more, or the old family lost only `vd`/`mc` while the suffix kept every word. Cost: the given-slot test was QUADRATIC as first written, rescanning the particle run once per member — the second review measured 29,670 → 165,591 frames on `SMITH, VD ` + `DE `×k + `MA `×k at k = 256 against `e56dd296`, where an earlier wall-clock check at k = 100 and 400 had read 3.18× and passed for linear. The run's end is now kept once per title set: 1.90–1.99× per doubling of k from 16 to 256, and `_REREAD_SHAPES["lead"]` in tests/v2/test_benchmark.py guards it (generator frames at 8 units against 32: 3.38× kept, 7.53× rescanning, bound 6.0). The frame-count reference band did not move.
- 2026-10-19 — SPLIT FROM rules/P2 and rules/P6 with the rule: rules/P2's clause on the part before a family comma and rules/P6's third exception, the two sites #573 decided for a word of both vocabularies. The #573 entry above moved here from decisions/P6, unchanged but for the two site headings, which name the rule each site was in; where it says P2 or P6 elsewhere, it means the rule as it then stood. Its third site, a never-given particle opening the given part, is rules/S5's, which keeps its own cross-reference.
- 2026-11-05 (Derek), #1080 — BEFORE A FAMILY COMMA, A ONE-LETTER NUMERAL'S WORDS TO SPARE ARE COUNTED WITHOUT THE PART'S PARTICLES. rules/C1's numeral site in the family part (`_assign._family_part_numeral`, #774, added by #886 for #752's phase 2f) asked S10's words-to-spare count over the pieces in front of the numeral, and a particle no chain had joined to a name word was still a piece of its own there, so it counted as a name word: `SMITH VD V, JOHN` read family 'SMITH VD', suffix 'V', reporting `suffix-or-name`, where `SMITH V, JOHN` keeps family 'SMITH V'; `Smith van der V, John` read family 'Smith van der', `van der V, John` family 'van der', and a particle opening the part counted too, `de Mesnil V, Jean` reading family 'de Mesnil', suffix 'V'. `Smith van der V, John`, `van der V, John` and `de Mesnil V, Jean` read family whole in every release from 1.4.0 through 2.6.0; `SMITH VD V, JOHN` did in 1.4.0 through 2.1.0 and 2.4.0 through 2.6.0, 2.2.0 and 2.3.0 reading family 'SMITH V', suffix 'VD' (#573's entry above), and `smith vd v, john` only in 2.5.0 and 2.6.0, 1.4.0 through 2.4.0 reading family 'smith', suffix 'vd, v' (1.4.0 through 2.2.0) or 'vd v' (2.3.0 and 2.4.0). 2.7.0 through 2.8.2 read the suffix for all of them (bisected to 1f0b07c7, #886; no entry recorded the move). DECIDED: a piece made wholly of particles, wherever it stands in the part, is no word to spare. The comma has named the part a surname, where a particle heads the name word behind it, the numeral included were it one, so the particle reads as part of the word it attaches to, as rules/C3 counts a particle run with that word. This is what P9's clause already said for a word of both vocabularies ("A lone letter ending the part behind it reads as it does in the same part without the particle", as the clause now reads), and what the issue's fix asked, "a particle that has a name word behind it"; its examples carried `deviates: #1080` until this fix. A first draft left out only the particles standing right in front of the numeral, and review found `de Mesnil V, Jean` and `van Smith van V, John` still reading the suffix. WHERE IT IS STATED: the count is S10's (its family-comma Precedence bullet), not P9's, since `van` and `der` are no suffix words and P9's When does not reach them; and rules/C1's sentence that "a numeral ending the family part is read as the comma-less name reads it" gains its exception, `John van der V, M.J.` reading family 'John van der V' (1.4.0 through 2.6.0 alike) where the comma-less `John van der V` keeps suffix 'V'. The comma-less name has a given name to spare that a particle may follow; a family part has none. Boundaries: a particle chain joined to a name word is one name word (`Smith van der Berg V, John` keeps suffix 'V', two words in front, as `Smith Jones V, John` does; a draft testing a piece's first token moved it), and particles behind two name words leave two (`Smith Jones van V, John` and `de Mesnil Jones V, Jean` keep suffix 'V', where 1.4.0 and 2.6.0 read `Smith Jones van V, John` family whole). A numeral of two or more letters asks no count and does not move (`Smith van VI, John` keeps suffix 'VI'); the comma-less `John van V` reads suffix 'V' as before; and a part before a suffix comma is not this site, `Smith van der V, Jr.` still reading given 'Smith', family 'van der', suffix 'V, Jr.' as 2.2.0 through 2.8.2 do (1.4.0 through 2.1.0 read family 'van der V'). NOT DECIDED: with a suffix word behind the letter, P9's first clause (the particle heads the name word behind it) reads the letter as that name word, and the part without the particle reads it as the numeral: `Mary Smith vd V Jr., John` gives family 'Mary Smith vd V', suffix 'Jr.', where `Mary Smith V Jr., John` gives suffix 'V Jr.', on this tree and on 401bf62e alike; P9's clause is scoped to a letter ending the part, and the shape is left as it reads. Measured 2026-11-05 against 401bf62e (the pre-change master; master's `_assign.py` swapped into this tree, the import checked) on a grid of 34,992 parses: heads `Smith`, `Smith Jones`, `Dr. Smith`, `Freiherr`, `St`, `Smith van der Berg`, `de Mesnil`, `van Smith` and none, × particle runs none, `vd`, `van`, `van der`, `mc`, `de la`, `VD`, `Van`, `y`, × numerals `V v I VI Vi V. X II`, × tails `, John`, `, Jr.`, `, J.`, `, John PhD`, ` MD, John`, `, M.J.`; the head, run and numeral joined with single spaces, skipping empty ones, and the tail appended as written, each parsed as written, `.upper()` and `.lower()` under all three orders. 4,398 move, 1,466 under each order, every one a one-letter numeral (I, V or X, either case) moving from the suffix into the family with one fewer `suffix-or-name` report; no numeral of two or more letters moves. In the committed corpora only `SMITH VD V, JOHN` and `smith vd v, john` move. Of the local corpora, read with `snapshot.py --local <corpus> --base` a checkout of 401bf62e, `ctgov-officials` and `tse-donors` move none, and `fec-individuals` (1,893,964 names, written `FAMILY SUFFIX, GIVEN` in capitals) moves two, each a particle opening the part: `DU HART V, JOHN` from suffix 'V' to family 'DU HART V', and `VAN METER V, ISAAC C IV` from generation 'V, IV' to family 'VAN METER V', generation 'IV'. In FEC's writing both `V`s are most likely generations; the reading is the cost S10's count already takes for a one-word surname (`SMITH V, JOHN` keeps family 'SMITH V' on 401bf62e), accepted with it, decided on review of the two moves, and it is 1.4.0's through 2.6.0's. The first draft, which left out only particles right in front of the numeral, moved none of the three.
Loading
Loading