You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implemented in #609 (with #602). The tables below show the branch's readings. Where the shipped behavior differs from the prototype's, the row says so.
Why. M2 grew by patching, and it is now one of the longest rules in rules.md. Each of #424, #533, #535, #538 and #549 added a stop, an exception or a release check, and the decisions.md entry runs to about 13,000 words. The rule scans forward from the marker and stops at the first suffix-looking word. Every later fix repairs what that stop got wrong:
The numeral, credential and title stops are each asked twice.
Some of the rule's examples also describe input nobody writes. Jane née Jones Smith came in with the first design (2026-07-03) on an unsourced claim about running text. The differential corpus holds no real-world name of that shape, and today it reads family Jane.
Proposed statement. A prototype measured this; see the comments below.
Where a marker counts. A maiden marker is a marker only where it stands in the part of the name that holds the family name, and the word straight before it is a name word of that part:
With no comma, that part is the whole name.
With a family comma, it is the part before the comma, so Doe nee Smith, Jane takes a maiden name and Doe, Jane nee Smith does not.
A word in the leading title run, a suffix, or a connective is not a name word.
Having a name somewhere before the marker is not enough. In Jane Doe PhD nee Smith the word straight before nee is a suffix, so nee is an ordinary word.
A particle before the marker is a name word: with nothing after it to attach to, it isn't working as a particle there. That keeps Mai Le née Nguyen and Anh Do née Tran.
A suffix word opening the name is a name word, because a suffix never opens the string (S2). That keeps abd née Jones.
Anywhere else the marker is an ordinary word. The condition is positional, not about roles: under FAMILY_FIRST, Smith Jane née Jones has its marker after the given name and keeps working, as Russian document order (Иванова Анна урожд. Петрова) and 旧姓 need.
What it takes. Read the end of the name as if the clause weren't written, with the trailing rule (the suffix peel and the title chain) and before any join: the part before the marker, plus the suffix- and title-shaped words at the end. Whatever trailing run that reading finds ends the clause. The marker takes every word between itself and that run, always including the first word after it. The marker itself is dropped.
Before a family comma, no trailing rule reads the part, and the family part takes a suffix word from anywhere in it. There the clause ends at the first suffix word and hands the rest back to the family part, as today, so Doe née Smith PhD Prof., Jane reads as Doe PhD Prof., Jane does.
The run is bound. Where a trailing rule reads the part, the take consumes the run and gives each word the suffix or title role the reading found. No later join can reach into it.
The release invariant holds by construction. What the clause gives up is given its suffix or title role directly.
Gone: the double asking, the release check's join modelling (P2 chain, P5 bound join, P6 attachment), and the link exception. A connective in the middle of the clause isn't a stop.
"A maiden clause doesn't change how the trailing rule reads the end of the name" is now the rule itself, not a property each stop has to defend. The test suite already pins it. It is the trailing rule's reading, not the full parse's: where a particle chain would take the words in the clause-free name, binding (point 3) keeps them suffixes and titles.
Degenerate input follows from that one principle. No reading of it is designed for.
Examples. Both columns are measured. "Today" is master at aa401d8. "Proposed" is the prototype's variant 7 (proto/issue-601-m2-rethink, local).
Input
Today
Proposed
Jane Smith née Jones
maiden Jones
unchanged
Maria López née García Pérez
maiden García Pérez
unchanged
Doe nee Smith, Jane
maiden Smith
unchanged
Smith Jane née Jones (FAMILY_FIRST)
maiden Jones
unchanged
Mai Le née Nguyen
maiden Nguyen
unchanged
Jane Doe nee Puig i Soler
maiden Puig i Soler (link exception)
unchanged, with no exception needed
Jane Doe nee Smith MA Prof.
maiden Smith, suffix MA, title Prof.
unchanged
Doe née Smith PhD Prof., Jane
family Doe Prof., suffix PhD, maiden Smith
unchanged (as Doe PhD Prof., Jane reads)
Anh Do geb. van Dyke Smith Rev.
maiden van Dyke Smith Rev.
maiden van Dyke Smith, title Rev.
Mai Le geb. Ma Jones Prof.
maiden Ma Jones Prof.
maiden Ma Jones, title Prof. (MA Jones the same: the first word is always taken)
Jane Doe nee Smith DO DO
maiden Smith DO DO
maiden Smith, suffix DO DO
Dr. nee Smith PhD Prof.
family PhD, maiden Smith
given nee, family Smith, suffix PhD, title Dr. Prof.
Dr. nee Smith i MA
family i, maiden Smith
given nee, family Smith, suffix i MA
John nee Prof. ba MA
maiden Prof. ba MA
maiden Prof. ba, suffix MA (as John ba MA reads)
Jane van der Berg nee Prof. King. MA
maiden Prof. King., suffix MA
maiden Prof., title King., suffix MA
Jane Doe nee Ma DO Rev.
maiden Ma DO, title Rev.
maiden Ma, suffix DO, title Rev.
Doe, Jane nee Smith
maiden Smith
middle nee Smith
Jane Doe PhD nee Smith
maiden Smith, suffix PhD
suffix PhD nee Smith (the marker is a word, and #602's run takes it in)
Jane Doe Jr. nee Smith
maiden Smith, suffix Jr.
middle Doe Jr. nee, family Smith suffix Jr. nee Smith: the marker is a word, and #602's run takes it in
Smith, John, PhD née Jones
maiden Jones
suffix PhD née Jones
Jane Smith née V
family née, suffix V
maiden V
Jane Doe nee Smith PhD Smith
middle Doe PhD, family Smith, maiden Smith
maiden Smith PhD Smith (see #602) maiden Smith, suffix PhD Smith: the clause-free name's credential starts #602's run, and the take consumes it
Accepted consequences.
Family, Given née Maiden stops taking a maiden name. Callers use a delimited clause (Doe, Jane (née Smith)) or maiden_delimiters.
A given name with no current surname needs delimiters.Mary née Jones keeps M4's reading, family Mary.
A marker after a title, a suffix or a connective is a word. All three shapes are junk input.
A word that is also a credential reads the way the trailing rule reads it.JANE Q. DOE GEB. LE DO DO gives suffix DO DO. This is not how the full parse reads JANE Q. DOE DO DO, where the particle chain takes the pair as family DO DO: binding keeps that chain out of the released run. Jane van der Berg nee Prof. King. MA differs from its clause-free name the same way (Jane van der Berg King. MA reads family van der Berg King.).
Found while implementing: a trailing numeral is read by its shape. The prototype read the clause's last word without the numeral fork, so John née Jones Smith VI kept VI in the maiden name. The branch asks the fork, giving maiden Jones Smith, suffix VI.
The given-only head. Kept as a rules.md#M2 boundary example: Jane née Jones Smith gives family Jane, maiden Jones Smith. That is degenerate input, so no reading is designed for it.
Jane Smith née V. Accepted as maiden V. The first word after the marker is always taken, a lone numeral included. Recorded in decisions.md#M2.
How we'll know.
Triage the 108 case and facade rows the prototype fails (done; see the triage comment).
Implemented in #609 (with #602). The tables below show the branch's readings. Where the shipped behavior differs from the prototype's, the row says so.
Why. M2 grew by patching, and it is now one of the longest rules in rules.md. Each of #424, #533, #535, #538 and #549 added a stop, an exception or a release check, and the decisions.md entry runs to about 13,000 words. The rule scans forward from the marker and stops at the first suffix-looking word. Every later fix repairs what that stop got wrong:
Puig i Solertogether.Doe, Jane nee Smith MAreadMAas a credential? The maiden name keeps it, where it gives upPhDandJr.#533) asks of every stop whether the name left standing reads what it gave up as post-nominals, and models every join that might absorb those words. Should a maiden clause keep a credential it would hand to a name part?Dr. nee Smith PhD Prof.reads familyPhD#548 is that invariant failing at the one stop that never checks it.Some of the rule's examples also describe input nobody writes.
Jane née Jones Smithcame in with the first design (2026-07-03) on an unsourced claim about running text. The differential corpus holds no real-world name of that shape, and today it reads familyJane.Proposed statement. A prototype measured this; see the comments below.
Where a marker counts. A maiden marker is a marker only where it stands in the part of the name that holds the family name, and the word straight before it is a name word of that part:
Doe nee Smith, Janetakes a maiden name andDoe, Jane nee Smithdoes not.Jane Doe PhD nee Smiththe word straight beforeneeis a suffix, soneeis an ordinary word.Mai Le née NguyenandAnh Do née Tran.abd née Jones.Anywhere else the marker is an ordinary word. The condition is positional, not about roles: under
FAMILY_FIRST,Smith Jane née Joneshas its marker after the given name and keeps working, as Russian document order (Иванова Анна урожд. Петрова) and旧姓need.What it takes. Read the end of the name as if the clause weren't written, with the trailing rule (the suffix peel and the title chain) and before any join: the part before the marker, plus the suffix- and title-shaped words at the end. Whatever trailing run that reading finds ends the clause. The marker takes every word between itself and that run, always including the first word after it. The marker itself is dropped.
Before a family comma, no trailing rule reads the part, and the family part takes a suffix word from anywhere in it. There the clause ends at the first suffix word and hands the rest back to the family part, as today, so
Doe née Smith PhD Prof., Janereads asDoe PhD Prof., Janedoes.The run is bound. Where a trailing rule reads the part, the take consumes the run and gives each word the suffix or title role the reading found. No later join can reach into it.
Unchanged:
What falls out.
Examples. Both columns are measured. "Today" is master at aa401d8. "Proposed" is the prototype's variant 7 (
proto/issue-601-m2-rethink, local).Jane Smith née JonesMaria López née García PérezGarcía PérezDoe nee Smith, JaneSmith Jane née Jones(FAMILY_FIRST)Mai Le née NguyenJane Doe nee Puig i SolerPuig i Soler(link exception)Jane Doe nee Smith MA Prof.Doe née Smith PhD Prof., JaneDoe Prof., suffix PhD, maiden SmithDoe PhD Prof., Janereads)Anh Do geb. van Dyke Smith Rev.van Dyke Smith Rev.van Dyke Smith, titleRev.Mai Le geb. Ma Jones Prof.Ma Jones Prof.Ma Jones, titleProf.(MA Jonesthe same: the first word is always taken)Jane Doe nee Smith DO DOSmith DO DODO DODr. nee Smith PhD Prof.PhD, maiden Smithnee, family Smith, suffix PhD, titleDr. Prof.Dr. nee Smith i MAi, maiden Smithnee, family Smith, suffixi MAJohn nee Prof. ba MAProf. ba MAProf. ba, suffix MA (asJohn ba MAreads)Jane van der Berg nee Prof. King. MAProf. King., suffix MAProf., titleKing., suffix MAJane Doe nee Ma DO Rev.Ma DO, title Rev.Doe, Jane nee Smithnee SmithJane Doe PhD nee SmithPhD nee Smith(the marker is a word, and #602's run takes it in)Jane Doe Jr. nee SmithmiddlesuffixDoe Jr. nee, family SmithJr. nee Smith: the marker is a word, and #602's run takes it inSmith, John, PhD née JonesPhD née JonesJane Smith née Vnée, suffix VJane Doe nee Smith PhD SmithDoe PhD, family Smith, maiden Smithmaidenmaiden Smith, suffixSmith PhD Smith(see #602)PhD Smith: the clause-free name's credential starts #602's run, and the take consumes itAccepted consequences.
Family, Given née Maidenstops taking a maiden name. Callers use a delimited clause (Doe, Jane (née Smith)) ormaiden_delimiters.Mary née Joneskeeps M4's reading, family Mary.JANE Q. DOE GEB. LE DO DOgives suffixDO DO. This is not how the full parse readsJANE Q. DOE DO DO, where the particle chain takes the pair as familyDO DO: binding keeps that chain out of the released run.Jane van der Berg nee Prof. King. MAdiffers from its clause-free name the same way (Jane van der Berg King. MAreads familyvan der Berg King.).John née Jones Smith VIkeptVIin the maiden name. The branch asks the fork, giving maidenJones Smith, suffixVI.Settled (formerly open questions).
John Smith PhD Jonesreads middleSmith PhD#602:Jane Doe nee Smith PhD Smithgives maiden Smith, suffixPhD Smith.Jane née Jones Smithgives family Jane, maidenJones Smith. That is degenerate input, so no reading is designed for it.Jane Smith née V. Accepted as maiden V. The first word after the marker is always taken, a lone numeral included. Recorded in decisions.md#M2.How we'll know.
Triage the 108 case and facade rows the prototype fails(done; see the triage comment).Rewrite the rules.md M2 statement and examples.(done in Maiden marker counts only behind a surname; a credential starts a suffix run (#601, #602) #609)Run the differential gate at every ledgered baseline.(done in Maiden marker counts only behind a surname; a credential starts a suffix run (#601, #602) #609; every gate exits 0)Rerun Should(done: with Should a name word after a credential join the suffix?Jane Doe nee Smith Prof.readProf.as a title? The maiden name keeps it, whereJane Doe Prof.gives the title #535's grids, the plausible-input grid and the corpus.John Smith PhD Jonesreads middleSmith PhD#602 switched off, the branch reads all of those texts exactly as the prototype's variant 7 did, 0 differences, and variant 7 held 0 violations on ShouldJane Doe nee Smith Prof.readProf.as a title? The maiden name keeps it, whereJane Doe Prof.gives the title #535's grids)Exclusions. No change to:
Supersedes: #548. Related: #533, #535, #538, #549, #445, #602.