diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index 09a17663a6..5885c74ea3 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -154,18 +154,16 @@ not found 的会话数十分钟前还 RUNNING;误判死会往活 worktree 塞第 ## subagent 批(`mode:subagent`)派发前置:先快进本地检出 subagent 在 PM 容器内运行,agent 定义与技能文本读**本地检出**,不是 `origin/main`。 -派发 subagent 批之前先快进:`git -C pull --ff-only origin main`(或核 -对 `HEAD` 等于 `origin/main`);检出过期则整批拿到过期定义(实测发生过)。用 -`--ff-only` 让脏或分叉的检出大声失败,不静默合并。 +派发 subagent 批之前先快进:`git -C pull --ff-only origin main`;检出过期则整 +批拿到过期定义(实测发生过)。用 `--ff-only` 让脏或分叉的检出大声失败,不静默合并。 ## 接手中断的 dev(worktree 接手协议) 先试复活、不可用才接手与 ⛔ 不重跑原派发词在主文件;五条增量: -- **死后恢复查三态,不止查远程**:三态 = 远程(`git ls-remote`)/ 仅容器磁盘 / 真没了 —— - 中间那态最值钱且当前无人查(worktree 比 agent 活得久,同容器共享,未提交改动通常还在); - 只查远程会理直气壮地令下一个 dev「从零开始」(实测三文件未提交改动险些丢)。捡到的工作一 - 律标 **UNVERIFIED** 交接 —— 不丢弃也不继承(实测捡到的改动含两个缺陷)。 +- **死后恢复查三态,不止查远程**:远程(`git ls-remote`)/ 仅容器磁盘 / 真没了 —— 中间那 + 态最值钱且当前无人查(worktree 比 agent 活得久,同容器共享,未提交改动通常还在),只查远 + 程会令下一个 dev「从零开始」。捡到的工作一律标 **UNVERIFIED** 交接 —— 不丢弃也不继承。 - worktree 已存在,⛔ 不要新建,`cd` 进去接着做(第二个 worktree 会劈开工作); - 先读全部既有提交与未提交改动,逐 hunk 决定保留或修正 —— 既不推倒重来也不盲信(死 agent 的一切都未经验证); - 把死 agent 没跑完的验证**完整重跑**并报真实输出(中断的运行没留下测试证据); @@ -209,6 +207,8 @@ os-dev 定义。 鼓励证伪)」—— dev 动手前验证,证伪照实报告并按裁决意图换实现路径,⛔ 不许为顺从假设 硬做;「PM 建议的路线(可选,实测优先)」—— dev 有更好的就换,⛔ 不得因「派发令写了」 照做。 +- **停条件写法:要证据,不要判决**。派发令里的前提/停条件检查必须要 dev 回报**证据面** + (搜了什么、找到什么),分叉归 PM 判 —— 写成「发现消费者就停下」把判决权交回被停的一方。 - **清单取数补遗**(条款主文在主文件):门禁清单单班之内就会过期,所以派发那一刻现取;全 farm 归 CI 跑一次,⛔ 不让 dev 枚举全 farm;点名单当天现取仍会漏(实测漏点名的门恰被改 动打红过)—— dev 对实际改动路径重取补跑,条款住 os-dev 定义。**pnpm 10.31 起 diff --git a/.claude/skills/pm-dispatch/references/review-checklist.md b/.claude/skills/pm-dispatch/references/review-checklist.md index 3c9eae341d..a915e8ea5d 100644 --- a/.claude/skills/pm-dispatch/references/review-checklist.md +++ b/.claude/skills/pm-dispatch/references/review-checklist.md @@ -20,10 +20,9 @@ open」的过滤隐身,这一读是唯一能兜住它的机械检查。 - **范围检查**(取 changed files,⛔ 不看报告自述):无 `content/docs/releases/` 改 动、用户可见改动有 changeset、无与卡无关的文件。Tests/docs-only 按仓库分流:本仓 - 库走 `skip-changeset` 标签、不走空 changeset(空 changeset 在本仓库滞留发布); - objectui 无此标签 —— 空 frontmatter changeset 即声明、即正确形态,⛔ 永不要求或 - 铸出该标签;含读者可见生成产物时 dev 选 changeset 是对的 —— 以 PR 正文说明的理 - 由为准,两条路都有效,别来回改。 + 库走 `skip-changeset` 标签、不走空 changeset(空 changeset 在本仓库滞留发布),含 + 读者可见生成产物时 dev 改选 changeset 亦对;objectui 无此标签 —— 空 frontmatter + changeset 即声明、即正确形态,⛔ 永不要求或铸出该标签,⛔ 别来回改。 - **就地修了范围外的邻接缺陷?**四条件逐条核(同缺陷类·机械·文件无他人认领·同门禁 族),再核 claim 文件面同轮已修订、PR 正文点名该修并载证据;缺一条即判 REWORK。 - **改动触及的每个包,`private: false` 即已发布 ⇒ 核 changeset 在不在**:判据是包 @@ -41,19 +40,16 @@ - **每个门禁读数先钉到 PR 的当前 head**:先读 PR 的 `head.sha`,再比对 run 的 `head_sha` —— 不一致的 run 是关于一个死提交的读数,绿与红**双向都不入账**(旧 head 的绿把「新推送未验」读成「消费者干净」,旧 head 的红把已修掉的缺陷重新挂回 PR)。 -- **dev 本地跑的门禁并集,同样先钉 head —— 同一条纪律**:dev 的契约要求在**最后一 - 次提交之后**跑并集,并把那一跑的 `git rev-parse --short HEAD` 抄进报告与 PR 正 - 文;复核就读这个 HEAD 与 PR 当前 `head.sha` 比一次。对不上 ⇒ 那份「本地全绿」是 - 关于一棵死树的读数,同理**双向都不入账**;正文没抄 HEAD ⇒ 按**没有读数**处理, - 以门禁 job 结论为准。复核轮之后又推了提交、报告里的 HEAD 没跟着动,正是它要抓的 - 那一形:补跑并集(至少棘轮族)再更报告 —— 棘轮恰恰是最后一次提交会动的那一族。 +- **dev 本地跑的门禁并集,同样先钉 head —— 同一条纪律**:契约要求**最后一次提交之 + 后**跑并集、把 `git rev-parse --short HEAD` 抄进报告与 PR 正文;与 PR 当前 + `head.sha` 比一次,对不上即死树读数、**双向都不入账**;没抄 ⇒ 按**没有读数**处理, + 以门禁 job 结论为准。复核后又推提交而 HEAD 未动 ⇒ 补跑并集(至少棘轮族)再更报告。 - **被取代 head 上的 run 永不重跑**:非当前 head 上的 `cancelled` 结论零动作 —— 新推送自带全套 run;重跑烧一整个重量级周期,还能忠实复现已被当前 head 修掉的缺 陷、给绿 PR 挂上假红。 -- **收益穿过必经边界之后还在吗?** 判据(不是每单都做):价值主张依赖某个下游组件 - 如实转发(HTTP 错误信封、序列化、日志汇聚、跨进程传输)⇒ 至少端到端验一次收益在 - 边界之后仍然存在 —— 精心写的拒收正文可能被 4xx 直通层整条替换,缺口在清单里不在 - 代码里。 +- **收益穿过必经边界之后还在吗?** 判据(不是每单都做):价值主张依赖下游如实转发 + (HTTP 错误信封、序列化、日志汇聚、跨进程传输)⇒ 至少端到端验一次收益在边界之后 + 仍在 —— 精心写的拒收正文可能被 4xx 直通层整条替换。 - **裁决实施 PR:旧立场的 pin 全仓翻转了吗?** grep 消费层(REST 信封测试、 objectql、runtime)确认旧立场零拷贝,**且**真正非法形状的拒收断言仍逐字在(派发 侧两句的对账)。 @@ -69,6 +65,10 @@ - **dev 验证过 issue 的前提吗?** `premise_still_valid: false` 是**再分诊输入**不 是失败 —— 证伪 issue(或 PM 自己的派发框架)的报告是好运行。dev 纠正 PM 要**当 众认**:更正落在 PR/issue 评论,错前提的正文另立跟进卡,⛔ 不静默丢弃。 +- **报告清掉了它被要求停下的停条件?亲核证据再 ACCEPT** —— 与上条成对:证伪是好运 + 行,**清掉**停条件却不可自证(实测:dev 找到了停条件点名的消费者、推理着绕过去就 + 提交,靠一次无关停机才逼出复查)。判据是它报的证据面(搜了什么、找到什么)+ PM 自 + 己在 `origin/main` 上复核,⛔ 不接受结论散文 —— 绕过去的报告与守约的长得一样。 - **验收判据本身也可被证伪**:dev 用测量推翻字面判据、换上等价或更强的不变量门禁 = 好运行照 ACCEPT;但推翻过程必须写在 PR 正文并附 main 语料上的实测信噪比(误报 为零的证据),否则按 REWORK 要证据。