chore: migrate to pnpm 11 with supply-chain defaults - #28
Merged
Conversation
Bumps packageManager from pnpm@10.34.5 to pnpm@11.18.0. pnpm 11 is pure ESM and requires Node >=22, so the Node 20 CI leg could no longer install. Node 20 reached end-of-life in April 2026, so it is dropped from the matrix and engines.node is raised from ">=20" to ">=22" to match what is actually tested. Adds pnpm-workspace.yaml declaring pnpm 11's supply-chain defaults explicitly: - minimumReleaseAge: 1440 (block packages younger than 24h) - blockExoticSubdeps: true (no git/tarball transitive deps) - strictDepBuilds: true (fail install on unapproved postinstalls) - verifyDepsBeforeRun: install (re-check lockfile before pnpm run) allowBuilds is empty: no dependency in this tree requests a build script, and strictDepBuilds makes that an enforced property rather than an assumption. The lockfile is unchanged: lockfileVersion 9.0 is identical between pnpm 10 and 11. Closes #27
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #27
Summary
Migrates
@llbbl/polydoc-corefrom pnpm 10.34.5 to pnpm 11.18.0 and adopts pnpm 11's supply-chain hardening defaults.pnpm-lock.yamlis unchanged —lockfileVersion: '9.0'is identical between pnpm 10 and 11, so nothing was regenerated.Breaking: Node 20 dropped
pnpm 11 is pure ESM and requires Node >=22. The
20.xmatrix leg would fail atpnpm install, so it is removed andengines.nodeis raised">=20"→">=22"to match what CI actually tests.Node 20 reached end-of-life in April 2026 and no longer receives security updates. Leaving
engines.node: ">=20"while CI no longer exercised Node 20 would have advertised unverified support.Consumers still on Node 20 (
polydoc,TeamWiki) will see an engines warning on install. The package is pre-1.0 (0.1.1), so this is a reasonable point to make the change.release.ymlneeded no change — it already pins Node 22.x.Changes
package.jsonpackageManagerpnpm@10.34.5pnpm@11.18.0engines.node>=20>=22.github/workflows/ci.yml—20.xremoved from thechecksmatrix (now22.x,24.x), with a comment recording why. Both workflows usepnpm/action-setup@v6with noversion:pin, so they pick up 11.18.0 frompackageManagerautomatically.pnpm-workspace.yaml— new. pnpm 11 makes this the home for all pnpm settings (.npmrcis auth/registry only now), so it is created even though this is not a workspace. Defaults are written out explicitly so the security posture is visible in review:Build-script allowlist: empty, and enforced
allowBuildsis empty because no dependency in this tree requests a build script —pnpm installcompleted with noERR_PNPM_IGNORED_BUILDS. WithstrictDepBuilds: true, the install would fail if one ever appeared, so this staying empty is an enforced property rather than an oversight.Verification
pnpm installpnpm install --frozen-lockfilepnpm format:checkpnpm lintpnpm typecheckpnpm testpnpm testwithPOLYDOC_REQUIRE_PANDOC=1pnpm check:package--strictAll good!pnpm audit signaturescheck:packagewas the gate that mattered most here — packaging breakage is invisible to lint, typecheck, and tests, and only surfaces for a consumer after publish. All entry points (.,./google,./sharepoint,./package.json) resolve cleanly.Follow-up (not in this change)
@types/nodeis pinned at^20.19.43, now inconsistent withengines.node: ">=22". Bumping it may surface new type errors, so it is left for a separate PR.