观察类 finding,#5825 退役 packages/vscode-objectstack 时发现(PR #5834)。今天没有任何用户/CI 面受影响,门禁全绿,故不带 pm:queue,交 PM triage 定级。
事实
pnpm-workspace.yaml 的 overrides 里这两条:
'form-data@<4.0.6': '>=4.0.6'
'undici@>=7.23.0 <7.29.0': '^7.29.0'
按各自注释,唯一传递来源都是 @vscode/vsce(form-data 直接经它;undici 经 @vscode/vsce → cheerio)。@vscode/vsce 是 packages/vscode-objectstack 的 devDependency,随 #5825 退役一并离开依赖树(pnpm install 后 -125 个包)。删除后实测:
form-data —— 从依赖树彻底消失,lockfile 零解析条目。选择器匹配不到任何东西。
undici —— 仅剩两个副本,@ai-sdk/provider-utils 的 7.29.0 与 jsdom 的 8.9.0,两者都在 >=7.23.0 <7.29.0 这个左闭右开区间之外。选择器同样匹配不到任何东西。
即两条 pin 现在都是空转声明。check-override-consistency.mjs 对它们保持绿 —— 该门禁只校验「override 命名的包若出现在可发布包的 declared range 里,range 必须能解析到 override target」,一条没有消费者的 override 会被直接跳过,所以没有任何门禁会告诉你它空了。
PR #5834 的处置(以及为什么没顺手删)
保留选择器不动,只在注释里就地记录 CONSUMER GONE (#5825) 与保留理由。理由:在一个包退役 PR 里顺手摘掉安全 pin 是降低安全姿态,应当是独立决定;而留着的成本是零 —— 若未来某个传递依赖重新引入 form-data 或 7.2x 的 undici,pin 仍会把它按到已修补版本上。同时把 brace-expansion 注释里 minimatch 消费者清单中的 @vscode/vsce 去掉(ts-morph/eslint/@typescript-eslint/glob/archiver 仍在,那条 pin 依旧生效)。
待裁决
这两条空转 pin 保留还是退役?
- A. 保留(现状) —— 零成本的纵深防御,未来传递依赖重新引入时自动生效。代价:
overrides 块里长期躺着两条无消费者的声明,读者需靠注释才知道它们空转。
- B. 退役 ——
overrides 只保留真正在生效的条目,块更短更可信。代价:未来重新引入时不再有网,且需要有人盯着 OSV 重新加回。
倾向 A,但这是安全姿态问题,值得维护者明确一次而不是靠某个 PR 的顺手判断。若选 A,可考虑另加一个「override 有无消费者」的体检(报告而非 red)—— 目前空转是完全不可见的,而不可见的安全声明既可能被误信为在生效,也可能被下一个 agent 顺手删掉。
顺带记录:undici 这条仍是 <FIXED 形状
'undici@>=7.23.0 <7.29.0': '^7.29.0' 的上界正好等于其 target,即 #4961 警告、#5032 亲历过的自失效形状 —— 7.29.0 自己哪天中招,选择器就不再覆盖它。文件里已有 #5032 的完整教训记录,此处仅并列备忘,不属本 finding 的诉求。
观察类 finding,#5825 退役
packages/vscode-objectstack时发现(PR #5834)。今天没有任何用户/CI 面受影响,门禁全绿,故不带pm:queue,交 PM triage 定级。事实
pnpm-workspace.yaml的overrides里这两条:按各自注释,唯一传递来源都是
@vscode/vsce(form-data 直接经它;undici 经@vscode/vsce→cheerio)。@vscode/vsce是packages/vscode-objectstack的 devDependency,随 #5825 退役一并离开依赖树(pnpm install后 -125 个包)。删除后实测:form-data—— 从依赖树彻底消失,lockfile 零解析条目。选择器匹配不到任何东西。undici—— 仅剩两个副本,@ai-sdk/provider-utils的 7.29.0 与 jsdom 的 8.9.0,两者都在>=7.23.0 <7.29.0这个左闭右开区间之外。选择器同样匹配不到任何东西。即两条 pin 现在都是空转声明。
check-override-consistency.mjs对它们保持绿 —— 该门禁只校验「override 命名的包若出现在可发布包的 declared range 里,range 必须能解析到 override target」,一条没有消费者的 override 会被直接跳过,所以没有任何门禁会告诉你它空了。PR #5834 的处置(以及为什么没顺手删)
保留选择器不动,只在注释里就地记录
CONSUMER GONE (#5825)与保留理由。理由:在一个包退役 PR 里顺手摘掉安全 pin 是降低安全姿态,应当是独立决定;而留着的成本是零 —— 若未来某个传递依赖重新引入 form-data 或 7.2x 的 undici,pin 仍会把它按到已修补版本上。同时把brace-expansion注释里 minimatch 消费者清单中的@vscode/vsce去掉(ts-morph/eslint/@typescript-eslint/glob/archiver 仍在,那条 pin 依旧生效)。待裁决
这两条空转 pin 保留还是退役?
overrides块里长期躺着两条无消费者的声明,读者需靠注释才知道它们空转。overrides只保留真正在生效的条目,块更短更可信。代价:未来重新引入时不再有网,且需要有人盯着 OSV 重新加回。倾向 A,但这是安全姿态问题,值得维护者明确一次而不是靠某个 PR 的顺手判断。若选 A,可考虑另加一个「override 有无消费者」的体检(报告而非 red)—— 目前空转是完全不可见的,而不可见的安全声明既可能被误信为在生效,也可能被下一个 agent 顺手删掉。
顺带记录:
undici这条仍是<FIXED形状'undici@>=7.23.0 <7.29.0': '^7.29.0'的上界正好等于其 target,即 #4961 警告、#5032 亲历过的自失效形状 —— 7.29.0 自己哪天中招,选择器就不再覆盖它。文件里已有 #5032 的完整教训记录,此处仅并列备忘,不属本 finding 的诉求。