chore(vscode): 退役 packages/vscode-objectstack,移出工作区 (#5825) - #5834
Merged
Conversation
维护者 2026-08-06 拍板退役:该扩展没有 vsce/vsix 发布链路(`.github/workflows/` 零命中),因此 VS Code Marketplace / Open VSX 上不存在可安装副本;#5028 的幽灵 `jsonValidation` 指向从未存在的 `./schemas/objectstack.schema.json`(本次删除前 复核:包内无 `schemas/` 目录,`files` 白名单也不含它),整个生命周期静默失效且零 用户报告;产品主航道是 AI agent + `os` CLI。git 历史保底,未来若有真实需求按当时 schema 重建。 删除面:`packages/vscode-objectstack/**`(12 个文件)。`pnpm-workspace.yaml` 用 `packages/*` glob,无需改成员列表;lockfile 随 `pnpm install` 收缩 1102 行、 125 个包(`@vscode/vsce` 整棵子树)。 ## 两个 issue 正文未预见的硬约束 **一、changesets 会重读已消费的 changeset,只删目录会打断整条发布链。** RC 模式下 `changeset version` 保留每个已消费的 .md,而 `assemble-release-plan` 对目录里 **全部** changeset 做包名解析,命中不在工作区的包即抛错。只删包之后 `changeset status` 直接红: Error: Found changeset changelog-ships-in-tarball for package objectstack-vscode which is not in the workspace 两个 changeset 的 frontmatter 点名该包,逐个按性质处置: - `.changeset/vscode-snippets-parse-gate.md`(**待发布**,frontmatter 只有该包一项) —— #4917 的 changeset,始终未随任何版本发布。宿主已退役,它永远无法 release, 整文件删除。 - `.changeset/changelog-ships-in-tarball.md`(**已消费**,frontmatter 含 60+ 包) —— 仅移除 `"objectstack-vscode": patch` 一行。其余 60+ 包的 patch 条目与正文不动, 它们的 CHANGELOG 早已落地,不受影响。 处置后 `changeset status` 退出码 0,发布计划中零 vscode 命中。 **二、该包在 npm 上是真实发布面。** issue 正文的「从未发布 / 无 npm 面」只对 VS Code Marketplace 成立:`changeset publish` 发布每个非 private 包,该包因此在 npm 上有 40+ 个版本,`latest` = 16.1.0(2026-07-22),`rc` = 17.0.0-rc.3 (2026-08-03,即三天前)。本 PR 不改变已发布版本(npm 不会 unpublish),但退役后 它将静默停更。是否补 `npm deprecate objectstack-vscode` 需要 npm 发布凭据,属维护者 动作,已在 #5825 提出待裁决,不阻塞本 PR 合并。 ## 提及清扫 `README.md` 包表、`AGENTS.md` 目录树、`content/docs/plugins/packages.mdx` (删小节 + 计数 73→72、Client/DX 5→4)、`.claude/skills/pm-dispatch/SKILL.md` 的 `domain:devx` 归属、`scripts/publish-smoke-pack.mjs` 的 EXCLUDE 条目及其注释、 `.changeset/config.json` 的 fixed 锁步组(`check-changeset-fixed.mjs` 对组内不存在 的包名会红,必须同步)。 保留(历史记录类,改动即污染记录):`RELEASE_NOTES.md`(文件自述 「This file is historical.」,v4.0.4 那张表是当时 42 包清单的快照)、 `docs/DX_ROADMAP.md`(2026-02-13 审计快照,自述基线为「14 packages」,早已与今天 无关)、`.changeset/pm-dispatch-domain-table-full-coverage.md`(已发布的 changeset 历史)、`.changeset/pre.json` 的 `initialVersions`(changesets 自管状态文件; `assemble-release-plan` 只对工作区内的包写入/读取该表,残留键永不被查,手改状态 文件是 RC 窗口出事的典型原因)。 ## 安全 overrides:保留选择器,只更正注释 `form-data` 与 `undici` 两条 OSV pin 的唯一传递来源是 `@vscode/vsce`。删除后 `form-data` 从依赖树彻底消失,`undici` 仅剩 `@ai-sdk/provider-utils` 的 7.29.0 与 jsdom 的 8.9.0 —— 两者都在 `>=7.23.0 <7.29.0` 选择器之外。即两条 pin 现在都不再 匹配任何东西。 选择器保留不动:在退役 PR 里顺手摘掉安全 pin 是降低安全姿态,应当是独立决定; 留着则未来若有传递依赖重新引入,仍会落在已修补版本上。但注释不能继续指向一个已 不存在的包,故就地记录「CONSUMER GONE (#5825)」与保留理由。`brace-expansion` 注释的 minimatch 消费者清单同理去掉 `@vscode/vsce`(`ts-morph`/eslint/ `@typescript-eslint`/glob/archiver 仍在,该 pin 依旧生效)。 ## 门禁计数对账(删除前后各跑一轮全套) | 门禁 | before | after | 差值 | | :--- | :--- | :--- | :--- | | check:published-files | 70 publishable / 78 members | 69 / 77 | -1 / -1 | | check:type-check-coverage | 63/78 covered | 62/77 | -1 / -1 | | check-changeset-fixed | 70 public packages | 69 | -1 | | check:nul-bytes | 5687 tracked text files | 5674 | -13 | | check:engine-double-contract | 37 pinned / 165 DEBT / 2 exempt | 同 | 0(该包无台账条目) | | check-override-consistency | 2 covered declarations | 2 | 0 | nul-bytes 的 -13 与本 PR 删除的文件数精确相等(12 个包内文件 + 1 个待发布 changeset)。计数全部由 glob 实时计算,无写死断言需要改。 changeset 路线:走 `skip-changeset` 标签。存活包零行为改动,而已删除的包无法在 changeset 里点名(changesets 对未知包名直接抛错),故本 PR 不 release 任何东西。 `pr-automation.yml` 的门禁文案在 #5292 明确修正过处置顺序 —— 标签是首选, 空 frontmatter changeset 是 last resort,因为它是 changesets/action 的真实输入, 全空集会让 Release 静默绿着空跑(#4898,曾卡住 17.0.0-rc.2)。 Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE Co-authored-by: Claude <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
📓 Docs Drift CheckNo hand-written docs reference the 1 changed package(s). ✅ |
This was referenced Aug 6, 2026
Contributor
Author
|
正文「安全 overrides」一节提到的 finding 已开:#5835 —— 观察类,不带 Generated by Claude Code |
os-zhuang
marked this pull request as ready for review
August 6, 2026 07:57
This was referenced Aug 6, 2026
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.
Fixes #5825
Closes #5028
维护者 2026-08-06 拍板退役
packages/vscode-objectstack,移出工作区。#5028 的幽灵jsonValidation声明随宿主一并消失,故本 PR 同时关闭它。退役前复核(逐条对着 origin/main 验)
grep -rn vscode .github/零命中,package: vsce package脚本 CI 从不调用,故 Marketplace / Open VSX 上不存在可安装副本jsonValidation./schemas/objectstack.schema.json,包内无schemas/目录,files白名单亦不含它一、changesets 会重读已消费的 changeset —— 只删目录会打断整条发布链
RC 模式下
changeset version保留每个已消费的 .md,而assemble-release-plan对.changeset/里 全部 changeset 做包名解析,命中不在工作区的包即抛错。只删包之后changeset status直接红:也就是说,若不处理这两个 changeset,合并后 每一次 Release 都会失败。两个文件按
性质分别处置(而非批量改写):
.changeset/vscode-snippets-parse-gate.md—— 待发布,frontmatter 只有该包一项。这是 VS Code 扩展的
os-view-grid片段生成的 view 现在 parse 不过:list.defaultSort/list.pageSize已被 #4001 关掉 #4917 的 changeset,始终未随任何版本发布;宿主退役后它永远无法 release,整文件删除。
.changeset/changelog-ships-in-tarball.md—— 已消费,frontmatter 含 60+ 个包。仅移除
"objectstack-vscode": patch一行,其余 60+ 包的 patch 条目与正文一字不动(它们的 CHANGELOG 早已落地,不受影响)。
处置后
changeset status退出码 0,发布计划中零 vscode 命中。二、该包在 npm 上是真实发布面(issue 的「无 npm 面」不成立)
changeset publish发布每个非 private 包,该包既非 private 又带publishConfig.access: public,因此它在 npm 上有 40+ 个版本:latest= 16.1.0(2026-07-22)rc= 17.0.0-rc.3(2026-08-03,即拍板前三天)issue 正文的「从未发布」只对 VS Code Marketplace / Open VSX 成立 —— 那里确实双 404,
「没人装着这个扩展」的结论不受影响。但它在 npm 上是活跃发布面,退役后将静默停更:
已发布版本不会消失(npm 不 unpublish),
latest就永久停在 16.1.0,没有任何渠道告知consumer 它已退役。
是否补
npm deprecate objectstack-vscode需要 npm 发布凭据,属维护者动作,已在#5825 提出待裁决,不阻塞本 PR 合并(本 PR 不改变任何已发布版本)。
删除面与提及清扫
删除
packages/vscode-objectstack/**(12 个文件)。pnpm-workspace.yaml用packages/*glob,无需改成员列表;lockfile 随pnpm install收缩 1102 行 /125 个包(
@vscode/vsce整棵子树)。无任何 manifest 依赖该包。清扫:
README.md包表 ·AGENTS.md目录树 ·content/docs/plugins/packages.mdx(删小节 + 计数 73→72、Client/DX 5→4) ·
.claude/skills/pm-dispatch/SKILL.md的domain:devx归属 ·scripts/publish-smoke-pack.mjs的 EXCLUDE 条目及注释 ·.changeset/config.json的 fixed 锁步组(check-changeset-fixed.mjs对组内不存在的包名会红,必须同步)。
保留白名单(历史记录类,改动即污染记录):
RELEASE_NOTES.md—— 文件自述「This file is historical.」,那张表是 v4.0.4 时42 包清单的快照
docs/DX_ROADMAP.md—— 2026-02-13 审计快照,自述基线「14 packages」,早已与今天无关.changeset/pm-dispatch-domain-table-full-coverage.md—— 已发布的 changeset 历史.changeset/pre.json的initialVersions—— changesets 自管状态文件;assemble-release-plan只对工作区内的包写入/读取该表,残留键永不被查。手改工具状态文件是 RC 窗口出事的典型原因,故不碰
content/docs/releases/全程未动安全 overrides:保留选择器,只更正注释
form-data与undici两条 OSV pin 的唯一传递来源是@vscode/vsce。删除后form-data从依赖树彻底消失;undici仅剩@ai-sdk/provider-utils的 7.29.0 与jsdom 的 8.9.0,两者都在
undici@>=7.23.0 <7.29.0选择器之外。两条 pin 现在都不再匹配任何东西。
选择器保留不动:在退役 PR 里顺手摘掉安全 pin 是降低安全姿态,应当是独立决定;留着则
未来若有传递依赖重新引入,仍会落在已修补版本上。但注释不能继续指向一个已不存在的包,
故就地记录
CONSUMER GONE (#5825)与保留理由。brace-expansion注释的 minimatch消费者清单同理去掉
@vscode/vsce(ts-morph/ eslint /@typescript-eslint/ glob /archiver 仍在,该 pin 依旧生效)。
门禁计数对账(删除前 / 后各跑一轮全套)
check:published-filescheck:type-check-coveragecheck-changeset-fixedcheck:nul-bytescheck:engine-double-contractcheck-override-consistencycheck:nul-bytes的 −13 与本 PR 删除的文件数精确相等(12 个包内文件 + 1 个待发布changeset)。所有计数都由 glob 实时计算并打印,仓内没有把成员数写死为断言的门禁,
因此无断言需要改。
验证
check:*+lint+check-changeset-fixed+check-override-consistency删除前后各跑一轮,pass/fail 状态零变化。删除前基线即有 3 个红:
check:i18n/check:i18n-coverage(新 worktree 未 build,os lint无输出 —— 与本 PR 无关)、
check:objectui-pin-fresh(objectui pin 过期,发布节奏门禁)。三者与本改动无关,删除后表现完全一致。
turbo run build --filter=!@objectstack/docs→ 71/71 successful(确认无包引用它)turbo run typecheck→ 124/124 successfulchangeset status→ 退出码 0,零 vscode 命中node scripts/check-nul-bytes.mjs→ OK;另对全部改动文件做了越过门禁盲区的自扫(
grep -naP覆盖 0x00-0x1f),干净changeset 路线:
skip-changeset标签存活包零行为改动,而已删除的包无法在 changeset 里点名(changesets 对未知包名直接
抛错),故本 PR 不 release 任何东西。依据
pr-automation.yml的门禁文案 —— #5292明确修正过处置顺序:标签是首选,空 frontmatter changeset 是 last resort,因为它是
changesets/action 的真实输入,全空集会让 Release 静默绿着空跑(#4898,曾卡住
17.0.0-rc.2)。故不采用 #4607 式空 frontmatter。
恢复路径
git 历史完整保留(
packages/vscode-objectstack至本 PR 父提交为止)。若未来出现非 AI用户的真实需求,按当时的 spec schema 重建。
Generated by Claude Code