Skip to content

Rethink the credential-run rule (S2): read a name's trailing run once, over name units, and bind it before any join #614

Description

@derek73

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:

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

  1. 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.
  2. Licensed by neighbor. A member of the ambiguous class, or a word that is both particle and suffix (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 Should Doe, John MA read MA as 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 MEng reads first PhD, last John Smith #544's second exception and Why does SMITH VD MA, JOHN read family SMITH MA with VD as a suffix? #573's carve-out.
  3. Bind. Group gives the tail's tokens their SUFFIX or TITLE role at the read, as Rethink the maiden-marker rule (M2): a marker stands after the current name and takes words up to the trailing suffix run #601's take does. P2, P5, M2 and P6 then can't reach them and don't need to predict them.

That would delete:

  • the chain's re-ask and rollback;
  • P5's two-view comparison;
  • group's S2 emitter;
  • trailing_candidates;
  • 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:

Measure it the way #601 was measured:

  • a prototype behind an environment switch;
  • peel runs per parse, which should drop to one;
  • the restart inputs and P5's two-view shapes;
  • the invariant grids, the five differential baselines and the case table.

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.

Activity

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

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions