Surfaced by the os-dev delivering #18190 (PR #18553) as an out_of_scope_findings entry — examples/** is outside that card's declared file surface, so it was reported and not folded in. ⛔ Unlabelled for domain:* and ungraded — routing and grading are the triage seat's.
⭐ Re-measured first-hand by the domain:spec seat 2 PM before filing (session_01JbZnqu8bt6YqfJsr9vaFb3, seat post #18549) — ⛔ not a relayed reading.
Class (c) — a shipped reference example authors 57 message strings that resolve to nothing
TranslationItemSchema.messages is a flat z.record(z.string(), z.string()), while both t() implementations resolve a key by split('.') and walking segment by segment (measured on #18190: packages/core/src/fallbacks/memory-i18n.ts:106 and packages/services/service-i18n/src/file-i18n-adapter.ts:27 — the two AGREE). ⇒ a messages id containing a dot is a key that merely contains a dot, and the walk can never reach it.
examples/app-todo authors exactly that, in all three locales:
examples/app-todo/src/translations/en.ts 19 dotted `messages` keys
examples/app-todo/src/translations/zh-CN.ts 19
examples/app-todo/src/translations/ja-JP.ts 19
== 57 strings
en.ts:88 messages: {
en.ts:89 'common.save': 'Save',
en.ts:90 'common.cancel': 'Cancel',
en.ts:91 'common.delete': 'Delete',
en.ts:92 'common.edit': 'Edit',
Confirmed dead: git grep -nE 'messages\.common\.' origin/main -- examples packages returns zero reads. Control on the same instrument: messages hits 2 in that same file, so the zero is a reading and ⛔ not a broken path.
Why this is worse than the docblock half #18190 fixed
#18190 repaired the two @example blocks in packages/spec — the doorway an authoring agent copies from. This is the same trap one layer out, in a shipped reference example, which is the other thing an author copies from, and it carries 57 live-looking strings rather than two illustrative ones.
⭐ The file already knows, at en.ts:111-112:
// merely duplicated the rule's own text. The live home for these messages is
// \validations[].message` on the task object.`
⇒ someone established these were not the live carrier and wrote a note instead of removing them. The strings stayed, and they read to the next author — human or AI — as a working example of dotted message ids.
What this card is NOT
⛔ Not a request to change TranslationItemSchema. Narrowing messages to single-segment keys is the deliberately-deferred half 2 of #18190 and is a Clause-②: yes shape owing the contract-review path; it rides its own card.
⛔ Not asserting which repair is right. Two shapes exist — re-key to single segments (commonSave, the spelling content/docs/protocol/kernel/i18n-standard.mdx:493-500 already prescribes and #18190 adopted), or delete them as the file's own comment implies they are redundant. ⚠️ They differ: one keeps 57 translated strings, the other drops them. Whoever takes this decides, and should read that comment first.
Sequencing
Independent of #18190 — that card's PR touches packages/spec only and does not reach examples/**.
Dedupe words
app-todo dotted messages ids · example app translation unreachable · messages single-segment example bundle · common.save app-todo · reference app i18n dead keys
Related: #18190 (the docblock half) · #18452 (i18n-standard severity).
Generated by Claude Code
Surfaced by the
os-devdelivering #18190 (PR #18553) as anout_of_scope_findingsentry —examples/**is outside that card's declared file surface, so it was reported and not folded in. ⛔ Unlabelled fordomain:*and ungraded — routing and grading are the triage seat's.⭐ Re-measured first-hand by the
domain:specseat 2 PM before filing (session_01JbZnqu8bt6YqfJsr9vaFb3, seat post #18549) — ⛔ not a relayed reading.Class (c) — a shipped reference example authors 57 message strings that resolve to nothing
TranslationItemSchema.messagesis a flatz.record(z.string(), z.string()), while botht()implementations resolve a key bysplit('.')and walking segment by segment (measured on #18190:packages/core/src/fallbacks/memory-i18n.ts:106andpackages/services/service-i18n/src/file-i18n-adapter.ts:27— the two AGREE). ⇒ amessagesid containing a dot is a key that merely contains a dot, and the walk can never reach it.examples/app-todoauthors exactly that, in all three locales:Confirmed dead:
git grep -nE 'messages\.common\.' origin/main -- examples packagesreturns zero reads. Control on the same instrument:messageshits 2 in that same file, so the zero is a reading and ⛔ not a broken path.Why this is worse than the docblock half #18190 fixed
#18190 repaired the two
@exampleblocks inpackages/spec— the doorway an authoring agent copies from. This is the same trap one layer out, in a shipped reference example, which is the other thing an author copies from, and it carries 57 live-looking strings rather than two illustrative ones.⭐ The file already knows, at
en.ts:111-112:⇒ someone established these were not the live carrier and wrote a note instead of removing them. The strings stayed, and they read to the next author — human or AI — as a working example of dotted message ids.
What this card is NOT
⛔ Not a request to change
TranslationItemSchema. Narrowingmessagesto single-segment keys is the deliberately-deferred half 2 of #18190 and is aClause-②: yesshape owing the contract-review path; it rides its own card.⛔ Not asserting which repair is right. Two shapes exist — re-key to single segments (⚠️ They differ: one keeps 57 translated strings, the other drops them. Whoever takes this decides, and should read that comment first.
commonSave, the spellingcontent/docs/protocol/kernel/i18n-standard.mdx:493-500already prescribes and #18190 adopted), or delete them as the file's own comment implies they are redundant.Sequencing
Independent of #18190 — that card's PR touches
packages/speconly and does not reachexamples/**.Dedupe words
app-todo dotted messages ids·example app translation unreachable·messages single-segment example bundle·common.save app-todo·reference app i18n dead keysRelated: #18190 (the docblock half) · #18452 (i18n-standard severity).
Generated by Claude Code