chore(deps): consolidated dependency batch 2026-08-04 - #610
Open
Weegy wants to merge 3 commits into
Open
Conversation
Supersedes 11 individual Dependabot PRs with one verified batch. npm (middleware): - @modelcontextprotocol/sdk 1.29.0 -> 1.30.0 (harness-orchestrator) - @aws-sdk/client-s3 3.1095.0 -> 3.1102.0 - @azure/msal-node 5.4.2 -> 5.4.3 - bonjour-service 1.4.3 -> 1.4.4 - jose 6.2.4 -> 6.2.8 npm (web-ui): - lucide-react 1.27.0 -> 1.28.0 - framer-motion 12.42.2 -> 12.43.0 - jsdom 29.1.1 -> 30.0.1 (major, dev) - @types/react 19.2.17 -> 19.2.18 - @types/react-dom 19.2.3 -> 19.2.4 - @vitejs/plugin-react 6.0.4 -> 6.0.5 docker: - node 22.23.1-slim -> 22.23.2-slim (Dockerfile, web-ui, dev-runner) - node 22.23.1-alpine -> 22.23.2-alpine (dev-runner-daemon) ci: - actions/download-artifact v7 -> v8 (major) aws-sdk and jose resolve one patch beyond the Dependabot proposals, which were cut a day earlier. Excluded, with reasons in the PR body: typescript 7.0.2 (#595, blocked by typescript-eslint peer range) and better-sqlite3 13.0.2 (#596, drops the prebuild-install hook so it compiles from source in a slim image that has no Python).
…isories) The `brace-expansion` override in both workspaces pinned 5.0.8, which a new advisory now flags as high: brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation (vulnerable: >=4.0.0 <5.0.9) Because the pin was exact, npm held the vulnerable version in place and `npm update` could not move it. Bumping the pin to 5.0.9 clears the whole cascade: web-ui went from 15 high advisories to 0 (the eslint / typescript-eslint tree was flagged only transitively through brace-expansion -> minimatch), and middleware from 4 to 1. This is not a regression from this branch — main is red on the same gate (run 30887391724). npm's audit registry endpoint recovered on 2026-08-04, so the workflow's "audit endpoint returned an error" bypass stopped firing and pre-existing advisories became blocking for the first time. The remaining middleware advisory is fast-uri 3.1.4 (<3.1.5, host confusion via backslash authority introducer), reached through ajv@8.20.0. Deliberately NOT fixed here: npm only re-applies a changed override during a full lockfile regeneration, and regenerating drags in 75 unrelated package changes including a @hono/node-server 1.19 -> 2.1 major. That belongs in its own reviewed PR, not a dependency batch.
Closes the remaining `audit (high+critical block) (middleware)` failure: fast-uri: host confusion via backslash authority introducer (vulnerable: >=3.0.0 <3.1.5) Reached through ajv@8.20.0, which requires `fast-uri: ^3.0.1`. ajv is already at its latest release, so there is no upstream fix to take. The `overrides` entry is bumped to 3.1.5 and the single lockfile entry is moved to match. This is deliberately surgical: npm refuses to re-apply a changed override to an already-locked transitive dependency (`npm ls` prints `fast-uri@3.1.4 invalid: "3.1.5" ... overridden` and does nothing), and the only npm-native way to make it re-resolve -- deleting the lockfile and regenerating -- rewrites 75 unrelated package versions, including a @hono/node-server 1.19.17 -> 2.1.0 major and a hoisting change that splits ajv@8 into five per-workspace copies. None of that belongs in a dependency batch, so the lockfile is edited to exactly the entry a correct resolution would produce instead. The integrity hash is the registry's own for 3.1.5, and `npm ci` verifies it against the downloaded tarball, so the pin is not taken on trust. Verified: npm ci clean, `npm ls fast-uri` reports no invalid markers, build + lint + typecheck pass, 5502 tests pass / 0 fail, ajv relative $ref resolution (the code path that uses fast-uri) still resolves, and the audit gate exits 0.
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.
Consolidates the open Dependabot backlog into one verified batch. Replaces 11 individual PRs; 2 are deliberately excluded and 1 is already obsolete.
Included (11 PRs superseded)
@modelcontextprotocol/sdkharness-orchestrator@aws-sdk/client-s3@azure/msal-nodebonjour-servicejoselucide-reactframer-motionjsdom@types/react@types/react-dom@vitejs/plugin-reactnode(docker)actions/download-artifact@aws-sdk/client-s3andjoseland one patch beyond what Dependabot proposed — those PRs were cut on 2026-08-03 and newer patches shipped since. Taking the newer resolution rather than pinning backwards.Also included, beyond Dependabot's scope
Dependabot only offered the node bump for the root and
web-uiDockerfiles. Two more images were still on the old base and would have drifted:middleware/sidecars/dev-runner/Dockerfile(2 stages) →22.23.2-slimmiddleware/sidecars/dev-runner-daemon/Dockerfile→22.23.2-alpineAll 8 node stages across the 4 Dockerfiles are now on the same patch. Both tags were confirmed to exist on Docker Hub.
Excluded — with reasons
#595
typescript5.9.3 → 7.0.2 — blocked upstream, recommend closeHard peer-dependency wall, not a flaky build.
typescript-eslintdeclares:That range is unchanged in the newest release (8.66.0), so TypeScript 7 cannot resolve at all —
npm cidies withERESOLVEbefore any code is compiled, which is why 4 checks failed rather than 1.The PR is also stale: it proposes 5.9.3 as the base, but
middleware/package.jsonis already on^6.0.2. TypeScript 6.0.2 satisfies the peer range; 7.x does not.Recommend closing #595 and revisiting when
typescript-eslintships TS 7 support.#596
better-sqlite312.11.1 → 13.0.2 — needs a Dockerfile change firstNot a version-compatibility problem — a packaging change. v12 shipped an install hook that fetched a prebuilt binary:
v13.0.2 removes that hook entirely. With
binding.gypstill present, npm falls back to compiling from source, and ournode:*-slimimage has no Python:Adopting v13 means adding
python3/make/g++to the builder stage. That is a real image-surface change and does not belong in a routine dependency batch — it deserves its own PR and its own review.#250
cytoscape3.33.4 → 3.34.0 — already on main, recommend closeweb-uiis already at^3.34.0/ locked3.34.0. The PR is a no-op left over from June.Verification
Run locally on node 22.22.3 (
.nvmrc), full install from the regenerated lockfiles:middlewareweb-uiLint warning counts are unchanged from main (38 in web-ui, 1 in middleware — all pre-existing).
Security audit
This branch introduces no new advisories — verified by auditing main's lockfile side by side, which produced byte-identical output. It then goes further and removes advisories; see "Update: the audit gate" below for the full picture, which supersedes this paragraph.
On the two majors
jsdom30 requires node^22.22.2 || ^24.15.0 || >=26.0.0;.nvmrc(22.22.3) and CI (node 22) both satisfy it. It is the vitest environment, so the entire 552-test web-ui suite exercises it — all green.download-artifactv8 has three breaking changes, checked against the single call site (the macOS update-feed merge job):actions/upload-artifact@v7with default compression, so artifacts stay zipped and are extracted exactly as before.Test plan
middleware: build, lint, typecheck, full test suite (5502 pass / 0 fail)web-ui: lint, typecheck, full test suite (552 pass / 0 fail)middleware (build, no push)andweb-ui (build, no push)both greenaudit (web-ui)— green (was red beforebfcf880)audit (middleware)— green (was red beforeaf4d8f0)npm civerifies the hand-pinnedfast-uriintegrity hash against the real tarballnpm ls fast-uri— noinvalid/overriddenmarkersmain is currently red on both audit jobs. This branch is green on both — it does not merely avoid regressing the gate, it repairs it.
Update: the audit gate, and why main is also red
The first CI run on this branch failed both
audit (high+critical block)jobs. That is not a regression from this branch — main is red on the same gate (run 30887391724 on1e72b007, 2026-08-04 07:20Z). The three runs before it were green.What changed is npm's side, not ours. The gate carries a deliberate bypass:
npm's audit registry endpoint had been erroring, so that bypass swallowed every result. It recovered on 2026-08-04, the gate started returning real data, and pre-existing advisories became blocking for the first time. The gate was effectively dark for a while — worth knowing independently of this PR.
Fixed here:
brace-expansion(commitbfcf880)Both workspaces pinned
brace-expansionto exactly5.0.8viaoverrides— a fix from an earlier batch. A new advisory now covers that version:Because the pin was exact, it held the vulnerable version in place and
npm updatecould not move it. Bumping the pin to5.0.9clears the entire cascade:web-uimiddlewarefast-uribelow)web-ui's 15 were almost entirely phantom depth: the whole
eslint/typescript-eslint/eslint-config-nexttree was flagged only transitively viabrace-expansion→minimatch. One pin bump clears all of them.Also fixed here:
fast-uri(commitaf4d8f0)The last middleware advisory was
fast-uri@3.1.4(vulnerable>=3.0.0 <3.1.5, host confusion via backslash authority introducer), reached throughajv@8.20.0, which requiresfast-uri: ^3.0.1.ajvis already at its latest release, so there is no upstream fix to take.This one needed care, because npm refuses to re-apply a changed override to an already-locked transitive dependency.
npm update,npm install, and even a cleanrm -rf node_modules && npm installall keep 3.1.4 — whilenpm lssimultaneously reports:npm knows about the override and declines to act on it. The only npm-native way to force it is deleting the lockfile and regenerating — which does produce 3.1.5, but also rewrites 75 unrelated package versions, including:
@hono/node-server1.19.17 → 2.1.0 (major, runtime HTTP server — undeclared, so it floats freely on a regen)vite8.1.5 → 8.2.0,rolldown1.1.5 → 1.2.2,tsx4.23.1 → 4.23.5typescript-eslint8.65.0 → 8.66.0ajv@8out of the root into five per-workspace copiesSmuggling a
@hono/node-servermajor into a dependency-hygiene batch is exactly the kind of unreviewed breaking change this PR exists to prevent. So instead the override is set to3.1.5and the single lockfile entry is edited to exactly what a correct resolution would produce — three lines:version,resolved,integrity.This is not taken on trust. The integrity hash is the registry's own for 3.1.5, and
npm civerifies it against the downloaded tarball — a wrong hash would fail the install outright. Afterwardsnpm ls fast-urireports no invalid markers, so the tree and the declared override agree.Blast radius: 28 changed lockfile entries vs main, not 75.
Verified beyond the gate:
ajvrelative$refresolution — the code path that actually delegates to fast-uri — still resolves and still rejects correctly on 3.1.5.Recommended follow-ups (not in this PR)
@hono/node-server1.19 → 2.1 major on its own merits. The lockfile has drifted well behind the declared ranges — a regen moves 75 packages. That is worth doing intentionally, once, rather than discovering it inside an unrelated PR.typescriptmajor-ignore lives only in the/web-uinpm block. The/middlewareblock lacks it, which is why chore(deps,middleware)(deps-dev): bump typescript from 5.9.3 to 7.0.2 in /middleware #595 was raised despite the comment already documenting that TS 7 is blocked. It will regenerate every Monday until the ignore is mirrored./and/web-ui.middleware/sidecars/dev-runner/Dockerfileand.../dev-runner-daemon/Dockerfileare unmanaged and had silently drifted — this PR bumps them by hand, but they will drift again.