Skip to content

35 个包 README 的生成块 §Compatibility 版本已陈旧:声称 @objectstack/spec ^3.3.0,实际全仓锁 ^17.0.0-rc.5;部分包还列了自己并不依赖的 @objectstack/client #3645

Description

@yinlianghui

越界发现,记录于 #3632(改写 packages/runner/README.md 的插件清单)期间通读该文件时。未在 PR #3644 中顺手修改 —— #3632 的派发范围被锁死在两处插件措辞,且本条波及 35 个文件、根因在发布流程而非某个 README,形状上不属于那一单。

编辑说明:本文首版正文里那个 HTML 注释标记被 GitHub 的正文净化器当成真标签整段吞掉了(存下来是空串),证据因此丢失。现改用转义写法复述,不再写裸的注释语法。

事实(对 origin/main 复核,切点 fa3ba5bf1)

35 个包 README 末尾有一段生成块 §Compatibility,块前有一行 HTML 注释形式的标记,内容为 release-metadata:v3.3.0(即 <!-- + release-metadata:v3.3.0 + -->)。35 个包的这一块逐字相同:

## Compatibility

- **Node.js:** ≥ 18
- **TypeScript:** ≥ 5.0 (strict mode)
- **`@objectstack/spec`:** ^3.3.0
- **`@objectstack/client`:** ^3.3.0
- **Tailwind CSS:** ≥ 3.4 (for packages with UI)

与实现对不上,两处:

1. spec 版本差了一个大版本区间。 27 个包的 package.json@objectstack/spec 锁在 ^17.0.0-rc.5,没有任何一个包锁 ^3.3.0:

$ grep -l 'objectstack/spec.*\^3\.3\.0' packages/*/README.md | wc -l
35
$ grep -l '"@objectstack/spec": "\^17' packages/*/package.json | wc -l
27
$ grep -rh '"@objectstack/spec"' packages/*/package.json | sort | uniq -c
     26     "@objectstack/spec": "^17.0.0-rc.5",
      3     "@objectstack/spec": "^17.0.0-rc.5"

复现标记行本身(用 -F 免转义):

$ grep -rc -F -- 'release-metadata:v3.3.0' packages/*/README.md | grep -vc ':0'
35
$ ls packages/*/README.md | wc -l
38

2. 列了并不存在的依赖。packages/runner 为例,它的 package.json@objectstack/client 既不在 dependencies 也不在 devDependencies,README 却给它标了一行兼容版本。(生成块逐字相同,所以凡是不依赖 client 的包都有这一行。)

影响与定级

这些 README 是 npm 包页正文,是安装前读到的第一手兼容性说明。照 ^3.3.0 装 spec 的读者拿到的是一个差了十几个大版本的包。定级留给分诊 —— 按纪律不自评。

需要注意的是这不是逐个 README 手写出来的漂移:那行 release-metadata:v3.3.0 标记说明整块是发布时按模板生成的,35/38 个包 README 逐字一致。所以修法多半在生成这块的发布脚本(让版本号取自真实 pin,并按包裁掉它不依赖的行),而不是 35 次手改 —— 手改会在下次发布被再次覆盖。这一点请分诊时确认,我没有去定位那个生成脚本(越界)。

已搜重

关键字 Compatibility README objectstack/spec versionrelease-metadata Compatibility block package READMErunner README plugins 搜过开放 issue,total_count: 0 / 仅命中 #3632#3603,无重复。与 #3603(包 README 里 9 条 404 站内链接)同为「包 README 未被门禁覆盖」的邻域但不同缺陷:那单是链接可达性,本单是版本事实,故单列。

关联


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions