Repository navigation
fix(deps): re-lock @modelcontextprotocol/sdk, follow-redirects, launch-editor and vite onto their fixed releases - #25047
Conversation
…h-editor and vite onto their fixed releases main's scheduled OSV scan matches 12 advisories (9 distinct ids) in four locked packages, and every declared range on each path already admits the fix, so this is a re-lock and adds no pin: - @modelcontextprotocol/sdk 1.31.0 -> 1.32.1 (direct, ^1.30.1) - follow-redirects 1.16.0 -> 1.16.1 (mongodb-memory-server-core ^1.16.0) - launch-editor 2.14.1 -> 2.14.2 (@changesets/cli ^2.14.1) - vite 8.0.16 -> 8.3.4 (vitest 4.1.11 ^6 || ^7 || ^8, fumadocs-mdx 7.x.x || 8.x.x) vite's own closure moves with it (rolldown 1.0.3 -> 1.2.14 and its bindings, @oxc-project/types), and the wasm32-wasi binding chain rolldown 1.2 no longer declares drops out. Nothing else moves. pnpm-workspace.yaml is byte-identical to the base: the resolutions were taken with temporary overrides that were removed before the second install. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
Seat reviewACCEPT ·
This seat readies the PR and queues it with auto-merge. Generated by Claude Code |
Fixes #25041
Clause-②: no
What this does
main's scheduledValidate Dependenciesrun 39536495453 is red at its OSV step: the lockfile matches 12 advisory rows (9 distinct ids, 6 High) in four locked packages, and every one names a fixed release. Every declared range on every path already admits its fix, so this is a re-lock only.pnpm-lock.yamlis the whole diff. It adds no override, noosv-scanner.tomlexemption, and nopackage.jsonrange.pnpm why -r)@modelcontextprotocol/sdk^1.30.1in@objectstack/mcp,@objectstack/connector-mcpand the private@objectstack/example-showcasefollow-redirectsmongodb-memory-server-core@11.3.0(^1.16.0) ←mongodb-memory-server←@objectstack/driver-mongodbdevDependencieslaunch-editor@changesets/cli@3.0.3(^2.14.1) ← the root devDependenciesvitelaunch-editor(vite bundles it)vitest@4.1.11(dependency and peer^6.0.0 || ^7.0.0 || ^8.0.0),@vitest/mocker@4.1.11(peer, same range),fumadocs-mdx@15.2.3(optional peer7.x.x || 8.x.x)Each target is the newest release inside the existing ranges. That is what a targeted
pnpm updateresolves, and what a fresh downstream install gets. Forvite, the three fixed lines come from the advisories' own ranges in the OSV npm database: introduced 8.0.0 fixed 8.1.6, introduced 8.2.0 fixed 8.2.4, introduced 8.3.0 fixed 8.3.3. 8.3.4 sits outside all three.vitest@4.1.11's peer range admits it, and so does its own devDependency: bothvitest4.1.11 andfumadocs-mdx15.2.3 develop againstvite ^8.2.0, so 8.1.6 would sit below what either consumer tests against. If 8.3.4 ever has to be backed off, 8.2.4 is the fix on that line.How the lockfile was moved, and the route rejected first
pnpm update. Measured twice, with--no-save, so nopackage.jsonmoved:pnpm update -r --depth Infinity --no-save follow-redirects launch-editor vite @modelcontextprotocol/sdk. It moved the SDK alone, leavingfollow-redirects,launch-editorandviteexactly where they were.@inquirer/ansi/confirm/core/type,@napi-rs/wasm-runtime1.2.4 → 1.2.5,node-abi3.96.0 → 3.99.0, andseroval/seroval-plugins1.6.8 → 1.6.11. It also added new copies of@babel/runtime,ip-address,nanoid,postcssandset-cookie-parser, and touched theknex,tsupandpostcss-load-configsnapshots.pnpm update -r --no-save @modelcontextprotocol/sdkalone, at default depth, produced the identical churn.pnpm installon the base lockfile leaves 0 changed files, so the churn isupdate's own.pnpm-workspace.yamland ranpnpm install. I then restored the file to its HEAD blob and ranpnpm installagain. The second install keeps the four resolutions, because every declared range admits them.git hash-object pnpm-workspace.yamlequals the HEAD blobecbd0f4bfdeb4c7c03bb43d910c5f2406fbadea7, andgit diff HEADon it is empty.overrides:section is unchanged, and no importer specifier moved.Lockfile diff scope
pnpm-lock.yamlonly, +187/−237. Thepackages:section goes from 1372 to 1367 keys, with 26 removed and 21 added. Every moved entry belongs to the four packages or tovite's own closure:rolldown1.0.3 → 1.2.14 (vite8.3.4 declares~1.2.12), its 14 platform bindings 1.0.3 → 1.2.14, the new@rolldown/binding-android-arm-eabi1.2.14, and@oxc-project/types0.133.0 → 0.154.0;@rolldown/binding-wasm32-wasi1.0.3 and the chain only it reached. That chain is@napi-rs/wasm-runtime1.2.4,@emnapi/core1.10.0,@emnapi/runtime1.10.0,@emnapi/wasi-threads1.2.1 and@tybys/wasm-util0.10.4.npm view rolldown@1.2.14 optionalDependenciesdeclares no wasm32-wasi binding, while 1.0.3 declares one.@emnapi/runtime1.11.3 stays, because it is the copy@img/sharp-wasm32already used on the base.The
snapshots:section goes from 1379 to 1374 keys, covering the same names plus the peer-suffix rewrites onvitest,@vitest/mockerandfumadocs-mdx. In the importers section, 3 lines move the SDK version and 80 version strings carry the newvite/rolldownpeer suffix (79vitest, 1fumadocs-mdx). Nothing else moved.Local proofs, at
7b0295c723pnpm install --frozen-lockfilepnpm check:vendor-export-contract-resolveVERDICT: PASS — vendor export contract (registry resolution, installed with npm@11.21.0), 3 edge(s) verified. It governs only the better-auth family, so it passes over the SDK without judging it.pnpm check:override-consistency9 published-manifest declaration(s) … all resolve to their override targetspnpm turbo run build --filter=@objectstack/mcp --filter=@objectstack/connector-mcp --concurrency=2(shared verify lock)VERDICT command-exit 0, 33/33 tasks, 0 cachedtestfor both packages (shared verify lock)@objectstack/mcp40 files / 479 tests passed;@objectstack/connector-mcp4 files / 36 tests passedtypecheckfor both packages (tsc --noEmit+check:test-typecheck)vitest4.1.11 loadsvite8.3.4, and the installed SDK is 1.32.1.apps/docsbuilds through Next, andfumadocs-mdxtouchesviteonly in itsdist/viteplugin entry androlldownonly in its type declarations. CI'sBuild Docsruns the production command.OSV reading
I measured with OSV-Scanner 2.5.0, the binary the workflow's pinned action image ships. Its sha256
edcfc41d…524e0cmatches the release'sSHA256SUMS.api.osv.devanswers 403 from this container, so the scan ran offline (--offline-vulnerabilities --download-offline-databases) against the npm database downloaded 2026-10-21 03:59 UTC. Each side ran under its ownosv-scanner.toml, with the identical invocation.dfe60e3a0c: exit 1. The 12 rows are byte-for-byte the scheduled run's, with the sprintf-js exemption filtered.7b0295c723: exit 0,No issues found. The sprintf-js exemption is filtered here too. That is the control that shows the database loaded and matched.scripts/osv-base-relative.mjsover both JSON results exits 0:0 introduced, 0 inherited, 9 resolved.--download-offline-databasesprintedNo issues foundat exit 0 with noLoaded npm local dbline, reading the exemption as unused. It had loaded no database, and it is not counted.What closes the card is the next scheduled (or a
workflow_dispatch)Validate Dependenciesrun onmain. This PR's own run takes the base-relative path.Changeset:
skip-changeset, measuredNothing publishes. No
package.jsonchanged, so every published package's declared ranges are byte-identical and a downstream install resolves exactly as before.@objectstack/mcpand@objectstack/connector-mcp(files: ["dist", …]) keep it as an external import: 4 and 3@modelcontextprotocol/sdk/…import specifiers remain in their builtdist. The SDK's ownLATEST_PROTOCOL_VERSION = "…"definition appears in 0 of theirdistfiles. The positive control is 6 hits in the SDK's owndist.distnames the other moved packages. None of the 33 builtdisttrees namesrolldown,launch-editororfollow-redirects, whilevite's owndistdoes, which is the control.driver-mongodb, the root,vitest) and the private docs app.Gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackat7b0295c723, which derived 19 commands from 1 path. I ran all 19, each exit captured before any pipe.--ranreconciliation:19 derived, 18 run, 1 NOT-MEASURED, 0 UNRUN.check-changeset-fixed,check-closing-keyword-parity(+--self-test),check-comment-mask-corpus,check-dts-emitted --self-test,check-osv-exemptions(+--self-test),osv-base-relative --self-test, and thepnpmgatescheck:driver-memory-census,check:dts-closure,check:gitlink-declared,check:lean-entry-closure,check:nul-bytes,check:override-consistency,check:refd-timer-probe,check:sourcemap-no-sources-content,check:vendor-export-contract-resolveandcheck:watch-hint-literal.check:dts-closureandcheck:sourcemap-no-sources-contentswept the 33 built packages only.pnpm check:dual-build-cjs-loadsexits 3 (PREREQUISITE NOT MET, needs a fullpnpm build). CI'sBuild CoreandLint & Repo Gatesmeasure it on the built tree.git merge-tree --write-tree origin/main HEAD(origin/main=eddffc3390): exit 0, clean.pnpm-lock.yamlis not routed to theos-regendriver, so this local reading answers GitHub's question. The 2 commitsmaingained since the base touch none ofpnpm-lock.yaml,pnpm-workspace.yaml, the rootpackage.jsonorosv-scanner.toml.Acceptance notes
vitemoves three minors, 8.0.16 → 8.3.4, androlldown1.0.3 → 1.2.14 with it. Every vitest suite in the repo runs on this pair, so CI'sTest Coreis the wide reading. Locally, only the two MCP packages' 515 tests ran.pnpm update(even depth 0, one direct dependency) re-resolves a fixed set of unrelated packages, and with--depth Infinityit does not move the transitive targets at all. The temporary-override re-lock is the route that keeps a lockfile refresh narrow here. Class: none (tooling behaviour, not a defect of this repo); carrier: none.--download-offline-databasescan read green having loaded no database. Read theLoaded npm local dbline, or an exemption reading as filtered, before trusting a local "No issues found".pnpm installprintsioredis-mock 8.13.1: unmet peer ioredis@^5: found 6.0.0. That warning is already onmain, and this diff does not cause it.Generated by Claude Code