Skip to content

chore(pnpm): supply-chain hardening (lifecycle allowlist, release-age cooldown, overrides migration)#2

Closed
Shinyaigeek wants to merge 1 commit into
chore/bump-node-24from
chore/pnpm-supply-chain
Closed

chore(pnpm): supply-chain hardening (lifecycle allowlist, release-age cooldown, overrides migration)#2
Shinyaigeek wants to merge 1 commit into
chore/bump-node-24from
chore/pnpm-supply-chain

Conversation

@Shinyaigeek

Copy link
Copy Markdown
Owner

Summary

Supply-chain hardening for pnpm. Stacked on thesysdev#687 (Node 24) — pnpm 11 requires Node ≥ 22.13, so this depends on the Node bump landing first. Base is chore/bump-node-24; once thesysdev#687 merges to upstream main, this PR's base will be retargeted to thesysdev/openui:main.

Changes

  • Pin pnpm via packageManager: pnpm@11.9.0; both workflows resolve it from that field through pnpm/action-setup@v4 — single source of truth, replacing the divergent 9.0.6 / 9.15.4 pins.
  • Block lifecycle scripts by default (pnpm 11). Only deps that genuinely need a native build are allow-listed via allowBuilds (@parcel/watcher, esbuild, sharp, unrs-resolver). Telemetry/cosmetic scripts stay blocked: @scarf/scarf, core-js, protobufjs, @google/genai.
  • Release-age cooldown minimumReleaseAge: 1440 (24h) — refuses to install versions published in the last day, mitigating self-propagating npm worms.
  • verifyDepsBeforeRun: install — scripts never run against a stale/tampered dependency tree.
  • Migrate CVE-pin overrides from the package.json pnpm field to pnpm-workspace.yaml. pnpm 11 no longer reads the package.json field — without this move the CVE pins would silently stop applying.

Test plan / validation

Validated locally with Node 24.18.0 + pnpm 11.9.0 (pnpm install --frozen-lockfile):

  • Exit 0; pnpm-lock.yaml unchanged
  • allowBuilds honored — esbuild/sharp/unrs-resolver/@parcel/watcher build; the four telemetry/cosmetic scripts do not run; no ERR_PNPM_IGNORED_BUILDS
  • No "the pnpm field in package.json is no longer read" warning (overrides correctly relocated)
  • CI green on Node 24 (after chore: pin Node.js to v24 (LTS) thesysdev/openui#687)

🤖 Generated with Claude Code

Harden the pnpm setup against supply-chain attacks. Requires Node >= 22.13
(pnpm 11), hence stacked on the Node 24 bump.

- Pin pnpm via `packageManager: pnpm@11.9.0`; both workflows now resolve it
  from that field through `pnpm/action-setup@v4` (single source of truth,
  replacing the divergent 9.0.6 / 9.15.4 pins).
- Block lifecycle scripts by default (pnpm 11) and allow only the few deps
  that genuinely need a native build via `allowBuilds`; telemetry/cosmetic
  scripts (@scarf/scarf, core-js, protobufjs, @google/genai) stay blocked.
- Add `minimumReleaseAge: 1440` (24h cooldown) to avoid installing
  freshly-published, potentially-compromised releases.
- Add `verifyDepsBeforeRun: install` so scripts never run against a stale or
  tampered dependency tree.
- Migrate the CVE-pin `overrides` from the package.json `pnpm` field to
  `pnpm-workspace.yaml` (pnpm 11 no longer reads the package.json field).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Shinyaigeek

Copy link
Copy Markdown
Owner Author

Superseding with an upstream-targeted PR against thesysdev/openui (stacked on thesysdev#687).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant