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
Add a guard that C1's "left to the listing form" shortcut matches what assign then reads #555
C1's run test (_segment.py, #544) declines to flip a comma when every listed member of the run is written in capitals in a mixed-case name (the settled path). It hands the part to the family-comma path on a promise: that path already reads the part wholly as credentials, so the flip would change nothing.
John Smith, PhD MA → given John, family Smith, suffix "PhD MA", no report
The promise is kept by a partial mirror. Segment runs before group, so it can't ask assign's segment_suffix_reading directly. Instead it approximates the answer with isupper(), listed membership and ambiguous_lean. Nothing checks that the approximation and assign's actual reading still agree. Commit 6 of #552 already moved assign's side of that boundary: a dual opening the given part now stops the anchor (Smith, Ms MD Ma). A future change there, or to the lean, could break the promise without failing any test. A run would then be declined as settled and read back into the name fields, silently.
Measured today (PR #552 tip, 2026-09-28): runs of 2–3 words, each a capitals member (MA BA ED DO JD MENG LAC) or a suffix word (PhD MD MS Jr Esq. Sr III Ms), with at least one member, behind John Smith, and Jane Doe, . That is 6,048 texts. 20 put a post-comma word in a name field, all ending in DO DO, which is the recorded rules.md#S2 limit where the P2 chain takes the particle. Master reads all 20 the same way. So the promise holds today; this issue is about keeping it.
Proposed guard: for every run the C1 test declines on the settled path, assert that assign's reading of that part has every word in SUFFIX or TITLE, with the DO DO P2-chain shape as the one recorded exception. Record a negative control, e.g. dropping the isupper() condition, and how many cases it fails. Join an existing grid's walk if one reaches these shapes (AGENTS.md: invariant tests share one parsed grid), or build this small one and state its runtime.
Activity
test(#555): name the DO DO exception a defect (#562), widen the grid
test(#555): correct the #562 comment's mechanism, date the grid count
Merge pull request #561 from derek73/test/guard-coverage-555
test(derek73#555): guard C1's settled-path shortcut against assign's …