You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The repo currently pins packageManager: pnpm@10.33.0 across all three Node sub-projects (clients/ts, tests/e2e/sdk, docs). pnpm 11 has been out for a while and introduces a stricter policy for build scripts (onlyBuiltDependencies is now mandatory for any package with a postinstall script — previously a warning, now an error: ERR_PNPM_IGNORED_BUILDS). Devs on pnpm 11 see surprising failures when our setup script's defaults don't list esbuild etc.
We should also adopt pnpm's minimumReleaseAge (a.k.a. min-release-age) for supply-chain safety — installs would refuse packages published in the last N days (typical setting: 7–14 days), giving npm/jsr time to surface compromised releases before they land in our lockfile.
Additionally, Node 26 (current homebrew default) crashes Vitest with a V8 heap allocation error during make test-sdk (Abort trap: 6, JS heap OOM in v8::internal::HeapAllocator::AllocateRawSlowPath). The project documents Node 20+ as the minimum but doesn't appear to be compatible with Node 26's V8. Either Vitest / our test setup needs an upgrade, or we should pin Node version in CI / docs / via .nvmrc.
Scope
pnpm 11 migration
Bump packageManager to pnpm@11.x in clients/ts/package.json, tests/e2e/sdk/package.json, docs/package.json.
Update .github/actions/setup-env (or wherever pnpm is provisioned in CI) to install pnpm 11.
Audit every workspace for postinstall scripts and explicitly list them under pnpm.onlyBuiltDependencies per package. At minimum: esbuild (used by tsup/vitest). Likely also sharp, workerd (docs). Also trace electron-winstaller@5.4.0 — pnpm 11 flagged it as an ignored build during local install in clients/ts/ and docs/, but it's NOT in any workspace's pnpm-lock.yaml. Either (a) it's a transitive dep we haven't found (run pnpm why electron-winstaller in each workspace), or (b) pnpm 11 is reporting from the global store across all of a dev's projects (in which case we may need to add it to silence the warning across team machines). Track it down before bumping.
Add pnpm.minimumReleaseAge (recommend 7 days) to each package.json — or to a root .npmrc if we adopt one.
Re-generate lockfiles under pnpm 11 (pnpm install in each workspace) and commit.
Verify make build-sdk, make test-sdk, make test-e2e, make build-docs all green.
Node version compatibility
Reproduce the Vitest crash on Node 26: install Node 26 (e.g., brew install node defaults to 26 currently) and run make test-sdk. Expected symptom: V8 heap OOM + Abort trap: 6. Stack trace shows v8::internal::HeapAllocator::AllocateRawSlowPath inside vitest's worker.
Decide between two paths:
Pin Node version: add .nvmrc (or engines.node constraint in each package.json, or volta config) targeting Node 20 LTS. Update docs/src/content/docs/development.md to mention the pin.
Upgrade Vitest to a version compatible with Node 26. Audit dependent libraries (@vitest/coverage-v8 etc.) for Node 26 compat. Update both clients/ts and tests/e2e/sdk (both use vitest).
Update .github/actions/setup-env if the Node version target changes (currently node-version: "22").
Verify on both pinned and latest-LTS Node that make ci completes end-to-end without crashes.
Why this is its own issue
Decoupled from any feature branch — affects three packages, CI config, lockfile churn, and toolchain version pinning. Doing it in a feature PR would balloon the diff and risk hiding pnpm-related test flakes inside unrelated changes.
Resurfaced + Node 26 issue added during PR chore: claude code native improvements #147 (claude-code-native improvements) when testing the new pre-push gate end-to-end — make ci couldn't complete due to both pnpm 11 strictness AND Node 26 V8 incompatibility, blocking final validation of the new agent gates. The gates themselves are independently unit-tested and verified, but the full push-through-CI flow can't be exercised until this is resolved. Once this lands, PR chore: claude code native improvements #147 should be re-validated without environment patches.
Context
The repo currently pins
packageManager: pnpm@10.33.0across all three Node sub-projects (clients/ts,tests/e2e/sdk,docs). pnpm 11 has been out for a while and introduces a stricter policy for build scripts (onlyBuiltDependenciesis now mandatory for any package with a postinstall script — previously a warning, now an error:ERR_PNPM_IGNORED_BUILDS). Devs on pnpm 11 see surprising failures when our setup script's defaults don't listesbuildetc.We should also adopt pnpm's
minimumReleaseAge(a.k.a.min-release-age) for supply-chain safety — installs would refuse packages published in the last N days (typical setting: 7–14 days), giving npm/jsr time to surface compromised releases before they land in our lockfile.Additionally, Node 26 (current homebrew default) crashes Vitest with a V8 heap allocation error during
make test-sdk(Abort trap: 6, JS heap OOM inv8::internal::HeapAllocator::AllocateRawSlowPath). The project documents Node 20+ as the minimum but doesn't appear to be compatible with Node 26's V8. Either Vitest / our test setup needs an upgrade, or we should pin Node version in CI / docs / via.nvmrc.Scope
pnpm 11 migration
packageManagertopnpm@11.xinclients/ts/package.json,tests/e2e/sdk/package.json,docs/package.json..github/actions/setup-env(or wherever pnpm is provisioned in CI) to install pnpm 11.pnpm.onlyBuiltDependenciesper package. At minimum:esbuild(used by tsup/vitest). Likely alsosharp,workerd(docs). Also traceelectron-winstaller@5.4.0— pnpm 11 flagged it as an ignored build during local install inclients/ts/anddocs/, but it's NOT in any workspace'spnpm-lock.yaml. Either (a) it's a transitive dep we haven't found (runpnpm why electron-winstallerin each workspace), or (b) pnpm 11 is reporting from the global store across all of a dev's projects (in which case we may need to add it to silence the warning across team machines). Track it down before bumping.pnpm.minimumReleaseAge(recommend 7 days) to eachpackage.json— or to a root.npmrcif we adopt one.pnpm installin each workspace) and commit.make build-sdk,make test-sdk,make test-e2e,make build-docsall green.Node version compatibility
brew install nodedefaults to 26 currently) and runmake test-sdk. Expected symptom: V8 heap OOM +Abort trap: 6. Stack trace showsv8::internal::HeapAllocator::AllocateRawSlowPathinside vitest's worker..nvmrc(orengines.nodeconstraint in eachpackage.json, orvoltaconfig) targeting Node 20 LTS. Updatedocs/src/content/docs/development.mdto mention the pin.@vitest/coverage-v8etc.) for Node 26 compat. Update bothclients/tsandtests/e2e/sdk(both use vitest)..github/actions/setup-envif the Node version target changes (currentlynode-version: "22").make cicompletes end-to-end without crashes.Why this is its own issue
Decoupled from any feature branch — affects three packages, CI config, lockfile churn, and toolchain version pinning. Doing it in a feature PR would balloon the diff and risk hiding pnpm-related test flakes inside unrelated changes.
Related
ERR_PNPM_IGNORED_BUILDS.make cicouldn't complete due to both pnpm 11 strictness AND Node 26 V8 incompatibility, blocking final validation of the new agent gates. The gates themselves are independently unit-tested and verified, but the full push-through-CI flow can't be exercised until this is resolved. Once this lands, PR chore: claude code native improvements #147 should be re-validated without environment patches.