Repository navigation
rules.md#R3's "a conjunction never initials" is unqualified: Juan de y has base y and initials J. #461
Description
Activity
- added a commit that references this issue
on Aug 30, 2026 - changed the title
[-]`initials()` initials a conjunction inside an all-particle part, where R3 says it never does[/-][+]`rules.md#R3`'s "a conjunction never initials" is unqualified: `Juan de y` has base `y` and initials `J.`[/+]on Aug 30, 2026 - added a commit that references this issue
on Sep 22, 2026 Closed by #536.
R3's clause is conditional now, and it is one rule for every group: a connective contributes nothing where it is joining, and a part holding nothing else is a part where it is joining nothing, so there it initials like any other name word. The whole part decides, never a word count.
before now Juan Velasquez y GarciaJ. V. G.unchanged, the yjoinsJon Dough andJ. D.unchanged, base Dough andJuan de y,Juan yJ.J. y., agreeing withfamily_baseJuan y GarciaJ. G.J. y. G., the middle part holds nothing elseJohn and Jane SmithJ. a. J. S.J. J. S.Duke of Edinburgh,John & JaneD. o. E.,J. &. J.D. E.,J. J.The wider half this issue measured, a given-group connective initialing, was the code not following the rule rather than the rule being wrong, and it is the half that departs from 1.4.0 (
J a J. S.). The lone-part half mostly restores 1.4.0:JUAN Y GARCIAandمحمد و عليare back in parity and two ledger rules retired. 46 corpus names move, 18 gaining a letter and 28 losing one, identically onparse().initials()andHumanName.initials().The scope notes, in order.
rules.md#R4no longer borrows its grounding from this clause: a connective in a name part keeps its lowercase as R4's own rule, case repair did not move for any name whose roles did not move, and a connective the parse read as a generation repairs as the generation (John Smith iforced givesI). The all-particle custom-lexicon shape is unchanged and still pinned intests/v2/test_render.py, its self-expiring pin rewritten to the settled rule. The readmission is keyed on a mark about the whole part, written by the same walk that writes R2's all-particle mark, so it cannot be widened by word count;reviserecomputes both.The August bullet under
R2that saidJuan y GarciaandJuan de y"may not move" is amended by a dated bullet rather than edited. Reasoning underR3andR4indocs/design/decisions.md.- added 4 commits that reference this issue
on Sep 22, 2026 - added 5 commits that reference this issue
on Oct 8, 2026
Reframed 2026-08-30. The original issue read this as
initials()failing to honorrules.md#R3's "even then" clause. A fix on that reading was implemented and then backed out of #463 — it madeinitials()disagree withfamily_baseabout the same token, which is the defect the rest of that branch removes. The clause is the question, not the code.R3 promises two things that do not agree
The first sentence says initials follow the base. The last overrides it. Where they collide, the views split:
The parse has already decided
deis a working particle andyis the base —family_particlesis'de'. Onlyinitials()disagrees.The carve-out is right where the conjunction is doing its job
Here
ylinks two surnames and must not initial. So the clause is not wrong in general; it is unqualified where it should be conditional.The proposed rule
A conjunction with nothing to join is not acting as a conjunction, exactly as a particle with nothing to join is not acting as a particle. R2 already draws that line for particles and the machinery exists. Applied evenly:
Juan Velasquez y GarciaJ. V. G.J. V. G.unchanged — theyjoinsJuan de yJ.J. y.— theyjoins nothingJuan yJ.J. y.Every row then agrees with
family_base, which is what R3's own first sentence promises.The gap is wider than this, and the wider half is reachable by default
"A CONJUNCTION never initials" is unqualified, and a conjunction in the given group has always initialed. Measured over the 1094-name differential corpus, 25 names do it today:
Unlike the family-side shape, this needs no custom vocabulary — so it can carry a
rules.mdexample line and a realdeviates:marker, which the family-side shape cannot.Scope notes for whoever takes it
rules.md#R4cross-references this clause. It grounds case repair's ungated conjunction conjunct in "the carve-out R3 states for initials". Settling R3 settles that sentence too, and R4 currently carries no trace of the question.rules.mdexample parses with the default vocabulary, whereparticles ∩ conjunctionsis empty — in the defaults and in every locale pack — so no input string reaches a conjunction inside an all-particle part. It is pinned intests/v2/test_render.pyinstead, asserting today's output so that settling this fails the suite until the pin moves.rules.md's preamble saysgrep deviates:is the deviation backlog, with three named exceptions. This gap fits none of them and can carry no marker on the family side, so R3 currently reads as fully implemented.Jon Dough andhas baseDough and;Juan y Garciahas basey Garcia. A criterion phrased as "the base has a word the initials view skipped" condemns those andVelasquez y Garciatoo. The mark is the criterion — it speaks about a whole part — not the word count.Original report follows.
rules.md#R3states a carve-out thatinitials()does not honor once a part is marked all-particle. Reproduction needs aLexiconwhere a word is in bothparticlesandconjunctions:Under the reframing above these outputs are correct — the part is all-particle, so its words are name words — and it is R3's clause that needs the condition.