diff --git a/.claude/skills/pm-dispatch/references/review-checklist.md b/.claude/skills/pm-dispatch/references/review-checklist.md index 22ebb6a54c..78a592331c 100644 --- a/.claude/skills/pm-dispatch/references/review-checklist.md +++ b/.claude/skills/pm-dispatch/references/review-checklist.md @@ -7,14 +7,10 @@ 当合并应当关卡**;只落地了可实施一半(另一半在决策箱或按范围排除)⇒ 必须 `Part of #`,否则合并会静默关掉一张正躺在决策箱里的卡,而 `needs-user-decision` 的收件 箱过滤只看 open issue。翻 ready 之前亲核首行,别只信报告。 -- **闭合关键词两读:翻 ready 前扫正文,合并后读每张相关卡的 `closed_by_pull_requests`**(body 与 - commit message 分开解析,细则见平台读数事实表):⛔ 永不把它放在另一张 open 卡编号旁 —— - 解析器不理会否定句,为防误关而写的那句恰是执行误关的那句;半状态巡查器只巡开着的 - PR,这一扫是合并前唯一的人工关口。合并后确认应关的关了、**没有别的卡被一并关掉** - —— 误关的卡以 completed 对「只看 open」的过滤隐身,这一读是唯一兜得住的机械检查。 -- **`Part of` 收口的卡不会自动关,`pm:dispatched` 必须手工摘**(动作与评论要件见 - 入队与落地细则 B):ACCEPT 一张 `Part of` PR 的那一刻就把这步记进落地待办, - ⛔ 不留给「下次巡检看到再说」—— 漏摘的标签让在飞视图数进一张无人认领的开卡。 +- **闭合关键词两读**:翻 ready 前亲扫正文 —— 合并前唯一的人工关口(⛔ 关键词永不挨着另 + 一张 open 卡编号;解析器不理会否定句);合并后那一读见落地细则,解析事实见平台读数。 +- **`Part of` 收口的卡不会自动关,`pm:dispatched` 必须手工摘**(动作要件见落地细则 B): + ACCEPT 那一刻记进落地待办,⛔ 不留给下次巡检 —— 漏摘让在飞视图多算一张无主开卡。 - **范围检查**(取 changed files,⛔ 不看报告自述):无 `content/docs/releases/` 改 动、用户可见改动有 changeset、无与卡无关的文件。Tests/docs-only 按仓库分流:本仓 库走 `skip-changeset` 标签、不走空 changeset(空 changeset 在本仓库滞留发布),含 @@ -28,6 +24,12 @@ 布,看起来像修好了,比不合更糟。 - **测试证据**要有真实命令与通过输出,不是一句 tests pass。**测量类交付先看阳性对 照**:对照本身失败 ⇒ 该读数记 INCONCLUSIVE,⛔ 不把它的「绿」当被测风险的证据入账。 +- **引 entry `.d.ts` 逐字节相同,必须同块带阳性对照**:该读数只判**名字集**(增删再导 + 出名会移动 barrel 字节),对 barrel 已转发符号的**形状**恒无效 —— `export *` 与 + `export type { X } from` 都不复述形状。判据:同块点名**声明**该符号的模块那份移动了的 + 产物,或本会移动它的具名探针;缺则记 INCONCLUSIVE。实测 2026-08-24(清 dist 与 + tsbuildinfo 的三腿重建):声明包 `dist/base.d.ts` 随探针移动又移回,转发文件与 entry + barrel 三腿全同;同日三处误用。 - **报告 `tests`/证据里有 git 本可回答的 API 读吗?**(dev 契约的读序是 git → REST → MCP/GraphQL)判据:MCP `list_issues`/`search_issues` 一类 GraphQL 读,或重跑派发词已下发的去重读数 —— fetch 之后本地 git 就答得了文件内容、diff、提交史与分支态。⛔ 不因此判 REWORK,ACCEPT @@ -39,16 +41,14 @@ 款),各仓真绿跑法与 CI 日志看不见的门禁见 `true-green.md`。收敛期转红走补丁轮 (SendMessage 续派原 dev —— 那是这笔交换已付过的价钱,不是 REWORK 的理由;红着合并才是)。重量级卡 可在派发令显式写「本单等 CI」。 -- **每个门禁读数先钉到 PR 的当前 head**:先读 PR 的 `head.sha`,再比对 run 的 - `head_sha` —— 不一致的 run 是关于一个死提交的读数,绿与红**双向都不入账**(旧 head - 的绿把「新推送未验」读成「消费者干净」,旧 head 的红把已修掉的缺陷重新挂回 PR)。 +- **每个门禁读数先钉到 PR 的当前 head**:比对 run `head_sha` 与 PR `head.sha` —— 不一致 + 的是死提交读数,绿与红**双向都不入账**(旧 head 的绿把「新推送未验」读成「消费者干 + 净」,旧 head 的红把已修掉的缺陷重新挂回 PR);⛔ 非当前 head 上的 `cancelled` 零动作、 + 永不重跑 —— 新推送自带全套 run,重跑只会给绿 PR 挂一个已修缺陷的假红。 - **dev 本地跑的门禁并集,同样先钉 head —— 同一条纪律**:契约要求**最后一次提交之 后**跑并集、把 `git rev-parse --short HEAD` 抄进报告与 PR 正文;与 PR 当前 `head.sha` 比一次,对不上即死树读数、**双向都不入账**;没抄 ⇒ 按**没有读数**处理,以门禁 job 结论为准。复核后又推提交而 HEAD 未动 ⇒ 补跑并集(至少棘轮族)再更报告。 -- **被取代 head 上的 run 永不重跑**:非当前 head 上的 `cancelled` 结论零动作 —— - 新推送自带全套 run;重跑烧一整个重量级周期,还能忠实复现已被当前 head 修掉的缺 - 陷、给绿 PR 挂上假红。 - **收益穿过必经边界之后还在吗?** 判据(不是每单都做):价值主张依赖下游如实转发 (HTTP 错误信封、序列化、日志汇聚、跨进程传输)⇒ 至少端到端验一次收益在边界之后 仍在 —— 精心写的拒收正文可能被 4xx 直通层整条替换。