Commit 289f727
fix(app-showcase): author the task-done email at a locale the send ladder can reach (#10419)
* fix(app-showcase): author the task-done email at a locale the send ladder can reach
`examples/app-showcase/src/system/emails/index.ts` declared `locale: 'en'` on a
bare object literal. `sendTemplate`'s ladder is exact match -> `en-US` ->
(no-locale calls only) the bundle's lowest tag, with deliberately no
language-prefix matching, so `en` never satisfies `en-US`.
Measured against the old declaration, through the real loader and the real
`mapTemplateToRow` projection:
loader.load(showcase_task_done_email, en-US) -> null
sendTemplate locale='en-US' -> THREW TEMPLATE_NOT_FOUND: showcase_task_done_email (locale=en-US)
sendTemplate no locale -> RESOLVED (rung 3, the lowest-tag fallback)
`en-US` is the ladder's own second rung, so a row authored there is reachable
from every call shape; any other tag is reachable from strictly fewer. The key
is written out rather than left to the schema default because the example
corpus is what gets copied.
The literal is also now wrapped in `defineEmailTemplateDefinition(...)`, so
`EmailTemplateDefinitionSchema.parse()` runs at authoring time instead of first
at boot.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PnJHU45vPJj5UQrxe946Bx
* fix(app-showcase): resolve plugin-email's TYPES from source too, not just its runtime
The vitest source alias added alongside the locale fix closed the runtime half of
the staleness exposure. The new devDependency has a second one on the TYPE path:
unaliased, `@objectstack/plugin-email` contributes
`packages/plugins/plugin-email/dist/*.d.ts` to this app's tsc program, so
`tsc --noEmit` graded the declarations against whatever was last built rather
than against the locale ladder in this checkout.
Reproduced before the fix, on 7bfca1d:
check-type-source-resolution FAILED
✗ @objectstack/example-showcase: NEW dist-resolved type import(s) since
this entry was measured: @objectstack/plugin-email.
and after:
check-type-source-resolution OK — 76 packages with a tsconfig.json scanned;
51 registered as still resolving a workspace dep's types through `dist/`.
The remedy is the `paths` rule the gate asks for, mirroring the existing
`@objectstack/formula` entry; the shrink-only KNOWN_DIST_RESOLVED_TYPE_IMPORTS
registry is untouched. Bare key, no `*` — a tsconfig `paths` key without a star
is an exact match, while the `@objectstack/plugin-email*` spelling would fold
every subpath onto one target and type-check green against the wrong module.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PnJHU45vPJj5UQrxe946Bx
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>1 parent 91f303c commit 289f727
6 files changed
Lines changed: 190 additions & 8 deletions
File tree
- examples/app-showcase
- src/system/emails
- test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
| 43 | + | |
43 | 44 | | |
44 | 45 | | |
45 | 46 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | | - | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
5 | 34 | | |
6 | 35 | | |
7 | | - | |
8 | | - | |
| 36 | + | |
| 37 | + | |
9 | 38 | | |
10 | 39 | | |
11 | 40 | | |
12 | 41 | | |
13 | | - | |
14 | | - | |
| 42 | + | |
| 43 | + | |
15 | 44 | | |
16 | 45 | | |
17 | 46 | | |
18 | | - | |
| 47 | + | |
19 | 48 | | |
20 | 49 | | |
Lines changed: 128 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
30 | 40 | | |
31 | | - | |
| 41 | + | |
| 42 | + | |
32 | 43 | | |
33 | 44 | | |
34 | 45 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
27 | 36 | | |
28 | 37 | | |
| 38 | + | |
29 | 39 | | |
30 | 40 | | |
31 | 41 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
0 commit comments