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
{{ message }}
Repository navigation
Rethink the credential-run rule (S2): read a name's trailing run once, over name units, and bind it before any join #614
Why.#611 asked whether S2, the suffix and credential run, grew by patching. It did. All 35 decisions.md#S2 entries date from 2026-09-14 on, and about 11 add a stop or an exception: the capitals lean twice, the roman-chunk retirement, two dotted-shape gates, #531's do, #544's anchor clause with its boundaries and second exception, #563's paired initials, #573's particle-led given part, and #602's run with its refusals. The pattern is M2's: each issue adds an exception to the count or the lean, then boundaries on the exception.
The decisive sign is there too, and it has one root. The words-to-spare count is taken over PIECES (_pieces.py, k >= 3), and group makes and merges pieces. So every stage that joins has to re-run S2 over the piece lists it is about to produce:
Group's particle chain re-asks the peel after its own merges, and if the answer moved it rolls back and chains again. It restarts on John van Mc, anh van do, Doe, John van DO, John Smith, PhD vd DO and PhD DO DO, among others.
The report comes from four stages: segment, group, assign and post_rules.
Measured over the 1,514 corpus names, the peel runs 0–5 times a parse: 590 names run it twice, 228 three times, 47 four or five times (abdul rahman MA runs it five times).
Proposed statement (sketch).
Read once. At the head of group, after classify and before any merge, compute the tail reading over UNITS built from tags (the way name_word_count already counts), not over pieces. Units don't change when group joins, so one count answers whatever P2 and P5 later do. That one read covers the peel, the lean, the anchors, the trailing title chain to its fixed point, and Should a name word after a credential join the suffix? John Smith PhD Jones reads middle Smith PhD #602's run.
the separate credential_run step each reader applies today.
segment keeps the comma decision, or hands it to the C1 rethink.
Order. After the C1 rethink (#613), which should build the unit-based count this one shares. Brought into 2.4 on 2026-10-05; it moves P2's chain stop, P5's reserve, P6's precedence and M2's boundary together, which is more than #601 moved.
Risky shapes, to pin before prototyping:
the 11 chain-restart inputs, and Freiherr von Berg Ma / Freiherr von Berg MA (rules.md#P2 examples);
Why. #611 asked whether S2, the suffix and credential run, grew by patching. It did. All 35 decisions.md#S2 entries date from 2026-09-14 on, and about 11 add a stop or an exception: the capitals lean twice, the roman-chunk retirement, two dotted-shape gates, #531's
do, #544's anchor clause with its boundaries and second exception, #563's paired initials, #573's particle-led given part, and #602's run with its refusals. The pattern is M2's: each issue adds an exception to the count or the lean, then boundaries on the exception.The decisive sign is there too, and it has one root. The words-to-spare count is taken over PIECES (
_pieces.py,k >= 3), and group makes and merges pieces. So every stage that joins has to re-run S2 over the piece lists it is about to produce:John van Mc,anh van do,Doe, John van DO,John Smith, PhD vd DOandPhD DO DO, among others.tail_readingon both views to compare them. Sharing the function made this safe (abdul Smith Jr Maloses the family name — P5's reserve does not mirror S2's bare-acronym fork #425), but it is still a model of assign.suffix-or-namereport, because the piece assign would have reported on is gone after the merge.attaches_the_lead, Why doesSMITH VD MA, JOHNread familySMITH MAwithVDas a suffix? #573) and P6's attachment (particle_tail(..., sticky_from)).trailing_candidatesis a hand-kept superset of the peel's and the chain's admissions, held in step by a grid test (Two stages hand-copy each other's trailing-word logic after #601/#602; share one predicate each #610).Measured over the 1,514 corpus names, the peel runs 0–5 times a parse: 590 names run it twice, 228 three times, 47 four or five times (
abdul rahman MAruns it five times).Proposed statement (sketch).
name_word_countalready counts), not over pieces. Units don't change when group joins, so one count answers whatever P2 and P5 later do. That one read covers the peel, the lean, the anchors, the trailing title chain to its fixed point, and Should a name word after a credential join the suffix?John Smith PhD Jonesreads middleSmith PhD#602's run.vd,mc,do), is a credential only where an unambiguous credential stands in front of it or its capitals say so. That one condition is meant to replace ShouldDoe, John MAreadMAas a credential, as 1.4.0 did, or at least report the fork? #531's stop, Should a credential run after a comma keep its comma when the last word is an ambiguous acronym?John Smith, PhD MEngreads firstPhD, lastJohn Smith#544's second exception and Why doesSMITH VD MA, JOHNread familySMITH MAwithVDas a suffix? #573's carve-out.That would delete:
trailing_candidates;credential_runstep each reader applies today.segmentkeeps the comma decision, or hands it to the C1 rethink.Order. After the C1 rethink (#613), which should build the unit-based count this one shares. Brought into 2.4 on 2026-10-05; it moves P2's chain stop, P5's reserve, P6's precedence and M2's boundary together, which is more than #601 moved.
Risky shapes, to pin before prototyping:
Freiherr von Berg Ma/Freiherr von Berg MA(rules.md#P2 examples);abdul …shapes, where the 2026-09-15 accepted item and its Should a credential run after a comma keep its comma when the last word is an ambiguous acronym?John Smith, PhD MEngreads firstPhD, lastJohn Smith#544 reversal sit;_CALL_BASELINE). It should fall, but measure it.Measure it the way #601 was measured:
Not in scope: changing what any name reads. This is a mechanism rethink, and any move it makes has to be argued on its own.
Related: #611, #613 (the C1 rethink), #601, #602, #610, #531, #544, #573.