docs(pm-dispatch): 协调模型改版 —— 分诊/执行纵向拆分 + 一人一车道双射 + 登记表正文即真相 + 座位 Routine 化 (#5472) - #5522
Merged
Merged
Conversation
…ine 化 (#5472) 维护者 2026-08-05 拍板的 PM 协调模型改版,落到 `.claude/skills/pm-dispatch/SKILL.md` (唯一文件面)加一份 changeset。前提已对 origin/main 核过:同文件今天已合的 #5130 (决策轴)与 #5095(域表 22 包)成果全部保留,engine 域拆分与本单其余条款在 main 上均未落地,按增量施工。 - Multi-repo rule 4 重写为「纵向拆分 + 双射」:1 个分诊 PM(全仓唯一,只扫/分类/ 打标签/拆跨域/查重,永不认领派发,`domain:*` 的唯一生产者)+ N 个执行 PM(信任 标签、跳过分诊、只在本车道认领)。旧的分片阶梯 / 同队列禁令 / Borrowing 三段 删除,只留一处「越界许可已删除」的墓碑句。 - 跨域例外路径成为唯一越界通道:分诊座位指定单一车道 PM 认领 + 申报文件面 + 定向在飞检查(写明触发条件与检查范围);全局在飞检查从每轮常备税降级为该路径专用。 - 座位表协议(#4604):正文表格即唯一权威现状,行=座位 / 列=座位|范围|当前 PM|说明, 接管即就地编辑该行 + 审计评论;评论不承载状态;无心跳,活性惰性判定,>24h 无产出 可回收。epic 登记退回 `pm:epic` 父单正文(`label:pm:epic` 即索引),座位表不重复记。 - rule 5 补 org Project 的分层定位:视图层、无任何机器读它、GraphQL 配额不进循环 热路径;权威层坚持 issue 正文 + REST。 - 域表重切:`domain:engine` 拆为 `domain:engine-core`(objectql / metadata* / platform-objects / core / formula / plugin-pinyin-search)与 `domain:drivers` (`plugins/driver-*`),附存量标签迁移与座位表加行要求;拆分后每包恰好一域。 - 座位 Routine 化的运行形态(Dispatch backends / Collect / step 9):每座位一个 cron Routine、fresh session per fire、频率随队列深度独立调、读 #4604 拿范围 → 从 labels 重建状态 → 跑一轮 → 结束;轮次互斥取「fire 开始查上一轮产出时间, 间隔不足即自退」。⛔ 如实记录 #5474 试点实测:CCR 会话内 create_trigger 创建的 Routine 不携带 GitHub 连接器,fired session 无 mcp github 工具即静默零产出, 座位 Routine 须由维护者从 claude.ai Routines UI 带连接器创建并先烟测。 - round loop 新增职责划分表(step 0 / step 2 分类半边属分诊座位,step 1、3-9 属 执行座位)+ step 0 三处扫描排除 + Guardrails 两条新 binding。 刻意未动:`.claude/agents/os-dev.md`(在飞 #5441 的领地)、`content/docs/releases/`、 已发布目录 `skills/objectstack-pm-dispatch/`、#4604 正文本身(运行态登记由 PM 落地)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N3uGFF8teXbpgtbEJ1aYXu
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
#5501(#5441 的实施)已于 2026-08-05T15:02:23Z 合入 main,本分支终轮 git merge origin/main 无冲突(两 PR 的落点区段互不相交)。机械合并之后补两处**语义**叠加, 使两侧意图相加而不是并排放置: - step 6 Collect:#5501 的停摆纠偏靠 SendMessage 唤醒一个还活着的对面,而座位 Routine 的 fire 结束后没有可唤醒的 subagent —— 停摆与「会话已销毁」在 GitHub 上是同一个读数。补一段:验证管线可能超过一个 fire 的活,一开始就走 mode:cloud, 把恢复权交给下一轮的 GitHub 读数。 - 座位 Routine 化一节:补跨 fire 长流程的可行性依据 —— 串行接力(一棒一整圈 + 棒间 PM 复核)必然跨多个 fire,能跨过去是因为交接物全是 GitHub 读数(draft/ ready、auto-merge 是否挂上、预期红停放那份签名级清单写在 PR body 里);因此 对长流程只加一条要求:接力/停放的每一项都要落成 GitHub 上可读的文本,不许把 「下一棒该干什么」留在会话记忆里。 未改 #5501 的任何原文(含其「飞行中范围重叠拦截」段 —— 它说的是 PM 为**自己** 在飞的 agent 复查 main,双射之下天然就是本车道范围,与本单删掉的跨 PM 全局在飞 检查不是同一个机制,无需改写)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N3uGFF8teXbpgtbEJ1aYXu
os-zhuang
marked this pull request as ready for review
August 5, 2026 16:27
This was referenced Aug 5, 2026
This was referenced Aug 5, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #5472
维护者 2026-08-05 拍板的 PM 协调模型改版,落到唯一文件面
.claude/skills/pm-dispatch/SKILL.md(加一份 changeset)。前提核查(先做,再写)
git fetch origin main之后逐条比对 issue 的「SKILL.md 待改条款」与 origin/main 现状(首轮取 HEAD736519d):3681d2a)1ce2030)1ce2030只补包、未拆域,domain:engine仍是一行且含driver-*premise 成立(只有 #5130 / #5095 两条已被覆盖,其余全缺),按增量施工。
改了什么
domain:*的唯一生产者)+ N 个执行 PM(信任标签、跳过分诊、只在本车道认领)。旧的「分片阶梯 / 同队列禁令 / Borrowing」三段删除,以一句「越界许可已删除」的墓碑替代(见下「留给复核的三处」)。last_fired/next_run,会话座位查最近产出评论),超过 24h 无产出可回收。epic 登记退回pm:epic父单正文(label:pm:epic即索引),座位表不重复记 —— state model 表、gh label create pm:epic的描述、Epic 一节的委托信号/收尾/僵尸回收/残余风险四段同步改写。domain:engine拆为domain:engine-core(objectql / metadata* / platform-objects / core / formula / plugin-pinyin-search)与domain:drivers(plugins/driver-*四个),附拆分理由、存量标签迁移纪律、座位表加行要求;锚定规则里 hook 的condition求不出值时:全局 fail loud —— 抛错并中断该次操作(方案 B 已拍板;Blocked-by #4770) #4775 的示例同步改为domain:engine-core。plugin-pinyin-search归 engine-core 是读代码定的:__search伴生列由 SchemaRegistry 声明、engine 把它 OR 进$search(见packages/plugins/plugin-pinyin-search/src/companion-projection.ts首段注释),落点在编译/查询核心而非任何 driver。create_trigger创建的 Routine 不携带 GitHub 连接器 → fired session 拿不到 github MCP 工具 → 静默零产出(2026-08-05 烟测近 50 分钟零写入,已回滚);座位 Routine 须由维护者从 claude.ai Routines UI 带连接器创建,且创建后先手动 fire 一轮烟测、判据取 GitHub 上的产出;附带记录模型无法经 API 钉住(update_trigger返回model_update_disabled,Routine 继承环境默认模型)。domain:*单一生产者)+ step 4 认领模板里 borrowing 措辞的清理。终轮语义合并已完成(停放解除)
原「与 #5441 串行停放」一节作废:#5441 的 PR #5501 已于 2026-08-05T15:02:23Z 合并进 main(早于本 PR 的首次 push 15:12:53Z —— 首轮 fetch 的
736519d取在其合并之前,所以首轮基线不含它)。终轮已做:git fetch origin main,再git merge origin/main→ 零冲突,合并提交02445b2(两 PR 的落点区段互不相交;⛔ 未 rebase、未 force-push)。合并后git diff origin/main HEAD --stat仍只有本 PR 的 2 个文件,证明没有把别人的改动挟带进本 PR 的 diff。f7863fc:mode:cloud与「~2h 无报告即 blocked」两个判据都出现在它之前,顺序合理。语义补充:docs(pm-dispatch,os-dev): 串行接力一夜沉淀的六条缺口补进 SKILL —— 接力模式、锚点措辞、裁决传播扫描、停摆纠偏、飞行中重叠、预期红停放 (#5441) #5501 的恢复动作是SendMessage,需要一个还活着的对面;fire 结束后没有可唤醒的 subagent,停摆与「会话已销毁」在 GitHub 上是同一个读数,故补「验证管线可能超过一个 fire 的活,一开始就走mode:cloud」。auto-merge是否挂上、签名级预期红清单写在 PR body 里)。因此对长流程只加一条要求:接力/停放的每一项都要落成 GitHub 上可读的文本,⛔ 不许把「下一棒该干什么」留在会话记忆里(与「从 labels 重建状态」同一条纪律的两半)。层级上#### 座位 Routine 化与#### Dispatch backends同级并紧随其后,#### 串行接力在 step 7 之下,互不嵌套。PR 保持 draft;转 ready 由 PM 复核后执行,本会话不转、不挂 auto-merge、不合并任何东西。
验证
文档改动,跑与
.claude/**相关的门禁(全部在共享锁flock /tmp/os-heavy-verify.lock下串行,NODE_OPTIONS=--max-old-space-size=4096)。终轮(合并 + 语义补充之后)重跑的实际输出:node scripts/check-nul-bytes.mjs --self-test→✓ check-nul-bytes --self-test: 48 assertions over a temp git repo (real scan() path)node scripts/check-nul-bytes.mjs→check-nul-bytes: OK (scanned 5481 tracked text file(s); skipped 5 binary, 1 non-regular; no raw ASCII control bytes).(首轮 5468 → 终轮 5481,差值即合入的新文件)node scripts/check-doc-authoring.mjs --self-test→✓ check-doc-authoring self-test: scope wiring ... and the dead-root hard error ... all hold.node scripts/check-doc-authoring.mjs→✓ doc authoring guard: 362 files clean — no bare metadata literals.node scripts/docs-audit/check-audit-scope.mjs→✓ docs-accuracy-audit scope is in sync with content/docs/: 178 hand-written doc(s).加✓ release-owned pages are in scope and read-only: 9 page(s) ... review-onlygrep -naP扫 C0 控制字符集合(0x00 至 0x08、0x0b、0x0c、0x0e 至 0x1f)两文件 → exit 1(零命中);并用一个「确定存在的邻近词」做正向对照反查(grep -c座位 Routine 化 → 1),证伪「扫描器坏了 / 路径错了」未跑
pnpm test/pnpm typecheck:本 PR 的 diff 是纯 markdown 协议文本,零 TS/包边,两者对它没有覆盖面。留给复核的三处(如实声明,不是偷偷做的决定)
label:pm:epic索引」(索引查询是 O(epic 数)),并在残余风险段如实标注它仍是声明式、不是机械保证。这是删除旧机制的必要补位,不是新契约。domain:*座位」一句是座位表「每个 PM 恰好一个座位」的推论,不是新增规则。后续动作(不在本 PR,提示 PM)
domain:engine-core/domain:drivers两个标签需创建,存量domain:engineissue 需按落点改标并在清零后删除旧标签;#4604 的 engine 行需一分为二(冻结指令锚在 drivers 行)。两者都是运行态动作,不是代码。相关的词表对账已归挂 #5469(见其评论),建议等本 PR 落地后一次做完。未动(刻意)
.claude/agents/os-dev.md(#5501 已改过的领地,本 PR 一字未碰)、content/docs/releases/**、已发布目录skills/objectstack-pm-dispatch/(发布内容,另单 #5451)、#4604 正文本身(运行态登记由 PM 侧落地;本 PR 只让 SKILL 引用与其实态一致)。