CI: Use minimumReleaseAge in pnpm workspace files#92480
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Stats from current PR✅ No significant changes detected📊 All Metrics📖 Metrics GlossaryDev Server Metrics:
Build Metrics:
Change Thresholds:
⚡ Dev Server
📦 Dev Server (Webpack) (Legacy)📦 Dev Server (Webpack)
⚡ Production Builds
📦 Production Builds (Webpack) (Legacy)📦 Production Builds (Webpack)
📦 Bundle SizesBundle Sizes⚡ TurbopackClient Main Bundles
Server Middleware
Build DetailsBuild Manifests
📦 WebpackClient Main Bundles
Polyfills
Pages
Server Edge SSR
Middleware
Build DetailsBuild Manifests
Build Cache
🔄 Shared (bundler-independent)Runtimes
📎 Tarball URL |
6e8c367 to
5c052de
Compare
5c052de to
345006c
Compare
mmastrac
left a comment
There was a problem hiding this comment.
Approved, but I'd also approve a longer window.
345006c to
38fa9ec
Compare
Tests Passed |
| - react-dom-* | ||
| - react-experimental-builtin | ||
| - react-is | ||
| - react-is-builtin |
There was a problem hiding this comment.
Does this work on aliases? This would be odd since you could effectively defeat the minimumReleaseAgeExclude by aliasing a malicious package to a trusted alias.
There was a problem hiding this comment.
Yes, it applies after resolution of aliases. At least that's what deepwiki claimed when I asked it.
There was a problem hiding this comment.
If it applies after resolution, why list the *-builtin ones? Those are aliases not real npm packages.
There was a problem hiding this comment.
Maybe I'm not explaining this right. https://deepwiki.com/search/does-minimumreleaseageexclude_37cce44b-8975-4a63-a862-087b133fa393
Based on the codebase, minimumReleaseAgeExclude does use alias names if the package.json defines an alias for a package. The dependency resolution process resolves aliases before applying rules, so the exclusion logic works with the resolved (aliased) module names.
That implies that we must list the *-builtin package names.
There was a problem hiding this comment.
That's not how it works though:
ERR_PNPM_NO_MATURE_MATCHING_VERSION Version 0.28.0-canary-404b38c7-20260408 (released 4 minutes ago) of scheduler-builtin does not meet the minimumReleaseAge constraint
-- https://github.com/vercel/next.js/actions/runs/24153975697/job/70488293803#step:7:41
Otherwise you could bypass it with an aliased install.
Fixing in #92535
There was a problem hiding this comment.
Not sure why you used deepwiki. Is this some AI summary? pnpm docs are pretty clear:
The exclusion works by package name and applies to all versions of that package.
There was a problem hiding this comment.
I meant dependency resolution by the package manager. The model used by deepwiki thought we were talking about module resolution at runtime.
38fa9ec to
f506dc1
Compare

Depends on pnpm 10.x: #92283
Enables https://pnpm.io/settings#minimumreleaseage to protect against supply-chain attacks.
The
minimumReleaseAgeExcludelist is copied from https://github.com/vercel/front/blob/1c3a9458d970265e1fb5ec14ddfed9a0eab2abef/pnpm-workspace.yaml#L13, withreactandreact-domadded.