Skip to content

Commit bb4b426

Browse files
committed
fix(deps): OSV override 选择器上界改到 major 边界,以后只挪 target (#6095)
12 条非 better-auth 的 OSV 类 override,排他上界从「钉死在自己 target 的版本线上」 改到 target 之上的 major 边界(0.x 线取 caret 边界)。这恢复的是 #4961 / #5032 已经 写死的仓规:上界压在 target 版本线上的形状,会在 target 自身出公告、需要往上挪的那天 当场失配 —— `undici@>=7.23.0 <7.28.0` 就是活体标本。 一并修正 `@hono/node-server@<2.0.5 -> ^2.0.10` 这条严格更差的:上界低于 target 下限, 2.0.5 .. 2.0.10 这段谁都不覆盖。现为 `<3.0.0 -> ^2.0.10`。 minimatch / cookie 两条的 target 由精确版本改为 caret(`10.2.3` -> `^10.2.3`, `0.7.0` -> `^0.7.0`)。只挪上界而留精确 target,会把整个 major 钉死在那个旧版本上 —— 实测会把树里的 minimatch 10.2.5 / 10.2.6 拽回 10.2.3。OSV pin 声明的是下限,不是上限。 ⛔ 未触碰:better-auth 家族 11 条(预发布兼容 pin,维护者裁决未定)、 @tootallnate/once / react-router / @sveltejs/kit 三条零消费者 override(#5835 未表态)。 未删除任何 override。 解析版本零位移:pnpm-lock.yaml 中没有任何一行 `version:` 变化,osv-scanner 离线库 扫描前后同为 1387 包、No issues found。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wbxm29qPKnLf44AbSxizqW
1 parent f7f54a9 commit bb4b426

2 files changed

Lines changed: 70 additions & 39 deletions

File tree

pnpm-lock.yaml

Lines changed: 16 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pnpm-workspace.yaml

Lines changed: 54 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
103128
overrides:
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

Comments
 (0)