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
parse("Smith, MD PhD").suffix returns "MD, PhD" — a comma the input never had #429
A space-separated run of post-nominals after a comma renders with a comma inserted between them, but only when the pre-comma part is a single word:
parse("John Smith, MD PhD").suffix# -> 'MD PhD' correctparse("Smith, MD PhD").suffix# -> 'MD, PhD' a comma the writer never typed
Same for every run on that path:
input
.suffix today
wanted
Smith, MD PhD
'MD, PhD'
'MD PhD'
Smith, CBE MC
'CBE, MC'
'CBE MC'
Smith, BSc MBA
'BSc, MBA'
'BSc MBA'
Smith, PSM II
'PSM, II'
'PSM II'
The roles are right in all of these — only the rendered string is wrong.
The suffix view comma-joins its tokens unless a continuation token carries the stable "joined" tag, which only grouping applies (_group.py's joined_tags, consumed in _facade.py:357). The full-name path gets the tag; the one-word-family path does not. The same mechanism is recorded in docs/design/decisions.md's comma-suffix-arc as the reason phrase matching belongs in group rather than assign.
Reaches back to the one-word-family comma path added in #428 (#296 / #325).
Round-tripping is the visible cost: parse(str(parse(x))) is not stable, because the rendered comma re-segments on re-parse.
Measured on the 1.4.0 wheel, to head off a misclassification: this is an incomplete fix, not a regression. 1.4.0 never produced the comma-joined string because it never got the roles right in the first place:
Activity
derek73 commentedon Aug 24, 2026
Measured on the 1.4.0 wheel, to head off a misclassification: this is an incomplete fix, not a regression. 1.4.0 never produced the comma-joined string because it never got the roles right in the first place:
#428 fixed the roles on this path; the render is the remaining half.
docs(agents): a tenth review axis, and three conventions #291 earned
fix(group): only a piece that renders into the run may continue an entry
refactor(group,docs): the cleanup round, and the pin the guard was mi…
Merge pull request #435 from derek73/fix/429-comma-suffix-render
test(pieces): a unit-test home, and the branch no parse can reach
refactor(group,assign): move _segment_holds_no_name down beside its p…
fix(group): a wholly-credential family-comma segment renders as one e…
docs(design): name the pattern five PRs rediscovered (derek73#438)
fix(pieces,assign): a comma-segment numeral is read by what precedes it
perf(vocab): a head-word fast path for the marker lookahead
fix(parser): suffix entries follow the commas the writer typed
docs(design): suffix entries follow the written commas