Skip to content

fix(#562): a particle chain unsettles a comma credential run - #569

Merged
derek73 merged 4 commits into
masterfrom
fix/issue-562-settled-run-particle-chain
Oct 1, 2026
Merged

derek73 merged 4 commits into
masterfrom
fix/issue-562-settled-run-particle-chain

Conversation

@derek73

@derek73 derek73 commented Oct 1, 2026 •

Copy link
Copy Markdown
Owner

Closes #562.

What changes

C1's run test had a shortcut. When every ambiguous-class member of the part after the comma is listed and written in capitals in a mixed-case name, it skipped the flip and left the part to the family-comma path, which promised to read it as a credential run. That promise fails when two particles stand next to each other. Group chains them into one particle run, assign reads the part as name text, and P6 attaches the chain to the family.

Input 2.3.0 master this PR
John Smith, PhD DO DO given PhD, family DO DO John Smith same given John, family Smith, suffix PhD DO DO, reported
John Smith, DO DO DO given DO, middle DO DO same suffix DO DO DO
John Smith, PhD vd DO given PhD, family vd DO John Smith same suffix PhD vd DO
John Smith, PhD DO given PhD, family DO John Smith suffix PhD DO, silent unchanged from master

1.4.0 reads every one of these the way this PR does.

This is #562's fix 1. The settled check gives way when two particles stand side by side, and the count of name words before the comma reads the run instead. rules.md#S2 already says the capitals don't decide a chained member, so S2 stays as written. Fix 2 would have needed S2 amended.

The check is any two adjacent particles, not only a class member behind one. vd is a particle and an unambiguous suffix word, so PhD vd DO and MA vd vd misread the same way. Segment runs before classify, so the check uses classify's own particle test (_normalize(text) in lexicon.particles). It is asked only while the run is still settled, so other comma names pay no extra frame.

Measured (against master 0eadede, details in the decisions.md entry)

  • Differential corpus: 0 of the 1,453 shared names move. The gate exits 0 at all five baselines. Its only movers are the two names this PR adds, under a new fix(#562) rule in the four 2.x ledgers.
  • Settled grid (test_properties.py, 5,580 texts): 15 move, 10 of them role moves. The pinned _SETTLED_EXCEPTIONS are gone, and the count and both recorded negative controls are re-measured.
  • Wider grid (4,389 texts over PhD/MA/Ma/DO/Do/do/vd/van/Jr/MD/Ms): 30 move, 17 of them role moves. Every mover now reads given John, family Smith, with the part as suffix.

Decided in review (Derek, 2026-10-01)

  • The new reports on runs that already read correctly are kept. Examples are John Smith, vd DO, MD DO DO and Esq. DO DO. These aren't names anyone writes on purpose, so a report is the right signal. Recorded in the decisions.md entry and pinned by a case row.
  • No correct reading exists for John Smith, PhD DO. DO or PhD DO y DO, so this PR leaves them as they are.
  • John Smith, MA MA reporting is wanted, because nobody repeats MA at the end of their name on purpose. rules.md#C1's sentence that such a run "reads whole in silence" is therefore the inaccurate part, not the behavior. That sentence predates Why does John Smith, PhD DO DO read given 'PhD' and family 'DO DO John Smith'? #562, so it gets its own docs PR rather than this one.
  • Left open, as Why does John Smith, PhD DO DO read given 'PhD' and family 'DO DO John Smith'? #562 asked:
    • Smith, PhD DO DO has one name word before the comma, so it stays in listing form: given PhD, family DO DO Smith.
    • John Smith, PhD van der uses non-member particles, which never reach the run test.

Review

  • Rounds: a design-docs review ran all eleven axes and a code review ran on the first commit. The fix commit was reviewed again, and its one finding is fixed in a follow-up commit.
  • Corrections from review:
    • P2, not S2, does the join, and P2 is now in C1's interacts:.
    • Two wrong claims in the release bullet are fixed.
    • The report-only movers in decisions.md are now listed by example rather than as a complete set.

🤖 Generated with Claude Code

derek73 and others added 3 commits October 1, 2026 11:28
C1's run test left a run whose every member is listed and written in
capitals in a mixed-case name to the family-comma path, on the promise
that path reads it wholly as credentials. Two particles side by side
break that promise: group chains them into one particle run, assign
reads the part as name text, and P6 attaches the chain to the family.
'John Smith, PhD DO DO' read given 'PhD', family 'DO DO John Smith';
'John Smith, DO DO DO' given 'DO', middle 'DO DO'. rules.md#S2 already
said the capitals do not decide a chained member.

The settled check now gives way when two particles stand next to each
other in the part (classify's own particle test, asked only while the
run is still settled), so the count reads the run: two name words
before the comma flip it to the credential run, reported. That covers
a non-member particle too ('John Smith, PhD vd DO'). 1.4.0 read every
one of these names this way.

rules.md#C1 states the exception with examples; decisions.md records
the choice of #562's fix 1 over fix 2, the measurement and the two
neighbours left open. The four 2.x ledgers gain a fix(#562) rule, the
settled-grid pin and its two negative controls are re-measured, and
the ten #562 exceptions come out of it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…laims

The docs review found the C1 clause crediting S2 with a join that is
P2's (P2 joins C1's interacts:), and the release bullet wrong twice:
'John Smith, MD DO DO' read title 'MD', first 'DO', middle 'DO' at
2.3, not correctly, and DO is not the only credential that is also a
particle -- MC and VD are too. The 'no two particles side by side'
insert in C1's silence sentence is reverted: that sentence is about
runs the count leaves in the listing form, which a particle pair no
longer is.

The code review found the check reaching runs the family-comma path
did read whole ('John Smith, vd DO', 'VD DO', 'MD DO DO'): those flip
to the same fields and gain the flip's report. Accepted as C1's own
"a decision either way at this comma is reported", recorded in the
decisions entry and pinned by a case row; the segment comment no
longer claims every chain was misread. The S2 #544 entry's boundary
(5) points forward to the narrowing, and the settled test's docstring
states the old controls' exception counts exactly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nsus

The second review found 'Esq. DO DO', 'Jr. DO DO' and 'PhD. DO DO'
keeping their fields and gaining the report too -- a credential closed
by a period in front, which neither named kind covers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@derek73 derek73 added this to the 2.4 milestone Oct 1, 2026
@derek73 derek73 added the bug label Oct 1, 2026
@derek73 derek73 self-assigned this Oct 1, 2026
@codecov

codecov Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.87%. Comparing base (0eadede) to head (82f2388).
⚠️ Report is 2 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #569   +/-   ##
=======================================
  Coverage   98.87%   98.87%           
=======================================
  Files          45       45           
  Lines        3985     3990    +5     
=======================================
+ Hits         3940     3945    +5     
  Misses         45       45           

☔ 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.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@derek73
derek73 merged commit b39c370 into master Oct 1, 2026
11 checks passed
@derek73
derek73 deleted the fix/issue-562-settled-run-particle-chain branch October 1, 2026 19:02
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.

Why does John Smith, PhD DO DO read given 'PhD' and family 'DO DO John Smith'?

1 participant