build: hold dependencies back to versions the CFS feed can serve - #1716
Merged
Conversation
wenytang-ms
requested review from
chagong,
jdneo and
testforstephen
as code owners
July 29, 2026 01:39
CI restores packages from the Central Feed Service, which withholds upstream npm versions until they are roughly a week old, answering 404 for both the packument entry and the tarball. The nightly build broke because the lockfile referenced versions that were still inside that window. Roll webpack, postcss and sass (devDependencies) and fs-extra (a runtime dependency) back to the newest releases the feed can currently serve. All 311 locked versions were verified against the feed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: ac225268-483d-4498-a08f-fe79a87d4d2e
The Central Feed Service withholds upstream npm versions until they are roughly a week old. Measured against the vscjava feed, the newest servable version was 6.807 days old while the oldest withheld one was 6.738 days old, and withheld versions return 404 for both the packument entry and the tarball, so pinning an exact version does not help. A 7 day cooldown clears that threshold by only a few hours. Use 10 days so the setting keeps working if the feed's ingestion lag drifts. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: ac225268-483d-4498-a08f-fe79a87d4d2e
wenytang-ms
force-pushed
the
wenyt/cfs-feed-compat
branch
from
July 29, 2026 02:20
dede5fe to
9d6565d
Compare
chagong
approved these changes
Jul 29, 2026
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.
Why
The nightly pipeline (16482) has been failing at
npm installsince package restore moved to the Central Feed Service feed. Build 31836658:The CFS steps themselves are fine —
npm configshows the registry correctly pointed at the feed, and authentication succeeds. The failure is in what the feed will hand back.Root cause
The feed is not broken or stale. It mirrors npmjs on demand and does so correctly (
nanoidin the feed is already at 6.0.0, matching npmjs). What it does is withhold upstream versions younger than roughly 7 days, so that packages are scanned before anyone can consume them.Probing the feed on 2026-07-29 puts the boundary within 0.07 days:
typescript@7.1.0-dev.20260722.1vite@8.2.0-beta.0Scope
Rolling back
webpackalone would not have fixed the build. Checking all 289 versions pinned inpackage-lock.jsonagainst the feed found four inside the window — the build would simply have failed on the next one:webpackpostcsssassfs-extraEach moves to the newest release the feed already carries. Re-running the sweep afterwards: 291/291 pinned versions resolve against the feed.
Preventing the recurrence
All four bumps came from Dependabot. Its built-in cooldown is 3 days — shorter than the feed's window — so it will keep proposing versions that cannot be built, and this breakage will repeat every few days.
cooldown.default-days: 7in.github/dependabot.ymlcloses that gap; the rollback on its own would not.Notes
resolvedURLs in the lockfile still point atregistry.npmjs.org. Cloning and building this public repository needs no internal access, and no internal feed URL is committed.acorn-import-phases,loader-runner) appear in the lockfile because webpack 5.108.4 declares them where 5.109.0 did not. Both are servable by the feed.webpack-cli@7.2.1requireswebpack@^5.101.0.Validation
npm cifollowed bynpm run build: