Repository navigation
Checklist decision: notification-localized-and-clears c0/c4 assume a per-recipient localized title — a capability the spec retired #7684
Description
Activity
Dual-label resolution (queue+finding): promoted to
pm:queue(finding stripped). Filed as a "checklist decision", but the deciding ruling already exists in the contract:packages/spec/src/system/translation.zod.ts:341(verifiedorigin/main@6a9dec6) declaresnotificationsa retired dialect with no translation group, and #3403 moved notification copy to app-authored flows. Rewrite-vs-waive of c0/c4 is a checklist-author judgment inside the devx lane, not a maintainer product call — the #4829 rule (a made decision does not go back to the inbox) applies.domain:devxstands.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
huangyiirene commented
on Aug 11, 2026 CollaboratorAuthorMore actionsClaim: PM loop round 3 (devx seat, 2026-08-11 term) — wave 3 unit C, packed with #7686 (same i18n area file; full claim block on #7686). Branch
claude/issue-7686-7684-i18n-checklist; sessionsession_01GZKbx4xyF7U5WXj6ch49BM;mode:cloud,model: opus.PM ruling on this card's "rewrite or waive c0/c4" fork (third-tier, premise-hinged): REWRITE — restate c0/c4 against the shipped contract: the notification title is the flow-authored literal string (per-recipient localization is a spec-retired capability,
translation.zod.ts:341guidance quoted in the body;sys_userhas no locale; #3403 moved assignment notifications to app-authored flows), keep the mechanical clear-half clauses as the item's substance, and record the retirement citation in the item so the next author does not re-assert the retired premise. Premise the ruling hangs on (dev verifies before editing, fork-report if false): thenotificationstranslation-key retirement guidance is still onorigin/mainand no notification-copy translation group has since been introduced. Startup-scope lens: prefer asserting the real contract over waiving into silence — a waived clause teaches nothing; a rewritten one pins the retirement.
Generated by Claude Code
huangyiirene commented
on Aug 11, 2026 CollaboratorAuthorMore actionsPointer comment — this card was packed with #7686 (same i18n area file, one branch, one PR). The full os-dev report is on #7686: #7686 (comment)
Draft PR: #7715 (
claude/issue-7686-7684-i18n-checklist), body opensFixes #7686/Fixes #7684.What this card got — the PM ruling's REWRITE, carried out. Verified against
origin/main@21888abbefore editing, as the ruling required:packages/spec/src/system/translation.zod.ts:341still carries the retirement guidance verbatim — "notificationsis the retired object-first dialect — notifications have no translation group, omit them";sys_userdeclares nolocalefield;packages/services/service-automation/src/builtin/notify-node.tscomputes the title asinterpolate(cfg.title …)against flow variables, with no locale consulted anywhere on that path;collab.assignmentsurvives only in regression pins asserting the kernel does not emit it (废弃内核内置「分配通知」(writeAssignmentNotifications),改由自动化流程承载 #3403,plugin-audit/src/audit-writers.test.ts).
No notification-copy translation group has appeared, so the fork condition did not trigger and no fork-report was warranted.
The edits on
i18n.notification-localized-and-clears(revision 2 → 3):- c0 now asserts the title is the flow-authored literal string with its
{record.*}placeholders interpolated — an English title on a Chinese session is the PASS; an unsubstituted placeholder is the FAIL. Interpolation, not translation, is what the clause tests. - c4 now asserts the title is recipient-INDEPENDENT — a per-recipient difference is the finding, since per-recipient localization of app-flow notification copy is the retired capability.
- c2/c3 untouched — the live-server
POST /notifications/readtrace and the survives-a-full-reload re-read remain the item's substance, exactly as ruled. - The retirement is cited on the item (
fixtures.knownGaps+source) so the next author cannot re-assert the premise, and two negatives were added: filing a bug over the English bell title is the misread this item now forecloses, and authoring anotificationskey to "fix" it is a FAIL of the fix. - The steps drop the unperformable "set the recipient user's locale" (no such field) for the session-locale procedure, and name the showcase flow's
task.assignednotify node instead of the retiredcollab.assignmenttrigger.
One refinement worth the PM's eye, recorded on the item rather than glossed:
plugin-audit'scollab.mentionwriter does resolve a per-recipient title (messages.mentionedYouviaresolveWriteLocale(tenantId, uid)) — through the long-declaredmessagesgroup, from a plugin writer, not the flow notify path and not anotificationsgroup. Stating "notification titles are never localized" unqualified would have been the mirror of the error this card fixes, so both directions are pinned inknownGaps.
Generated by Claude Code
- added a commit that references this issue
on Aug 17, 2026
Symptom
notification-localized-and-clearsclauses c0 and c4 assume a per-recipient localized notification title. On a stock showcase app the title renders as the literal English stringNew task assigned: Build homepage, so both clauses landblocked(fixture). The mechanical half of the item passes cleanly (POST /notifications/read→ 200 andread/all→ 200 against the running Hono server, clear survives a full reload); only the localized-title premise is unprovable.Root cause
This is a checklist decision, not a code fix. The title is a literal English string authored in the showcase flow's notify node (
examples/app-showcase/src/automation/flows/index.ts~160-166), not a translation key. There is no translation group for notification copy at all:notificationsis a retired top-level translation key whose own spec guidance reads "notificationsis the retired object-first dialect — notifications have no translation group, omit them" (packages/spec/src/system/translation.zod.ts:341, verified onorigin/main). Platform-side assignment notifications were deliberately moved to app-authored flows (#3403).sys_usercarries nolocalefield, and the notify path never consults a recipient locale.As written, c0/c4 assume a capability the spec retired — unprovable on any stock app.
Decision needed: rewrite or waive c0/c4. (Also cross-referenced from the consolidated checklist-maintenance card for this run.)
Reproduction
Not a code defect. To observe: trigger the showcase task-done flow; the notification title is the literal flow-authored English string, identical regardless of the recipient's or session's locale.
Source
Extracted from the QA run #7640 (framework 92f26f7, console 09987b680).