Observational, cosmetic, no behaviour attached. Noticed while consuming the catalog from plugin-approvals for #11993; not fixed there, because that card holds zero packages/spec.
The measurement
Every zh-CN entry in BUILTIN_OPERATION_MESSAGES (packages/spec/src/system/operation-message.ts) separates clauses with U+002C (the ASCII comma) and ends with U+3002 (the full-width period) — a mix within one sentence. Codepoints read off the approval_recall_not_submitter entry:
只有提交人可以撤回这条审批请求,如需撤回请联系提交人或管理员。
^ U+002C ^ U+3002
All five situation keys and the four delete_restricted* variants share the pattern.
The platform's other shipped zh-CN user copy uses the full-width forms throughout — e.g. packages/plugins/plugin-approvals/src/translations/zh-CN.objects.generated.ts:
撤回该请求?撤回后审批人将无法继续处理,记录随即解锁。
— U+FF0C and U+FF1F.
Why it is worth a card rather than nothing
These are strings a business user reads in a toast, and the two surfaces sit next to each other on the same screen: an approval action's own description renders with full-width punctuation, and a refusal from the same feature renders with the ASCII one. In Chinese typography the half-width comma reads as a lapse rather than as a style, and it is the kind of thing that gets copied outward — the catalog is explicitly the seat every future refusal is meant to land in, so its house style becomes the platform's.
Related but not a duplicate: #12081 was ASCII commas in re-wrapped Chinese PROSE (doc source, soft-break rendering), is closed, and does not touch this catalog.
Scope note
The English, ja-JP and es-ES rows are unaffected. The fix is a punctuation pass over the zh-CN block plus whatever pin tests quote those literals — packages/spec/src/system/operation-message.test.ts quotes at least one, and packages/plugins/plugin-approvals/src/recall-refusal-user-copy.test.ts (landing with #11993) quotes the recall sentence as the operator-visible pin. Both would move with it.
Measured on origin/main at 15bf9e859. Filed unassigned by the domain:services dev seat.
Observational, cosmetic, no behaviour attached. Noticed while consuming the catalog from
plugin-approvalsfor #11993; not fixed there, because that card holds zeropackages/spec.The measurement
Every
zh-CNentry inBUILTIN_OPERATION_MESSAGES(packages/spec/src/system/operation-message.ts) separates clauses with U+002C (the ASCII comma) and ends with U+3002 (the full-width period) — a mix within one sentence. Codepoints read off theapproval_recall_not_submitterentry:All five situation keys and the four
delete_restricted*variants share the pattern.The platform's other shipped
zh-CNuser copy uses the full-width forms throughout — e.g.packages/plugins/plugin-approvals/src/translations/zh-CN.objects.generated.ts:— U+FF0C and U+FF1F.
Why it is worth a card rather than nothing
These are strings a business user reads in a toast, and the two surfaces sit next to each other on the same screen: an approval action's own description renders with full-width punctuation, and a refusal from the same feature renders with the ASCII one. In Chinese typography the half-width comma reads as a lapse rather than as a style, and it is the kind of thing that gets copied outward — the catalog is explicitly the seat every future refusal is meant to land in, so its house style becomes the platform's.
Related but not a duplicate: #12081 was ASCII commas in re-wrapped Chinese PROSE (doc source, soft-break rendering), is closed, and does not touch this catalog.
Scope note
The English,
ja-JPandes-ESrows are unaffected. The fix is a punctuation pass over thezh-CNblock plus whatever pin tests quote those literals —packages/spec/src/system/operation-message.test.tsquotes at least one, andpackages/plugins/plugin-approvals/src/recall-refusal-user-copy.test.ts(landing with #11993) quotes the recall sentence as the operator-visible pin. Both would move with it.Measured on
origin/mainat15bf9e859. Filed unassigned by thedomain:servicesdev seat.