Skip to content

Checklist decision: notification-localized-and-clears c0/c4 assume a per-recipient localized title — a capability the spec retired #7684

Description

@huangyiirene

Symptom

notification-localized-and-clears clauses c0 and c4 assume a per-recipient localized notification title. On a stock showcase app the title renders as the literal English string New task assigned: Build homepage, so both clauses land blocked(fixture). The mechanical half of the item passes cleanly (POST /notifications/read → 200 and read/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: notifications is a retired top-level translation key whose own spec guidance reads "notifications is the retired object-first dialect — notifications have no translation group, omit them" (packages/spec/src/system/translation.zod.ts:341, verified on origin/main). Platform-side assignment notifications were deliberately moved to app-authored flows (#3403). sys_user carries no locale field, 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).

Activity

  1. claude commented on Aug 11, 2026

    @claude
    Contributor

    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 (verified origin/main @ 6a9dec6) declares notifications a 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:devx stands.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. self-assigned this
    on Aug 11, 2026
  3. huangyiirene commented on Aug 11, 2026

    @huangyiirene
    CollaboratorAuthor

    Claim: 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; session session_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:341 guidance quoted in the body; sys_user has 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): the notifications translation-key retirement guidance is still on origin/main and 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

  4. huangyiirene commented on Aug 11, 2026

    @huangyiirene
    CollaboratorAuthor

    Pointer 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 opens Fixes #7686 / Fixes #7684.

    What this card got — the PM ruling's REWRITE, carried out. Verified against origin/main @ 21888ab before editing, as the ruling required:

    • packages/spec/src/system/translation.zod.ts:341 still carries the retirement guidance verbatim — "notifications is the retired object-first dialect — notifications have no translation group, omit them";
    • sys_user declares no locale field;
    • packages/services/service-automation/src/builtin/notify-node.ts computes the title as interpolate(cfg.title …) against flow variables, with no locale consulted anywhere on that path;
    • collab.assignment survives 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/read trace 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 a notifications key 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.assigned notify node instead of the retired collab.assignment trigger.

    One refinement worth the PM's eye, recorded on the item rather than glossed: plugin-audit's collab.mention writer does resolve a per-recipient title (messages.mentionedYou via resolveWriteLocale(tenantId, uid)) — through the long-declared messages group, from a plugin writer, not the flow notify path and not a notifications group. Stating "notification titles are never localized" unqualified would have been the mirror of the error this card fixes, so both directions are pinned in knownGaps.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions