Skip to content

registry-canary structurally cannot catch remote-template breakage — it scaffolds only blank and never runs npm run build; it was green over the #7644 defect #8678

Description

@qq9340100

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

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions