fix: repair the supply-chain soak — enforce minimumReleaseAge and drop the stale exclusion list - #244
Merged
Merged
Conversation
`minimumreleaseage=1440` in .npmrc never enforced anything. pnpm only auto-enables strict soak mode when the setting arrives from pnpm-workspace.yaml / config.yaml / CLI / env; from .npmrc it runs in loose mode, where a package younger than the window is silently appended to minimumReleaseAgeExclude and installed anyway. Move the setting to pnpm-workspace.yaml and set minimumReleaseAgeStrict explicitly. Also drop the 23-entry minimumReleaseAgeExclude block added in #221. Every version it named has long since aged past 24h: with the block removed and strict mode on, all 415 lockfile entries pass the soak. Left in place it would have been a standing hole in a control that is now real. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014RLRX3QtRpgCfDt16KShQC
|
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.
This repairs a control that was silently inactive
This is not a loosening of policy — it is a tightening in two places at once.
The repo intended a 24h supply-chain soak via
minimumreleaseage=1440in.npmrc. From there it does nothing useful:pnpm-workspace.yaml/config.yaml/ CLI / env. From.npmrcit runs in loose mode.minimumReleaseAgeExcludeand installs anyway.minimumreleaseageas a valid npmrc key.Observable proof in this repo:
pnpm config get minimumReleaseAgereturnedundefinedbefore this change and1440after. Before,pnpm install --frozen-lockfilenever reached a supply-chain step; after, it runsVerifying lockfile against supply-chain policies (415 entries).The exclusion list
pnpm-workspace.yamlcarried a 23-entryminimumReleaseAgeExcludeblock, added wholesale in #221 "to allow specific known-good transitive versions past the minimum release-age gate". Entries looked like:These are multi-version blanket waivers on 23 widely-depended-on packages, written in July. Under loose mode they were harmless noise, because nothing was being enforced anyway. The moment strict mode is switched on they become the opposite: a permanent, standing hole through the control, covering the packages an attacker would most want to reach.
Every version named has long since aged well past 24 hours, so none of it is doing any work. The whole block is removed, and with it gone and strict mode on, all 415 lockfile entries pass.
What changed
.npmrc(it held nothing butminimumreleaseage).pnpm-workspace.yaml:minimumReleaseAgeExcludeblock.The
overrides:block and its advisory comments are untouched.What strict mode caught
Nothing — with no exclusions at all. That is the point: the exclusion list was not protecting any real resolution, so removing it costs nothing and closes the hole.
Verification
pnpm install --frozen-lockfileclean:✓ Lockfile passes supply-chain policies (415 entries).pnpm verifygreen (lint, build, coverage 100%, depcheck, typecheck, size-limit).No changeset: this is repo-internal configuration and must not publish anything.