Skip to content

docs(pm-dispatch): 补六条实测规程 —— 阻塞解除后重新定价、带前提的裁决、收益穿过下游边界、多面组件测试落点、跨仓 pin 滞后、死代码删除复核 (#5513) - #5645

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-5513-pm-dispatch-six-rules
Aug 5, 2026

Conversation

@claude

@claude claude Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Fixes #5513

.claude/skills/pm-dispatch/SKILL.md 增补六条实测规程,来自 2026-08-05 那条 filter 缺陷链
(#5363 / #5366 / #5368 / #5375 / #5431 / #5445,cloud#1117)里真实咬过人或真实救过场的六处。

纯增补:111 行插入、0 行删除。 既有条目一字未动 —— #5501 的接力模式、#5522 的座位模型、
#5630 刚加的 assertEngineDeleteDispatch 条款均原样保留(git diff 的删除行计数为 0 可核)。

六条的落点

issue 正文的行号锚点(:426/:508/:576/:692/:785/:191/:145)基于 908 行旧版,今日已被三次改动
顶掉;实施按节名/内容定位,并在当前 origin/main 上逐条重核六条确实仍缺(六个概念的
关键词 grep 全部零命中,唯一的「一致性表」命中是串行接力段里的一处举例,不是条款)。

# 落点 增补
1 Multi-repo,rule 2 之后 pin 滞后:Blocked-by: 只保证上游已合并,姊妹仓还有第二个读数 —— 本仓 pin 是否覆盖那个 commit
2 step 3 末(「deferring is not shelving」之后) 阻塞解除后重新定价:派发令必答项 + 派发被延后单前重读其选项与成本估计
3 step 5 派发令(pin sweep 段之后) 多面组件测试落点:同一契约多个实现面时,新用例进共享一致性覆盖(原话照录)
4 step 7 清单(验收标准那条之后) 收益穿过下游边界:价值主张依赖下游如实转发时,端到端验一次
5 step 7 清单(末条) 死代码删除的复核:PM 在 origin/main 独立核一次引用面再 ACCEPT
6 step 8 升级门槛之后 带前提的裁决:第三档 = 裁决 + 前提验证 + 「前提不成立报 fork」禁令,三件缺一不可

两处与 issue 正文不同的核实结果(成文按核实后的事实写)

a. 「没有任何闸门在量这个 pin 滞后」不成立。 issue 第 5 条的附带论断被证伪:cloud 的
scripts/check-pin-staleness.sh(pnpm check:pin-staleness,test.yml 里以 continue-on-error
跑)每次 CI 都报两个 pin 各落后 main 多少 commit,脚本头明确写了 advisory 是有意设计
(「pin bumps are deliberate」,阈值需显式传 --max-behind N)。它答的是「落后多少」,不是
「是否覆盖我这条裁决 commit」—— 成文因此指向该脚本,只把后一个问题留给派发前的祖先判断。
据此另立「无闸门」发现单:那条发现按 issue 原措辞立出来会是一条事实错误的单。

顺带一个方法学读数,已写进条款:核祖先关系要用 REST compare 接口(取 status / ahead_by),
因为本仓检出是 shallow,pin 的 commit 解不出来,本地 merge-base --is-ancestor 会以 fatal:
退出 —— 而它在 && / || 链里会被读成「不是祖先」,正是 Operational notes 6 那类假读数。
我自己第一次就踩了这个,改用 API 后得到:裁决 commit 9c5abf4e9 比 pin 领先 69 个 commit
(即 pin 未覆盖它,结构性结论与 issue 一致;issue 写的 87 是立单时的读数,现在到 main 是 165
—— 数字随时间涨,所以条款里只保留「立单时 87」作历史读数,判据写成祖先关系而非数字)。

b. 第 4 条的 rest-server 缺陷本身已修。 #5423 已按「截断而非替换」落地(origin/main
CLIENT_MESSAGE_MAX = 500truncateClientMessage),所以成文改用过去时并注明已修,
免得后来的读者去找一个已不存在的活 bug。这不削弱该条:它要补的是复核清单的缺口(四个 PR
合入、没有任何人在复核里查过收益能不能穿过信封,直到一个 dev 做别的单时顺手撞上),与那段
代码是否已修无关。

克制照 issue「未验证的部分」写入

  • 第 2、3 条各带适用判据:前后两单共用同一契约或数据表示;组件对同一契约有 ≥2 个实现面。
    两处都明写形态迥异的批次(纯 UI、纯文档、单面脚本)不强加 —— 样本集中在「一个组件的多个
    实现面逐层收口」这一类工作上。
  • 第 4 条的边界检查频次取 issue 建议的最后一种:只在价值主张依赖下游转发时,不是每单都做。

验证

  • node scripts/check-nul-bytes.mjs --self-test + 全仓扫描:绿(48 断言 / 5537 文件,无裸控制字节)。
  • 改动文件自扫超出门禁面的字符类(\x00-\x08\x0b\x0c\x0e-\x1f\x7f):零命中;
    并用一个确定存在的邻近词反查(30 命中),证伪「扫描器坏了 / 路径错了」。
  • check:docs-audit-scope:绿。
  • markdown 结构:强调标记成对(排除代码围栏内的 glob 后为偶数)、代码围栏 16 个(增 2)、
    嵌套围栏缩进与列表项对齐、标题层级未动。
  • .claude/ diff,无源码/测试面改动。

changeset

.claude/ 文档-only,不面向用户 → 走 skip-changeset 标签路线,写空 frontmatter
changeset。需要挂 skip-changeset 标签(CI 的 Auto Label 可能已自动挂上)。


Generated by Claude Code

…in 滞后、死代码删除复核 (#5513)

2026-08-05 跑完一整条 filter 缺陷链(#5363 / #5366 / #5368 / #5375 / #5431 / #5445,
cloud#1117)后回看,六处在那一轮真实咬过人或真实救过场的规程,SKILL 里没有对应条目。
六条各落在 issue 指定的节内,**纯增补**:111 行插入、0 行删除,既有条目(#5501 的接力
模式、#5522 的座位模型、#5630 的 assertEngineDeleteDispatch 条款)一字未动。

落点与要点:

1. **Multi-repo,rule 2 之后**「pin 滞后」——`Blocked-by:` 只保证上游已合并,姊妹仓还有
   第二个读数:本仓 pin 是否覆盖那个 commit。cloud#1116 的裁决落于 framework #5368
   (`9c5abf4e9`),而 cloud 的 `.objectstack-sha` 未覆盖它,于是 `TursoDriver` 有一个
   方向反了的分叉窗口(fail-closed 一侧先到)。规程:派发前核祖先关系;未覆盖则 dev 在
   PR 正文留档窗口与方向,⛔ pin bump 不做 rider。
2. **step 3** 末「阻塞解除后重新定价」—— 前一单合入会改变后一单的成本模型,方向不止一个
   (本轮变便宜、没变、成本估计过期各有实例)。两个动作配对:派发前一单时带必答项
   「你的改动是否让 #X 变简单 / 变难 / 不必要 / 无影响」,派发被延后那单前用该回答重读
   其选项与成本估计。
3. **step 5** 派发令「多面组件的测试落点」—— 同一契约 ≥2 实现面时,新用例进共享一致性
   覆盖而非独立文件(原话照录)。附 #5375 / #5431 / #5445 三条正交轴共用一条不变量。
4. **step 7 清单**「收益穿过它必经的那道边界之后还在吗」—— 判据是价值主张是否依赖下游
   如实转发;实例即 #5423(4xx 直通曾整条替换 ≥500 字符正文,`code` 到了正文没到)。
5. **step 7 清单**「死代码删除的复核」——「这是死代码」是断言而非能从 diff 读出的事实,
   PM 在 origin/main 独立核一次引用面再 ACCEPT(查法用 Operational notes 6:notes 6 说
   怎么查不假阴性,本条说什么时候必须查)。
6. **step 8** 升级门槛之后「带前提的裁决」—— 分歧关键是可被代码证伪的事实时,第三档 =
   裁决 + 前提验证要求 + 「前提不成立报 fork,不许硬做也不许悄悄改选」禁令,三件缺一
   不可;缺第 3 条即退化为无人裁决且无读数显示。

实施时两处核实结果与 issue 正文不同,成文按核实后的事实写:

- issue 的附带论断「没有任何闸门在量这个 pin 滞后」**不成立** —— cloud 的
  `scripts/check-pin-staleness.sh`(test.yml 以 `continue-on-error` 跑)每次 CI 都报两个
  pin 各落后 main 多少 commit,advisory 是**有意设计**(`--max-behind` 需显式传)。它答
  的是「落后多少」,不是「是否覆盖我这条裁决 commit」;成文因此指向该脚本,并只把后一个
  问题留给派发前的祖先判断。据此**未**另立「无闸门」的发现单。
- 第 4 条的 rest-server 缺陷本身已由 #5423 按「截断而非替换」修掉,成文改用过去时并注明,
  以免后来的读者去找一个已不存在的活 bug;该条要补的是**复核清单的缺口**,与代码是否已修
  无关。

第 1 / 3 条按 issue「未验证的部分」的克制写入适用判据(前后单共用同一契约或数据表示;
组件对同一契约有 ≥2 实现面),形态迥异的批次(纯 UI、纯文档)明确不强加。

验证:`node scripts/check-nul-bytes.mjs --self-test` + 全仓扫描绿(48 断言 / 5537 文件);
改动文件自扫 `grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'` 零命中,并用邻近词反查证伪
「扫描器坏了」;`check:docs-audit-scope` 绿;markdown 结构核对(强调标记成对、代码围栏
16 个偶数、嵌套围栏缩进对齐)。

Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE

Co-authored-by: os-zhuang <hr@objectstack.ai>
Co-authored-by: Claude <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 5, 2026 9:38pm

Request Review

@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Aug 5, 2026
@os-zhuang os-zhuang added skip-changeset PR has no user-facing published change; bypasses the changeset gate and removed documentation Improvements or additions to documentation labels Aug 5, 2026 — with Claude
@github-actions github-actions Bot added size/m documentation Improvements or additions to documentation labels Aug 5, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 5, 2026 21:49
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 5, 2026
Merged via the queue into main with commit 30b7843 Aug 5, 2026
27 of 28 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-5513-pm-dispatch-six-rules branch August 5, 2026 22:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants