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
AGENTS.md §8: "English is the source language. Every authored label gets an en entry; zh-CN is hand-translated. Do not hard-code display text in a hook or flow."
A notify node has exactly two content paths, and they are mutually exclusive by schema (NotifyConfigSchema.superRefine):
template — names a sys_email_template bundle; the delivery path resolves (name, recipient locale) per recipient at send time. This is the localizable path.
inline title + message — sent to every recipient verbatim. The schema's own .describe() calls this "not localizable".
defineStack accepts an emailTemplates collection (stack.zod.ts, merged with concat), but this app wires no barrel for one: there is no src/email-templates/, and objectstack.config.ts — the file a feature branch must not edit — lists no emailTemplates key. So the localizable path is unreachable from a feature branch, and §8 cannot be followed by any flow that notifies anybody.
The three reminder sweeps landed in #11 therefore carry inline English title/message. That is a declared deviation, recorded in the flow file's header, not an oversight — but it is a deviation that every future notifying flow will have to repeat, and each one is a string that cannot reach the zh-CN bundle.
What closing this looks like
src/email-templates/index.ts exporting a named dulyEmailTemplates array, following the same barrel convention and the same "named array, never Object.values" reasoning as every other directory.
emailTemplates: dulyEmailTemplates in objectstack.config.ts (the one edit, made once, by whoever owns that file — same shape as the pre-created empty barrels already there).
Sequencing note: the barrel is worth pre-creating empty exactly like the others, so the config edit happens once and no later branch needs to touch it. Related to #18 (i18n bundle + CI coverage gate), which will otherwise measure coverage over a set of strings it cannot see.
AGENTS.md §8: "English is the source language. Every authored label gets an
enentry;zh-CNis hand-translated. Do not hard-code display text in a hook or flow."A
notifynode has exactly two content paths, and they are mutually exclusive by schema (NotifyConfigSchema.superRefine):template— names asys_email_templatebundle; the delivery path resolves(name, recipient locale)per recipient at send time. This is the localizable path.title+message— sent to every recipient verbatim. The schema's own.describe()calls this "not localizable".defineStackaccepts anemailTemplatescollection (stack.zod.ts, merged withconcat), but this app wires no barrel for one: there is nosrc/email-templates/, andobjectstack.config.ts— the file a feature branch must not edit — lists noemailTemplateskey. So the localizable path is unreachable from a feature branch, and §8 cannot be followed by any flow that notifies anybody.The three reminder sweeps landed in #11 therefore carry inline English
title/message. That is a declared deviation, recorded in the flow file's header, not an oversight — but it is a deviation that every future notifying flow will have to repeat, and each one is a string that cannot reach the zh-CN bundle.What closing this looks like
src/email-templates/index.tsexporting a nameddulyEmailTemplatesarray, following the same barrel convention and the same "named array, neverObject.values" reasoning as every other directory.emailTemplates: dulyEmailTemplatesinobjectstack.config.ts(the one edit, made once, by whoever owns that file — same shape as the pre-created empty barrels already there).notifynodes fromtitle/messagetotemplate+templateData.Sequencing note: the barrel is worth pre-creating empty exactly like the others, so the config edit happens once and no later branch needs to touch it. Related to #18 (i18n bundle + CI coverage gate), which will otherwise measure coverage over a set of strings it cannot see.
Found while implementing #11.
Generated by Claude Code