Skip to content

README 的 Peer Dependencies 区块只有 12 行有人比对:同区块另外 16 行里 9 行与清单不符(含 components 的 tailwindcss ^3.0.0 vs 清单 ^4.2.1 实错) #3750

Description

@yinlianghui

实施 #3717(把 ledger 的 restatement 从记账升级成断言)时全量普查 packages/NAME/README.md 的 Peer Dependencies 区块得到的越界发现,据实另立。#3717 的文件面只有 scripts/__tests__/doc-version-claims.test.ts + 只读清单/README,下面这些既要改文档/清单、又要加宽门禁,两头都在界外。

事实(普查于 origin/main = 8ad6070)

28 行「backtick 包名 + 版本区间」的 peer 陈述,只有 12 行是 ledger 登记的 react 行(#3717 的断言正好覆盖这 12 行)。剩下 16 行无人比对,其中 9 行与本包清单不符:

README 行 声明 清单 peerDependencies 形状
packages/components/README.md 41 tailwindcss ^3.0.0 ^4.2.1 版本失真
packages/auth/README.md 24 react-dom ^18.0.0 || ^19.0.0 未声明 多报 peer
packages/collaboration/README.md 23 同上 未声明 多报 peer
packages/i18n/README.md 24 同上 未声明 多报 peer
packages/mobile/README.md 24 同上 未声明 多报 peer
packages/permissions/README.md 23 同上 未声明 多报 peer
packages/plugin-ai/README.md 22 @object-ui/core(无版本) 未声明 多报 peer
packages/plugin-designer/README.md 28 同上 未声明 多报 peer
packages/plugin-report/README.md 26 同上 未声明 多报 peer

第一行是用户今天就会踩的:照 README 装 tailwindcss 3 的人,拿到的包要求 ^4.2.1。这正是 #3690 的形状(清单动了、README 没跟),而且这次门禁两道都看不见。

那 5 个 react-dom 多报也不是笔误级:auth / collaboration / i18n / mobile / permissions 的 src 里没有任何 react-dom 引用,清单也没声明——README 让读者去装一个这些包不需要的 peer。

为什么两道门禁都漏

  1. 棘轮(doc-version-claims.test.ts 的 KNOWN_CLAIMS)漏 tailwindcss:TOOLCHAIN 里是 Tailwind CSS|Tailwind,而 \bTailwind\b 在 tailwindcss 上没有词边界(后面接着 css),所以 - \tailwindcss` ^3.0.0 这行从来没被匹配、也就从来没进 ledger。react-dom 行同理不匹配(\bReact\b命中后 SEP 消化不掉-dom`,VERSION 落空)。
  2. restatement 类只是记账、没有断言:12 条 README 版本重述与自家 package.json 的逐字一致靠人复核(#3710 分诊裁的 B 只落地了一半) #3717 的断言是 ledger 驱动的:它遍历 restatement 条目,条目没有的行自然不判。分诊已预裁「一条规则只判一种事实」,加宽区块超范围,故按「越界即停」记于此。

修法方向(不预判,留给分诊)

两半可以独立推进:

Blocked-by: #3717(仅门禁加宽那半;文档/清单侧不依赖它)

已搜重

tailwindcss README peer、peerDependencies README 清单、tailwind version drift docs、react-dom Peer Dependencies README 四组关键字搜过本仓开放 issue,除 #3717 与 #3741(react-runtime 清单侧 >=18 无上界,同族但另一条)外无命中。

Activity

  1. os-zhuang commented on Aug 8, 2026

    @os-zhuang
    Contributor

    Triage: pm:queue (objectui in-repo card). The Blocked-by: #3717 is now satisfied — #3717 closed completed at 2026-08-08 11:48Z, so both halves (docs/manifest corrections AND the gate widening built on its parsePeerStatement / sameRange machinery) are dispatchable in one card. No pm:blocked needed.

    Post-merge re-verification (per the unblock rule — the closing merge is the commit most likely to have already fixed the carded rows; objectui origin/main @ b1204af): the mismatches survive it. packages/components/README.md:41 still says tailwindcss ^3.0.0 vs manifest peerDependencies ^4.2.1; packages/auth/README.md:24 still claims a react-dom peer that packages/auth/package.json does not declare. #3717's implementation touched only the assertion test and the 12 ledgered react rows — the 16 unledgered rows are untouched, as this card predicted.

    Classification rationale. Concrete drift with a per-row table and an already-built enforcement substrate; the tailwindcss row is a user-facing docs error (follow the README, install a major the package's peer range rejects). The "do these packages want a react-dom peer" question is answerable by reading the sources (the body already verified zero react-dom references in all five) — dev-level judgment, not a maintainer ruling.

    Dedup: the body's own four-keyword search stands; #3717 (closed) covered the 12 ledgered rows, #3741 is the manifest-side unbounded-range sibling on react-runtime — distinct. No open duplicate.

    Not marked target:v17: the wrong README row surfaces as an unmet-peer warning at install time, not a silent published-face failure — improvement-grade, next train is fine.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. self-assigned this
    on Aug 8, 2026
  3. yinlianghui commented on Aug 8, 2026

    @yinlianghui
    CollaboratorAuthor

    认领:PM 循环批 183(objectui 整仓席位,登记表 objectstack#4604)

    Blocked-by(#3717)已落地,分诊席合并后复核 9 行失真幸存——双半件同 PR:①文档/清单侧:tailwindcss 行按 #3690 方法先测真相侧(实测 components 在 tailwind 4 下构建/工作则收窄 README 到 ^4.2.1;若 3.x 实测仍受支持则是清单错,如实报);5 处 react-dom 与 3 处 @object-ui/core 多报按卡内证据(src 零引用 + 清单未声明)从 README 删除。②门禁侧:复用 #3717 的 parsePeerStatement/sameRange 三件套,把断言从 ledger 条目加宽到 Peer Dependencies 区块每一行(双向:区块行↔清单逐字;反向"清单 peer 必须在区块出现"若加,单独说明取舍)。⚠️ TOOLCHAIN 词界漏扫(\bTailwind\b 不匹配 tailwindcss)在门禁加宽后若成为死角,一并修词表或说明由新断言覆盖。

    会话:session_01GTRjn8xBqp75dk7kFupVRt
    分支:claude/issue-3750-peer-block-parity
    Worktree:objectui-3750
    文件面:9 个 packages/*/README.md 具名行 + scripts/__tests__/doc-version-claims.test.ts + 仅当真相侧判定需要时相应 package.json(越界即停;与在飞 #3774 的 data-objectstack/src 不相交)


    Generated by Claude Code

  4. yinlianghui commented on Aug 8, 2026

    @yinlianghui
    CollaboratorAuthor

    验收:PR #3779 ACCEPT(会话 session_01GTRjn8xBqp75dk7kFupVRt,PM 循环批 183)。

    交付内容:9+1 行全修——tailwindcss 行真相侧实测定案(components 是 Tailwind 4-only:postcss 加载 @tailwindcss/postcss、v4 专属 @theme/@custom-variant、真实管道对 4.3.3 编译通过 → 清单对、README 收窄 ^4.2.1);5 处 react-dom 逐包复核后删除;3 处 @object-ui/core 删除但证据基础订正(卡与派发词的"零 src 引用"为假——三包各引 1/3/8 次;真依据是 core 为 workspace 常规依赖随包解析,读者永远无需自装)——错误依据不复述,更正后结论保留,正确处置。门禁侧:断言输入集拓宽为并集(非平行断言,一漂移一报告者),比对 12→21、空转下限 10→18 加块计数下限;块遍历器有据不复用 parsePeerStatement(无区间行返回 null——恰是三行 core 藏身之处);反向断言按测量收窄到已有块的 README(全仓强推会逼 20 个包为测试写新块),收窄后仍抓到 plugin-designer 的 react-router-dom 真缺口(第 10 行,同面文件);TOOLCHAIN 补 tailwindcss 且探针 F 诚实交代其剩余价值(块外字面量,当前语料为零,KNOWN_CLAIMS 条目使其不沦为装饰)。

    证据:六方向逆向验证全部预测命中,C/D 两针证明"是拓宽而非正则修复承载这两类";changeset-presence 门自答"不欠"并核了 6 个先例;CI 18 项零失败。

    新立 #3780(同 README 的 Setup 步骤仍教 Tailwind 3 惯用形,散文类需语义裁定)与 **#3781(data-objectstack.mdx 宣称的 peer 与清单 {} 相悖——内含"适配器是否应把 client 设为 peer"的真设计题,dev 正确地没猜,标给维护者方向)**入分诊池;#3781 若分诊席判 needs-user-decision 将进决策箱。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions