The gap
The registry-canary job (.github/workflows/publish-smoke.yml, SMOKE_MODE=registry) is the gate two separate cards lean on to prove that a published create-objectstack scaffolds a working project. It cannot see the failure class it is being trusted for, for two independent reasons.
1. It only ever scaffolds the bundled blank template
scripts/publish-smoke.sh:210:
(cd "$SMOKE_ROOT"&& npx -y create-objectstack@latest "$APP_NAME" --skip-install --skip-skills)
No -t is passed, and create-objectstack's template option defaults to 'blank' (packages/create-objectstack/src/index.ts:386-390). blank is a bundled template (source: { kind: 'bundled' }); the five templates that break are remote (kind: 'remote', fetched from objectstack-ai/templates). The remote path — manifest handling, identity rewrite, template content vs current spec — is never exercised.
This is not incidental: #7644's own body records that blank was the one template clean end to end while four others failed.
2. It never runs npm run build
After install the script goes straight to objectstack dev --fresh (publish-smoke.sh:228-232). npm run build — the exact command that exits 2 in #7644 and #8677 — is never invoked in either smoke mode.
Measured proof the gate is blind, not merely narrow
The most recent scheduled registry-canary run before the v17 cut:
run #1932 event=schedule conclusion=success 2026-08-10T05:11:25Z
https://github.com/objectstack-ai/objectstack/actions/runs/31357804459
At that moment npm latest was 16.1.0 — the version #7644 documents as failing first npm run build on todo, compliance, content and contracts. The canary concluded success over a release that was broken on four of six templates. A green reading from this job is therefore not evidence about remote templates in either direction.
The workflow header says the job "Opens/refreshes an issue on failure", which makes the silence actively misleading: no failure issue exists, and there is nothing wrong with the job — it passed honestly on the one template it tests.
Why this matters beyond one card
create-objectstack is the first command a new user runs. Both breakages found so far (#7644's namespace rewrite on 16.1.0, #8677's enable.trash/enable.mru on 17.0.0) are first-hour, follow-the-docs failures on a GA release, and this gate — the only automated one pointed at the published package — was green through both. packages/create-objectstack/src/rewrite-identity.ts's own header records the earlier #4902 incident in which all five published remote templates were broken at once, which is precisely the shape this canary is meant to make impossible to miss.
Suggested direction (not a decision — flagging the trade-off)
The obvious fix is to loop the canary over every entry in the template registry and run npm run build on each. Two real costs to weigh: runtime (five extra installs per run) and a dependency on objectstack-ai/templates staying green, which makes this repo's weekly job red for another repo's content. A cheaper middle option is one remote template plus npm run build, which would have caught both incidents. Whoever picks this up should also decide whether the project name must differ from the template's own namespace — smoke-app does differ today, which is the property #7644's defect needed to reproduce, and it is currently accidental rather than asserted.
Related
Generated by Claude Code
The gap
The
registry-canaryjob (.github/workflows/publish-smoke.yml,SMOKE_MODE=registry) is the gate two separate cards lean on to prove that a publishedcreate-objectstackscaffolds a working project. It cannot see the failure class it is being trusted for, for two independent reasons.1. It only ever scaffolds the bundled
blanktemplatescripts/publish-smoke.sh:210:No
-tis passed, andcreate-objectstack's template option defaults to'blank'(packages/create-objectstack/src/index.ts:386-390).blankis a bundled template (source: { kind: 'bundled' }); the five templates that break are remote (kind: 'remote', fetched fromobjectstack-ai/templates). The remote path — manifest handling, identity rewrite, template content vs current spec — is never exercised.This is not incidental: #7644's own body records that
blankwas the one template clean end to end while four others failed.2. It never runs
npm run buildAfter install the script goes straight to
objectstack dev --fresh(publish-smoke.sh:228-232).npm run build— the exact command that exits 2 in #7644 and #8677 — is never invoked in either smoke mode.Measured proof the gate is blind, not merely narrow
The most recent scheduled
registry-canaryrun before the v17 cut:At that moment npm
latestwas16.1.0— the version #7644 documents as failing firstnpm run buildontodo,compliance,contentandcontracts. The canary concludedsuccessover a release that was broken on four of six templates. A green reading from this job is therefore not evidence about remote templates in either direction.The workflow header says the job "Opens/refreshes an issue on failure", which makes the silence actively misleading: no failure issue exists, and there is nothing wrong with the job — it passed honestly on the one template it tests.
Why this matters beyond one card
create-objectstackis the first command a new user runs. Both breakages found so far (#7644's namespace rewrite on 16.1.0, #8677'senable.trash/enable.mruon 17.0.0) are first-hour, follow-the-docs failures on a GA release, and this gate — the only automated one pointed at the published package — was green through both.packages/create-objectstack/src/rewrite-identity.ts's own header records the earlier #4902 incident in which all five published remote templates were broken at once, which is precisely the shape this canary is meant to make impossible to miss.Suggested direction (not a decision — flagging the trade-off)
The obvious fix is to loop the canary over every entry in the template registry and run
npm run buildon each. Two real costs to weigh: runtime (five extra installs per run) and a dependency onobjectstack-ai/templatesstaying green, which makes this repo's weekly job red for another repo's content. A cheaper middle option is one remote template plusnpm run build, which would have caught both incidents. Whoever picks this up should also decide whether the project name must differ from the template's own namespace —smoke-appdoes differ today, which is the property #7644's defect needed to reproduce, and it is currently accidental rather than asserted.Related
npm run buildon published 16.1.0 — fix is at HEAD, needs 17.0.0 release + canary verification #7644 (verification card this was found from)npm run buildon GA create-objectstack@17.0.0 — templates still authorenable.trash/enable.mru, removed in the 16.x line #8677 (the live GA breakage this gate did not catch)getService(#4835) #4902 / P0:5 个已发布模板对真实新用户是坏的 —— 脚手架的对象名前缀改写对所有远程模板静默跳过,夜间金丝雀连红 20 次无人察觉 #4926 (the prior incident the fix's header records)Generated by Claude Code