chore: adopt the pnpm supply-chain policy - #16
Conversation
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
We caused it — confirmed, not assumed. I re-ran CI on
Mechanism. A workaround I tried and reverted: setting Options, none of which I applied — your call:
I stopped short of editing Refs constructive-io/constructive-planning#1464 |
Rolls this repo onto the org pnpm supply-chain policy from constructive-io/constructive-planning#1464 (recipe A). Third-party releases now wait 2d before install: a compromised or typosquatted release is normally reported and yanked within hours, so the wait catches it without stalling real upgrades. Our own releases (pyramation-maintained scopes/packages) skip the wait via a generated exemption list derived from @constructive-io/pnpm-policy's inventory, intersected with what this workspace actually resolves — 35 first-party packages and 6 scope globs, 856 omitted because they aren't used here. allowBuilds replaces the hand-maintained onlyBuiltDependencies list in pnpm-workspace.yaml (deleted in this commit, now generated). The three entries it already carried (@tailwindcss/oxide, sharp, unrs-resolver) are preserved with real reasons, plus esbuild, nx, and msw, which `pnpm install` flagged via ERR_PNPM_IGNORED_BUILDS once the old allowlist was removed — not guessed, taken from the actual warning. @constructive-io/pnpm-policy is pinned to an exact version (0.2.1, not ^0.2.1): a floating inventory dependency is itself a supply-chain path, so bumping it should be a visible, deliberate diff. policy:check is wired into the existing `quality` CI job, right after `pnpm install --frozen-lockfile`, so drift between pnpm-policy.yaml and pnpm-workspace.yaml fails CI instead of going unnoticed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CEswUi4ANuB58rva48aHge
The smoke test installs into throwaway consumer projects outside this workspace, so it inherits the bare 2d wait with none of the first-party exemptions. @constructive-io/data has no `time` field in its registry metadata — which the age check requires — so the step failed with ERR_PNPM_MISSING_TIME rather than on any genuine staleness. Scoped to this step only: the quarantine protects the install that writes our lockfile, not a smoke test that discards its tree. Same reasoning the rollout issue gives for `pnpm deploy --legacy`. Refs constructive-io/constructive-planning#1464
This reverts commit 90cece6.
d3ffd65 to
787cc17
Compare
Rolls this repo onto the org pnpm supply-chain policy. Part of the queue in constructive-io/constructive-planning#1464 (recipe A).
What changes
pnpm-policy.yaml— 2d wait for third-party releases,blockExoticSubdeps: true,intersect: true.pnpm-workspace.yaml— generated block: 6 scope globs + 35 first-party packages exempt from the wait (856 omitted, since this workspace does not resolve them).allowBuildsreplaces the hand-maintainedonlyBuiltDependencies(deleted frompnpm-workspace.yamlin the same commit). The three entries it already carried —@tailwindcss/oxide,sharp,unrs-resolver— are preserved with real reasons.esbuild,nx, andmswwere added becausepnpm installflagged them viaERR_PNPM_IGNORED_BUILDSonce the old allowlist was removed (not guessed — taken straight from the warning output).@constructive-io/pnpm-policypinned exactly to0.2.1(not^0.2.1), so an inventory bump is a visible diff rather than a silent widening of what skips the wait.policy:checkwired into the existingqualityjob in.github/workflows/ci.yml, right afterpnpm install --frozen-lockfile.pnpm version:
blockspinspnpm@10.28.0(>= 10.16), so the generator usesallowBuildsas the primary recipe intends — no--builds-key onlyBuiltDependenciesfallback needed.Verification
No maturity-wait exceptions were needed — everything currently locked resolved cleanly at the 2d wait.
No deviations: this repo had an active CI workflow (
ci.yml) to hook into, sopolicy:checkwas added there directly rather than called out as a gap.🤖 Generated with Claude Code
https://claude.ai/code/session_01CEswUi4ANuB58rva48aHge