这是 #3710 分诊裁决 B 的剩余部分,据实另立而不是悄悄不做。
背景:B 裁了什么
#3710 正文留了 A/B 两条路,分诊在 #3710 (comment) 明确裁 B「保留并钉住」,理由是这一族与 #3708 那族的关键差别在于有同包锚:
加一条测试断言每个 README 的 peer 重述与本包 peerDependencies 逐字一致 …… B 只是把「记录」升级成「断言」。
落地了多少
#3710 的实现 PR(与 #3708 / #3709 并卡)完成了 B 的前半段:
packages/layout/README.md 三条 peer 行收窄为与清单逐字一致;
packages/plugin-chatbot/README.md 的 @ai-sdk/react 主版本对齐清单;
- ledger 里这两条从
kind: 'stale' 改判为 kind: 'restatement'。
没有落地的是后半段:那条断言。 原因是该 PR 的派发文件面把 scripts/__tests__/doc-version-claims.test.ts 的可改范围限定在 KNOWN_CLAIMS 行,新增断言超出该范围,故按「越界即停」记录而非自行扩权。
今天的实际保障强度
doc-version-claims.test.ts 的棘轮问的是「这个版本字面量有没有被登记」,不是「它说得对不对」。所以 12 条 restatement 条目声称的「与本包清单逐字一致」目前由 why 字段里一句 "re-verify with a one-line read of the manifest" 兜着 —— 即人工复核。
这正是它防不住的形状:清单侧改了区间、README 没跟,字面量还在、条目还在,棘轮两个方向都不响。#3690 就是这个形状的活样本(plugin-report 的 README 与清单不符,门禁只能把它记成 stale,不能自己发现)。
可行性已被本轮测量证实
一个必须一起决定的边界
断言写「逐字一致」时,plugin-chatbot 那条要单独处理:它重述的是 dependencies["@ai-sdk/react"](^4.0.47)的主版本(v4),不是逐字。要么把断言限定在 peer 行、把它留在 restatement 但标注不受断言覆盖;要么定义一个「主版本一致」的弱断言。倾向前者 —— 一条规则只判一种事实,混判会让下一个读者说不清红的是什么。
已搜重
README peerDependencies pin manifest assertion、版本 文档 失真 drift docs version 两组关键字搜过开放 issue,除 #3708 / #3709 / #3710 / #3690 外无命中。
Generated by Claude Code
这是 #3710 分诊裁决 B 的剩余部分,据实另立而不是悄悄不做。
背景:B 裁了什么
#3710 正文留了 A/B 两条路,分诊在 #3710 (comment) 明确裁 B「保留并钉住」,理由是这一族与 #3708 那族的关键差别在于有同包锚:
落地了多少
#3710 的实现 PR(与 #3708 / #3709 并卡)完成了 B 的前半段:
packages/layout/README.md三条 peer 行收窄为与清单逐字一致;packages/plugin-chatbot/README.md的@ai-sdk/react主版本对齐清单;kind: 'stale'改判为kind: 'restatement'。没有落地的是后半段:那条断言。 原因是该 PR 的派发文件面把
scripts/__tests__/doc-version-claims.test.ts的可改范围限定在KNOWN_CLAIMS行,新增断言超出该范围,故按「越界即停」记录而非自行扩权。今天的实际保障强度
doc-version-claims.test.ts的棘轮问的是「这个版本字面量有没有被登记」,不是「它说得对不对」。所以 12 条restatement条目声称的「与本包清单逐字一致」目前由why字段里一句 "re-verify with a one-line read of the manifest" 兜着 —— 即人工复核。这正是它防不住的形状:清单侧改了区间、README 没跟,字面量还在、条目还在,棘轮两个方向都不响。#3690 就是这个形状的活样本(
plugin-report的 README 与清单不符,门禁只能把它记成stale,不能自己发现)。可行性已被本轮测量证实
@ai-sdk/reactv3(实为 ^4.0.47)、layout 的 react peer 比清单更宽 #3710 之后是 10 条 + layout = 全部一致,唯一例外plugin-report的修法在清单侧(@object-ui/plugin-report的 peerDependencies 只允许 React/ReactDOM^18.0.0,其余 28 个 UI 包都是^18.0.0 || ^19.0.0(仓库自身 dev 用 19.2.8) #3690);- \react` ^18.0.0 || ^19.0.0这一种拼写,react-runtime的>=18` 是它清单的原样拼写,同样逐字可比;packages/NAME/package.json的peerDependencies,不需要新数据源。一个必须一起决定的边界
断言写「逐字一致」时,
plugin-chatbot那条要单独处理:它重述的是dependencies["@ai-sdk/react"](^4.0.47)的主版本(v4),不是逐字。要么把断言限定在 peer 行、把它留在restatement但标注不受断言覆盖;要么定义一个「主版本一致」的弱断言。倾向前者 —— 一条规则只判一种事实,混判会让下一个读者说不清红的是什么。已搜重
README peerDependencies pin manifest assertion、版本 文档 失真 drift docs version两组关键字搜过开放 issue,除 #3708 / #3709 / #3710 / #3690 外无命中。Generated by Claude Code