Skip to content

Add a guard that C1's "left to the listing form" shortcut matches what assign then reads #555

Description

@derek73

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

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions