Found while working #10326 (the two unmet-peer lines on a clean first install). Unrelated to that card's defect class, so filed rather than ridden.
What happens
renderPnpmWorkspaceYaml() in packages/cli/src/commands/init.ts writes a pnpm-workspace.yaml carrying onlyonlyBuiltDependencies. pnpm 11 reads onlyallowBuilds, and it turned an unapproved dependency build script from a warning into a hard error — so the scaffolded project's first pnpm install exits 1.
Measured on published @objectstack/cli@17.1.0, pnpm 11.22.0, Node 22.22.2:
$ npx @objectstack/cli@17.1.0 init my-init-app -t app --no-install
$ cd my-init-app && pnpm install
...
[ERR_PNPM_IGNORED_BUILDS] Ignored build scripts: better-sqlite3@13.0.3, esbuild@0.28.2
install EXIT=1
The file it wrote:
# Allowlist native dependency build scripts so `pnpm install` compiles# them (pnpm 10+ blocks build scripts by default). Without this,# better-sqlite3 ships uncompiled and `objectstack serve` fails with# "Could not locate the bindings file".onlyBuiltDependencies:
- better-sqlite3
- esbuild
Why this is already a settled question elsewhere
This is the same defect the create-objectstack blank template fixed for itself, and that template's own comment states the rule verbatim:
Both keys are needed; they are read by different pnpm versions:
allowBuilds — pnpm >= 10.31 and pnpm 11+. pnpm 11 reads ONLY this one — onlyBuiltDependencies alone still errors.
onlyBuiltDependencies — pnpm 10.0–10.30, which do not understand allowBuilds.
packages/create-objectstack/src/templates/blank/pnpm-workspace.yaml carries both keys and template-consistency.test.ts ratchets both. The CLI's renderer has neither the key nor a test for it, so nothing noticed that one of the two scaffold paths still ships the pre-fix shape.
Suggested landing (hint, not a routing decision)
renderPnpmWorkspaceYaml() emits an allowBuilds: mapping alongside the existing list, from the same SCAFFOLD_BUILT_DEPENDENCIES source, plus a ratchet in packages/cli/test/init.test.ts mirroring the two the blank template already has. Worth confirming as part of that whether the two scaffold paths should keep rendering this file independently at all.
Not graded or routed; filed unassigned.
Found while working #10326 (the two unmet-peer lines on a clean first install). Unrelated to that card's defect class, so filed rather than ridden.
What happens
renderPnpmWorkspaceYaml()inpackages/cli/src/commands/init.tswrites apnpm-workspace.yamlcarrying onlyonlyBuiltDependencies. pnpm 11 reads onlyallowBuilds, and it turned an unapproved dependency build script from a warning into a hard error — so the scaffolded project's firstpnpm installexits 1.Measured on published
@objectstack/cli@17.1.0, pnpm 11.22.0, Node 22.22.2:The file it wrote:
Why this is already a settled question elsewhere
This is the same defect the
create-objectstackblank template fixed for itself, and that template's own comment states the rule verbatim:packages/create-objectstack/src/templates/blank/pnpm-workspace.yamlcarries both keys andtemplate-consistency.test.tsratchets both. The CLI's renderer has neither the key nor a test for it, so nothing noticed that one of the two scaffold paths still ships the pre-fix shape.Suggested landing (hint, not a routing decision)
renderPnpmWorkspaceYaml()emits anallowBuilds:mapping alongside the existing list, from the sameSCAFFOLD_BUILT_DEPENDENCIESsource, plus a ratchet inpackages/cli/test/init.test.tsmirroring the two the blank template already has. Worth confirming as part of that whether the two scaffold paths should keep rendering this file independently at all.Not graded or routed; filed unassigned.