Repository navigation
Parenthesized (née Jones) parses as a nickname where the bare née Jones gives maiden #335
Description
Activity
Two corrections to this issue's body, both measured while implementing it.
The proposed mechanism is the one to avoid. Masking the delimiter spans and reusing #274's bare-marker rule agrees with region extraction on every trailing clause and diverges on an interior one:
input extract-as-region mask-only Jane Smith (née Jones)family Smith, maidenJonessame Jane (née Jones) Smithfamily Smith, maidenJonesfamily '', maidenJones SmithM2's take runs to the end of the name, so masking discards the boundary the closing delimiter states. Extraction is also the smaller change, since extract already emits
Role.MAIDENregions and group already drops the marker inside one (#329) — the fix is a role swap at the existing emit site rather than a new masking branch."
Jane Smith (née Jones)is in no corpus" is stale. It is in two —corpus_rules.jsonlandcorpus_issues.jsonl— since #414 harvested the rules doc's examples. That sentence was the argument for deferring past 2.1, so it is worth correcting even though the conclusion (land it in 2.2) held.Two things found on the way, neither of them this issue's:
rozshipped as a maiden marker and is also the English diminutive Roz, soRosalind Roz Smithread family'', maidenSmith. That is M2's bare path and predates this issue;rozhas been removed from the default vocabulary in the same PR, restoring 1.4.0 parity.rozenástays.- A name that is only a marker clause and one name word —
Smith (née Jones)— now reads givenSmithwith an empty family, agreeing with the bareSmith née Jones. Whether that empty family is right is parse("Smith née Jones") reports no family name — a maiden clause empties a one-word name, where 1.4.0 kept it #445; 1.4.0 kept it, and the same shape has been repaired twice already atDr. Smith née Jonesreports no family name — a maiden name suppresses the title-plus-one-word rule #410 andAbd van der Berg née Jonesreports no family name — the bound-given join counts words the maiden name takes away #411.
Fixed in #446.
- added a commit that references this issue
on Aug 26, 2026 - added 7 commits that reference this issue
on Aug 29, 2026 - added a commit that references this issue
on Oct 8, 2026
The marker is right there in the clause, so the parse has enough information to know
Jonesis a birth surname — but()is anickname_delimiterspair by default andmaiden_delimitersis empty, so the clause is claimed as a nickname before anything looks inside it.Setting
Policy(maiden_delimiters=frozenset({("(", ")")}))fixes this one shape, but it is a whole-parser switch for what is really a per-clause fact, and it reroutes every parenthesis away from nicknames.Also affected
The mechanism is already in the tree
_pipeline/_extract.pyalready lets clause content overrule the delimiter's verdict._suffix_shapedis the precedent:"Andrew Perkins (MBA)"is not a nickname, because the content is suffix-shaped, so extract masks only the two delimiter spans and lets the inner content join the main token stream.The same treatment gives the requested behavior for free — strip the parens, and #274's existing bare-marker consuming rule produces exactly what
née Jonesproduces, rather than a parallel implementation that could drift from it.The predicate is small, and
extractalready importsLexiconand_normalizeand holdsstate.lexicon:Prototyped against the shapes that matter (2026-08-06):
née Jones,nee Jones,geb. Schmidt(normalization strips the period) and旧姓 佐藤all returnTrue;MBA,Janey,Jones néeand旧姓:佐藤all returnFalse.Out of scope
山田(旧姓:佐藤)stays broken. The fullwidth colon is no separatortokenizeknows, so marker and name arrive as one token and there is nothing to drop — that is the head-peel #317 tracks. Worth doing the two together, so "delimited maiden markers work" is one story rather than two partial ones.Why this is not a 2.1 change
It is a default-on parse change, and the work is in the blast radius rather than the code:
山田 花子(旧姓 佐藤)is incorpus_cjk.jsonl, so the differential gate sees it andexpected_since_2.0.0.tomlneeds the row reclassified out of the CJK order-flip rule.maiden_marker_delimited,maiden_marker_delimited_unaccented(both currently requirePolicy(maiden_delimiters=...)and would work by default) andmaiden_marker_kyusei_delimited.tools/differential/README.md's "What this gate does not cover" section uses this exact example as the thing the gate cannot see. That section stops being true.The deciding factor is the release story rather than the effort.
Jane Smith (née Jones)is Latin-only and is in no corpus, so the gate would go on reporting0 of N changed names are Latin-onlywhile a real Latin-affecting change shipped — measured-true and substantively misleading. Fixing that means adding Latin corpus rows, which makes the count non-zero, which is a change to 2.1's central claim that only CJK-bearing names moved.In 2.2 it lands clean: the new ledger picks it up as a matter of course, and the Latin diff is expected rather than an exception to a headline.
Related: #329 (the marker inside a configured maiden clause), #274 (the bare-marker consuming rule this would reuse), #317 (the glued/colon form left out of scope).