Skip to content

Move mc and ste to never-given, add the Spanish/Portuguese articles (#360) - #393

Open
derek73 wants to merge 1 commit into
masterfrom
fix/360-particle-membership
Open

Move mc and ste to never-given, add the Spanish/Portuguese articles (#360)#393
derek73 wants to merge 1 commit into
masterfrom
fix/360-particle-membership

Conversation

@derek73

@derek73 derek73 commented Aug 17, 2026

Copy link
Copy Markdown
Owner

Closes #360.

Membership: never-given 28 → 33. mc and ste move out of the
ambiguous half; los, las and das are added, having been absent
from the vocabulary entirely.

Mc Donald         given='Mc'      →  family='Mc Donald'
Ste Marie         given='Ste'     →  family='Ste Marie'
Maria das Neves   family='Neves'  →  family='das Neves'
Anjali Das        family='Das'       unchanged  ← negative control

C-i's positional qualifier is what makes das safe

Das is a borne Bengali surname — but a trailing one, and the
leading-particle rule never reaches that position. So never-given das
leaves Anjali Das and Bimal Das alone while giving Maria das Neves
back the particle it was losing. Under C-i's first draft, which asked
only whether a bearer exists anywhere, this fix would have been
declined.

What #360 actually yielded

Its premise is that the split was never curated, so many members are
probably misfiled. Applying C-i with the corpora as evidence: the
conservative default is correct for 37 of 39.

  • 12 members are attested leading in the corpora and now carry that
    evidence: Al Gore, Della Reese, Mac Miller, La Shawn, San San Chiou,
    Te Awanui-a-Rangi, Van Johnson, Abu Bakr, Del Toro, Dela Cruz, Di
    Caprio, von Braun. Plus le/du/bin/do on Vietnamese and
    Chinese surnames and Provide constants in non-Latin scripts (Cyrillic, Greek, Arabic, Hebrew) #269's recorded judgment.
  • von is the instructive one. von Braun is misparsed today and
    it still stays ambiguous, because Von Miller is a real bearer in
    exactly the acting position. A word can look like a pure particle, be
    misparsed as one, and still have a bearer.
  • dela stays — Dela is a short form of Adela and an African name
    meaning saviour/redeemer, so the Filipino surname particle isn't the
    only reading.
  • 15 stay bare: aan, aen, bat, bon, da, dal, den, ,
    heer, santa, tho, thoe, vande, vander, vel. No evidence
    either way, and C-i's default says leave them. A bare entry means
    unexamined, so the remaining surface stays visible without a ledger —
    recording "no evidence found" would log ignorance as a judgment.

Verification, and a caveat that matters

The differential exits 0 at all three baselines and that is not
evidence here.
Zero of 782 corpus names contain mc, ste, los,
las or das — not even Mc Donald or Ste Marie, the names this
issue is about. The population the change could have moved is empty, so
#360's request for "its own differential run so the numbers attribute to
a cause" has no numbers to attribute.

The proof is tests, and there were none before this commit:

  • the lexicon-derived class sweep picks the five new members up for free
    — it reads particles - particles_ambiguous, so membership edits
    extend it automatically
  • a new parametrized case carries the multi-word shapes plus the
    trailing-surname negative control

Both run against Lexicon.default(), not the module's reduced _LEX
a fixture omitting these words would pass while proving nothing, which
is exactly the trap that made a #391 test inert. Mutation-checked:
reverting mc fails the new case.

rules.md#P1 gains Mc Donald and de los Santos as executable
examples. 3468 tests, ruff and mypy clean.

Follow-up worth filing

corpus_issues.jsonl is generated from the tracker and predates #360,
so regenerating it would make this whole class visible to the harness.
That's a corpus refresh across every newer issue, not part of this
change.

🤖 Generated with Claude Code

…360)

Membership: never-given 28 -> 33. `mc` and `ste` move out of the
ambiguous half; `los`, `las` and `das` are added, having been absent
from the vocabulary entirely.

  Mc Donald         given='Mc'      -> family='Mc Donald'
  Ste Marie         given='Ste'     -> family='Ste Marie'
  Maria das Neves   family='Neves'  -> family='das Neves'
  Anjali Das        family='Das'       unchanged (the negative control)

C-i with its positional qualifier is what makes these safe. 'Das' IS a
borne Bengali surname, but a TRAILING one, and the leading-particle
rule never reaches that position -- so never-given 'das' leaves
"Anjali Das" and "Bimal Das" alone while giving "Maria das Neves" back
the particle it was losing. Under C-i's first draft, which asked only
whether a bearer exists anywhere, this fix would have been declined.

The 37 members that stay: 12 are attested LEADING in the differential
corpora and now carry that evidence in a comment (Al Gore, Della
Reese, Mac Miller, La Shawn, San San Chiou, Te Awanui-a-Rangi, Van
Johnson...), plus `le`/`du`/`bin`/`do` on Vietnamese and Chinese
surnames and #269's recorded judgment. `von` is the instructive one:
"von Braun" is misparsed today and it still stays ambiguous, because
Von Miller is a real bearer in exactly the acting position.

15 stay BARE: aan, aen, bat, bon, da, dal, den, dí, heer, santa, tho,
thoe, vande, vander, vel. I have no evidence either way, and C-i's
default says leave them. A bare entry means unexamined, so #360's
remaining surface is visible without a separate ledger. Recording "no
evidence found" would log my ignorance as a judgment.

VERIFICATION, and the important caveat: the differential exits 0 at
all three baselines and that is NOT evidence here. Zero of 782 corpus
names contain mc, ste, los, las or das -- not even "Mc Donald" or "Ste
Marie", the names the issue is about -- so the population the change
could have moved is empty. #360 asks for "its own differential run so
the numbers attribute to a cause"; there are no numbers to attribute.

The proof is therefore tests, and there were none before this commit.
Two now cover it: the lexicon-derived class sweep picks the five new
members up for free (it reads particles - particles_ambiguous, so
membership edits extend it automatically), and a new parametrized case
carries the multi-word shapes plus the trailing-surname negative
control. Both run against Lexicon.default() rather than the module's
reduced _LEX -- a fixture omitting these words would pass while
proving nothing, which is the trap that made a #391 test inert.
Mutation-checked: reverting `mc` fails the new case.

rules.md#P1 gains "Mc Donald" and "de los Santos" as executable
examples.

Follow-up worth filing: corpus_issues.jsonl is generated from the
tracker and predates #360, so regenerating it would make this class
visible to the harness. That is a corpus refresh across every newer
issue, not part of this change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@derek73 derek73 added the bug label Aug 17, 2026
@derek73 derek73 self-assigned this Aug 17, 2026
@codecov

codecov Bot commented Aug 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.51%. Comparing base (2023af1) to head (6389f06).

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #393   +/-   ##
=======================================
  Coverage   98.51%   98.51%           
=======================================
  Files          44       44           
  Lines        2895     2895           
=======================================
  Hits         2852     2852           
  Misses         43       43           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Mc Donald and Ste Marie read the particle as the given name

1 participant