@@ -21,6 +21,28 @@ onlyBuiltDependencies:
2121# Transitive-dependency version pins. pnpm v10 reads `overrides` from THIS file
2222# — the `pnpm.overrides` block in package.json is silently ignored — so all
2323# pins must live here (previously orphaned in package.json: minimatch, tar).
24+ #
25+ # ⛔ SELECTOR SHAPE — the one rule every OSV pin below now follows (#6095).
26+ # An OSV pin states a FLOOR ("nothing below the patched line"), so its selector
27+ # must cover the whole major it guards and its target must be a range that
28+ # floats up inside that major. Concretely:
29+ # 'pkg@>=<affected floor> <next major above the target>': '^<patched>'
30+ # Never write the selector's exclusive upper bound AT the target's own version
31+ # line (`pkg@<X.Y.Z` -> `^X.Y.Z`). That shape self-invalidates the day X.Y.Z
32+ # itself gets an advisory: you lift the target and the selector silently stops
33+ # covering the very versions you need to rewrite — the live specimen is
34+ # `undici@>=7.23.0 <7.28.0` on the day 7.28.0 was flagged (#4961, #5032).
35+ # With the bound at the major boundary, ONLY the target moves from now on.
36+ # Equally never let the bound sit BELOW the target floor: the old
37+ # `@hono/node-server@<2.0.5` -> `^2.0.10` left the whole 2.0.5 .. 2.0.10 band
38+ # covered by nobody at all (#6095 fixed it).
39+ # For a 0.x line the "major boundary" is the caret boundary (0.35.x -> <0.36.0),
40+ # because that is where semver's compatibility break actually falls.
41+ # `scripts/check-override-consistency.mjs` reports (never fails on) any entry
42+ # that drifts back into the old shape. Two carve-outs deliberately keep it:
43+ # the better-auth pre-release family (a compat pin, not an OSV floor — it is
44+ # retired wholesale when 1.7.0 stable ships) and the three zero-consumer pins
45+ # awaiting a #5835-style ruling (@tootallnate/once, react-router, @sveltejs/kit).
2446# - esbuild: GHSA-gv7w-rqvm-qjhr (high). tsup/tsx/vite pulled 0.27.7 / 0.28.0
2547# (< 0.28.1); force the patched line everywhere.
2648# - form-data: GHSA-hmw2-7cc7-3qxx (high) — CRLF injection via unescaped
@@ -39,18 +61,21 @@ onlyBuiltDependencies:
3961# Then five more advisories landed on 7.28.0 itself — the version this pin
4062# had settled on (GHSA-4cwx-7wf7-3272 7.4 high, GHSA-jr45-8vmc-qm54 5.9,
4163# GHSA-8xcm-r25x-g524 / GHSA-v3r7-h72x-cjcm 4.8, GHSA-m8rv-5g2x-5cg5 4.2) —
42- # so the bound moves to <7.29.0 / ^7.29.0 (#5032). NOTE the recurring trap:
43- # an exclusive upper bound stops covering the very version it pinned once
44- # that version is itself flagged, so the selector AND the target must move
45- # together — same shape as the brace-expansion 5.0.8 → 5.0.9 lift (#4945).
64+ # so the target moves to ^7.29.0 (#5032). NOTE the recurring trap this
65+ # specimen taught: an exclusive upper bound stops covering the very version
66+ # it pinned once that version is itself flagged — same shape as the
67+ # brace-expansion 5.0.8 → 5.0.9 lift (#4945). That is why the selector is
68+ # now `>=7.23.0 <8.0.0` (#6095): the bound sits at the major boundary, so a
69+ # future lift moves the TARGET alone and the pin never silently misfires.
4670# CONSUMER GONE (#5825): cheerio came in only through @vscode/vsce, which
47- # left with packages/vscode-objectstack. The two undici copies that remain —
48- # @ai-sdk/provider-utils' 7.29.0 and jsdom's 8.9.0 — are both OUTSIDE this
49- # selector's `<7.29.0` bound, so it now matches nothing. Kept as
71+ # left with packages/vscode-objectstack. The two undici copies that remain
72+ # are @ai-sdk/provider-utils' 7.29.0 and jsdom's 8.9.0. Under the old
73+ # `<7.29.0` bound BOTH sat outside the selector and it matched nothing;
74+ # under the `<8.0.0` bound of #6095 the 7.29.0 copy is back in scope (it
75+ # already satisfies the ^7.29.0 target, so nothing moved — measured), which
76+ # is exactly the point: the next 7.x advisory will now catch it. jsdom's
77+ # 8.9.0 is a different major and stays outside, unaffected. Kept as
5078# defense-in-depth on the same reasoning as form-data above.
51- # Still transitive-only via cheerio; @ai-sdk/provider-utils already resolves
52- # 7.29.0, so the two dedupe. jsdom's undici 8.9.0 is outside the selector
53- # and unaffected.
5479# - @better-auth/scim: GHSA-j8v8-g9cx-5qf4 (high) — account/provider
5580# takeover. The advisory is patched only in >=1.7.0-beta.4 — there is NO
5681# stable patched release yet (npm `latest` is still on the 1.6.x line), so
@@ -102,10 +127,10 @@ onlyBuiltDependencies:
102127# legacy agent chain; force the patched 2.0.1 line.
103128overrides :
104129 esbuild : ' >=0.28.1'
105- ' minimatch@<10.2.3 ' : ' 10.2.3'
106- ' tar@>=2.0.0 <7.5.11 ' : ' ^7.5.11'
107- ' form-data@<4 .0.6 ' : ' >=4.0.6'
108- ' undici@>=7.23.0 <7.29 .0 ' : ' ^7.29.0'
130+ ' minimatch@<11.0.0 ' : ' ^ 10.2.3'
131+ ' tar@>=2.0.0 <8.0.0 ' : ' ^7.5.11'
132+ ' form-data@<5 .0.0 ' : ' >=4.0.6'
133+ ' undici@>=7.23.0 <8.0 .0 ' : ' ^7.29.0'
109134 # better-auth family — kept on one line (see @better-auth/oauth-provider note).
110135 ' better-auth@<1.7.0-rc.2 ' : ' 1.7.0-rc.2'
111136 ' @better-auth/core@<1.7.0-rc.2 ' : ' 1.7.0-rc.2'
@@ -121,27 +146,33 @@ overrides:
121146 ' @better-auth/mongo-adapter@<1.7.0-rc.2 ' : ' 1.7.0-rc.2'
122147 ' @better-auth/prisma-adapter@<1.7.0-rc.2 ' : ' 1.7.0-rc.2'
123148 ' @better-auth/telemetry@<1.7.0-rc.2 ' : ' 1.7.0-rc.2'
124- ' uuid@<11.1.1 ' : ' ^11.1.1'
125- ' postcss@<8.5.10 ' : ' ^8.5.10'
126- ' cookie@<0.7 .0 ' : ' 0.7.0'
149+ ' uuid@<12.0.0 ' : ' ^11.1.1'
150+ ' postcss@<9.0.0 ' : ' ^8.5.10'
151+ ' cookie@<0.8 .0 ' : ' ^ 0.7.0'
127152 svelte : ' ^5.55.7'
128153 ' @tootallnate/once@<2.0.1 ' : ' 2.0.1'
129154 # OSV batch 2026-07 — transitive-only fixes (no publishable package declares these):
130155 # brace-expansion GHSA-mh99-v99m-4gvg (via minimatch@10.x), then GHSA-rgw5-rvv9-x895
131156 # (7.5 high) which affects 5.0.8 itself — the version the first pin landed on — so the
132- # bound moves to <5.0.9. Still transitive-only through minimatch (ts-morph, eslint,
157+ # target moves to ^5.0.9 — the selector keeps its <6.0.0 major boundary (#6095), which is
158+ # what makes this a target-only lift. Still transitive-only through minimatch (ts-morph, eslint,
133159 # @typescript-eslint, glob, archiver — @vscode/vsce left with #5825's retirement,
134160 # the rest still pull it, so this pin stays live); sharp GHSA-f88m-g3jw-g9cj
135161 # (next optionalDep ^0.34.5 excludes the fix); react-router GHSA-qwww-vcr4-c8h2 has no
136162 # 7.x fix — fumadocs-core peer allows 8.x and docs uses the next adapter, so jump to 8;
137163 # @sveltejs/kit GHSA-866w-xmhq-wj7x/GHSA-wqjv-9729-c5q2 (better-auth optional peer);
138164 # @hono/node-server GHSA-frvp-7c67-39w9 has no 1.x fix — @modelcontextprotocol/sdk
139165 # declares ^1.19.9 and only imports getRequestListener, which 2.x still exports.
140- ' brace-expansion@>=5.0.0 <5.0.9 ' : ' ^5.0.9'
141- ' sharp@>=0.34.0 <0.35.0 ' : ' ^0.35.0'
166+ # ⚠️ @hono/node-server is the exception to this block's "transitive-only" heading:
167+ # plugin-hono-server declares it directly (^2.0.12). Under the <3.0.0 bound that
168+ # declaration is now in the selector's scope and the lockfile records ^2.0.10 as its
169+ # specifier — the resolved version is unchanged at 2.0.12, because the ^2.0.10 target
170+ # floats to the newest 2.x (measured, #6095).
171+ ' brace-expansion@>=5.0.0 <6.0.0 ' : ' ^5.0.9'
172+ ' sharp@>=0.34.0 <0.36.0 ' : ' ^0.35.0'
142173 ' react-router@<8.3.0 ' : ' ^8.3.0'
143174 ' @sveltejs/kit@<2.69.1 ' : ' ^2.69.1'
144- ' @hono/node-server@<2 .0.5 ' : ' ^2.0.10'
175+ ' @hono/node-server@<3 .0.0 ' : ' ^2.0.10'
145176 # OSV batch 2026-08 (#5032) — all three name a fixed version, so they are
146177 # upgrades, not exemptions (the osv-scanner.toml route #4965 defines is for
147178 # advisories with NO fix and does not apply here):
@@ -159,5 +190,5 @@ overrides:
159190 # peer states what host hono we work against, and a host that pins an old
160191 # hono owns that copy; narrowing it fixes nothing here and only breaks
161192 # compatibility. check-override-consistency.mjs covers both forms.
162- ' fast-uri@<3.1.5 ' : ' ^3.1.5'
163- ' hono@<4.12.34 ' : ' ^4.12.34'
193+ ' fast-uri@<4.0.0 ' : ' ^3.1.5'
194+ ' hono@<5.0.0 ' : ' ^4.12.34'
0 commit comments