Commit 8d41998
* fix(create-objectstack): stop silently skipping the object-name rewrite for every remote template (#4926)
`npx create-objectstack@latest my-app -t <template>` produced a project that
could not build for 5 of the 6 offered templates. Only the bundled `blank`
worked. The nightly registry canary — the workflow whose entire purpose is to
be the new-user canary — had been red on all five for at least a week (20/20
scheduled runs since 2026-07-27), unseen because it runs only on `schedule`.
`rewriteProjectIdentity` read the template's original namespace from
`objectstack.manifest.json` alone, and that filename means two different
documents. The bundled template's is app-shaped and carries `namespace`; a
remote template's is the template-REGISTRY document
(`$schema: .../template-manifest.json`) and carries none — its namespace lives
only in `objectstack.config.ts`. So `templateNamespace` came back undefined for
every remote template, the `&& templateNamespace` guard fell through, and the
object-name rewrite was skipped entirely — while the config's `namespace:` was
rewritten unconditionally. That leaves `namespace: 'my_app'` beside
`name: 'todo_task'`, which the ${namespace}_${shortName} rule rejects.
Measured against the real templates at objectstack-ai/templates@960f24d, the old
code resolved `undefined` for all five and rewrote 0 of the 74 object names that
needed it: todo 7, compliance 17, content 22, contracts 12, procurement 16.
Two changes, in a new module because index.ts calls program.parse() on import
and nothing there is testable (the reason pkg-utils.ts already exists):
- `objectstack.config.ts` is now the AUTHORITY for the template namespace, with
the manifest as fallback. The config holds the very literal the scaffolder
overwrites, so the two cannot disagree.
- The rewrite VERIFIES ITSELF. A prefix rewrite that quietly does nothing is
indistinguishable from one that was not needed, and that ambiguity is what let
this ship. Any surviving stale prefix now throws, naming the files and lines,
at the scaffold — not in the user's first `objectstack build`.
Verified: 10 new unit tests covering both manifest shapes, the fallback, the
absent case and an unparseable manifest; all five real templates now resolve
their namespace and rewrite every literal with zero stale left; the bundled
blank template still scaffolds to `namespace: 'regr_app'` / `name:
'regr_app_note'`; package suite 28/28, tsc --noEmit and eslint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BbNVKv6KgPzuQ5p76nMgnf
* chore: changeset for #4926
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BbNVKv6KgPzuQ5p76nMgnf
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 2b63a00 commit 8d41998
4 files changed
Lines changed: 347 additions & 45 deletions
File tree
- .changeset
- packages/create-objectstack/src
| 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 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
50 | 55 | | |
51 | 56 | | |
52 | 57 | | |
| |||
227 | 232 | | |
228 | 233 | | |
229 | 234 | | |
230 | | - | |
231 | | - | |
232 | | - | |
233 | | - | |
234 | | - | |
235 | | - | |
236 | | - | |
237 | | - | |
238 | | - | |
239 | | - | |
240 | | - | |
241 | | - | |
242 | | - | |
243 | | - | |
244 | | - | |
245 | | - | |
246 | | - | |
247 | | - | |
248 | | - | |
249 | | - | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
250 | 238 | | |
251 | 239 | | |
252 | 240 | | |
| |||
255 | 243 | | |
256 | 244 | | |
257 | 245 | | |
258 | | - | |
259 | | - | |
260 | | - | |
261 | | - | |
262 | | - | |
263 | | - | |
264 | | - | |
265 | | - | |
266 | | - | |
267 | | - | |
268 | | - | |
269 | | - | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
270 | 254 | | |
271 | 255 | | |
272 | 256 | | |
| |||
312 | 296 | | |
313 | 297 | | |
314 | 298 | | |
315 | | - | |
316 | | - | |
317 | | - | |
318 | | - | |
319 | | - | |
320 | | - | |
321 | | - | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
326 | | - | |
327 | | - | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
328 | 325 | | |
329 | 326 | | |
330 | 327 | | |
| |||
Lines changed: 132 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 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
0 commit comments