Skip to content

Commit 03de83b

Browse files
docs(pm-dispatch): card-thread backend (mode:thread), coordinator scheduling and per-card dispatch effort (#25214)
<!-- claude-projects-attribution: {"github_login":"os-bill"} --> _Requested by **Bill** · [project thread](https://claude.ai/code/project/chan_016iMXWSZDzqWRWvWzdNo8wg?thread=cmsg_016iMXWSZDzqWRWvWzdNo8wg9z6YdKhg4XiDHyZQgU6TJV)_ Fixes #25185 Clause-②: no Metadata-protocol: none ## What changed Four `.claude/**` files, 29 insertions and 26 deletions by GitHub's count, no code. 1. **A third dispatch backend, `mode:thread`** — `SKILL.md` args table (`mode:` row and the `batch:` row, which now counts card threads), the claim template's `Container & model:` line, `os-dev.md`'s "GitHub is the report's source of truth under every mode" line, and a new section 〈卡线程(`mode:thread`)〉 in `references/dispatch-runbook.md` beside the `mode:cloud` section. The rules it carries, each from the maintainer's words quoted on the card: - A seat whose session is a project thread dispatches M and up, `priority:p1` and `security` cards as one thread per card; S-class mechanical cards stay an in-seat subagent (a thread re-clones and re-reads the skill first); a card under the disclosure ruling (record 5323310017) stays in-seat too; a card thread counts against `batch`. - The project's coordinator schedules card threads across every seat, p1 first, under a project-wide cap equal to the sum of the seats' `batch` terms; seats hand it candidates at any time with priority, order file and suggested effort, and tell it when a thread hands back or its PR merges. - The seat keeps the claim, the assignee, the order, the contract review, ACCEPT and landing; the thread implements, opens the draft PR and drives CI. The order lives in the project's shared folder (`/mnt/project-files/`, one `dispatch-N.md` per card under the seat's folder). Claim mechanics changed after the first contract review (record 6341183860): the thread's first act is to report its designated push branch to the seat and wait; the seat writes the assignee and `pm:dispatched`, then posts the Claim carrying that `Branch:`, in AGENTS.md's order; the thread starts only after that, posts no claim and never writes the assignee. `claude/issue-N-slug` remains the branch convention; a project-thread session can push only its own designated branch (measured: the session's harness names that branch and forbids any other), so the claim records that branch as the platform exception. The coordinator sets a thread's model and effort only on the maintainer's explicit word, so the seat attaches that message. - Environment notes, one line each: the worktree is still built (the main-checkout hooks block edits in the primary checkout); the repo's `.claude/agents` types did not load in a project thread (measured), so the thread reads `os-dev.md`; container restarts kill local background loops, so the seat waits on server-side signals. 2. **Dispatch effort by difficulty** — two lines in `references/execution-duties.md` 〈派发〉 and the `effort:` field in the claim template: effort is chosen per card beside the model tier, written into the claim and the order and passed explicitly, never left unset. Grading as the card proposed, unchanged by measurement: S mechanical `medium`; M `high` (the default); L/XL, `security`, p1, the contract review and four-axis analysis `xhigh`; `max` only when the maintainer names it. The card's `Container & model:` reader (`readContainerModelLine`) still reads the `model:` slot with the new field present; this PR's own claim (comment 6335635315) carries the new shape and passed `post-stamped`. The maintainer's words, verbatim and untranslated, as the card quotes them: 「你能识别到在项目的环境下工作吗?此时就每张卡开新线程。」 · 「立一张卡,修改 skills,包括派任务时要求根据任务的难度来选择 effort」 · 「还是需要你来总体调度,因为要优先派 p1」 · 「规则类的应该进仓库」 · on the S/M boundary 「同意」. The ruling-thread rule left this PR after the first contract review; it is card #25216. ## How the line ratchet was paid `check:pm-skill-ratchet` holds every file here at a shrink-only ceiling. The new text needed +17 lines in `dispatch-runbook.md` and +2 in `execution-duties.md`. The maintainer left the choice (「你自己决定 :抬上限 / 删旧内容 / 压缩」) and the spec seat preferred deletion, so **no ceiling moved**: both files land exactly at their ceilings (241 and 188) by deleting lines whose rule is already stated in another file of the same corpus. Reviewers, each deletion with the surviving home of its rule: `dispatch-runbook.md` (16 deleted, 2 merged into 1): - 「种子与消费者注记在 `ensure-pm-labels.sh`」 → SKILL.md 〈机械守卫索引〉 names that script as the authority. - 「机械年龄告警在半状态巡查脚本」 → SKILL.md 〈机械守卫索引〉 `check-half-states.mjs` row. - 「⛔ 不设第二个标签区分维护者裁与座位定级」 → `state-machine.md` (the hold-comment line). - 「每批约定:≤5 张同族卡、同上下文逐张读」 → SKILL.md 〈入口与角色〉 「批 = …≤5 张同族卡」. - 「在飞认领照认领协议由原认领者跟完」 → `seat-post-protocol.md` (subtree reclaim) and SKILL.md 状态模型 「在飞卡跟到 MERGED」. - 「第三读数(…)出自车道盘点」 → `seat-lifecycle.md` 读数三. - 「机械半边:旗标由半状态巡查 report-only 浮出…」 → the same file's 〈落卡与裁决记录细则〉 「机械两旗 report-only,归半状态巡查」 line, kept. - 「终报以 issue 评论交付,带 `os-dev-report` 标记」 → `os-dev.md` lines 17–18. - 「生产侧条款在 os-dev 定义」 → a pointer with no rule of its own. - 「重放形态可以完全正常…monitor 按自己的 deadline 触发」 → `os-dev.md` 〈干净收尾〉 item 1; the identity triple that follows it is kept. - 「抢先翻 ready 会撞上 agent 的收尾推送,故先探活后翻」 → `execution-duties.md` 〈收集〉 「先探活后翻 ready」. - 「推分支 → 开 draft PR → 立即交报告的契约住 os-dev 定义」 → `os-dev.md` Definition of done; 「派发令只带增量」 → `execution-duties.md` 〈派发〉. - 「三分区各自的 dev 义务单源见 SKILL.md 与 os-dev 定义,派发词 ⛔ 不复述」 → `execution-duties.md` 「标准非协商条款 ⛔ 不抄进派发词」. - 「模型标识只禁内容工件…」 and 「豁免:`.claude/agents/*` frontmatter 的 `model:`」 → AGENTS.md (commit-message paragraph of Multi-agent discipline), `os-dev.md` 285–286 and its frontmatter comment, `execution-duties.md` 「解析顺序…以 os-dev 定义 frontmatter 注释为权威」. - 「⛔ 仓内任何文件不得另立第三份,`check:skill-frame-sync` 全树扫;os-dev 定义没带就停下索取」 → `os-dev.md` 356–357 and SKILL.md 〈机械守卫索引〉 `check:skill-frame-sync` row. - Merged: 「四轴框架块…整段现取现粘」 + 「该块自黑体句起、至推荐约束句止,整段逐字粘贴」 → one line carrying both bounds and the verbatim rule. `execution-duties.md` (2 deleted): - 「每条工作项写进派发令时都是 dev 首先证伪的前提」 → `os-dev.md` rule 6 (the dev verifies every premise regardless), and the same section's 「标准非协商条款 ⛔ 不抄进派发词」 says not to restate it in the order. - 「云会话 `SendMessage` not-reachable 是设计非故障,⛔ 不复测」 → `dispatch-runbook.md` 〈云卡四课〉 「roster 不可达与 `SendMessage` 同裁,`ListAgents` 同列不到,⛔ 不复测」, kept. Every line added or edited is at most 120 bytes (the ratchet's max-line rule); the four-axis frame was not touched (`check:skill-frame-sync` and `check:skill-frame-freshness` green). ## Landing and the claim's model line - `.claude/**` is **Tier S** under AGENTS.md Prime Directive 14, not a human merge as the card's first sentence says: the owning seat lands this PR after a `## Contract review` record for its head with `Served-tier: CONTRACT_REVIEW_TIER` and a PASS verdict, plus all-green checks. The PR stays a draft until then. - The claim's `Container & model:` line says `model: default`; `dispatch-gates --tier` prints MANDATORY `CONTRACT_REVIEW_TIER` for `SKILL.md` and `os-dev.md`. The seat corrected this mid-card: the maintainer switched this thread to that tier (「切换到 fable」, 08:08Z) and the whole diff was re-read at it before this PR opened; that re-read found and fixed one contradiction in the `mode:` row (S+M ⇒ subagent against M+ ⇒ thread; now 「席位是项目线程时 M 及以上、p1、`security` 一律 `thread`」). ## Open questions for the contract review (settled in round 2) 1. AGENTS.md's 「the dispatch posts the `Claim:`」: settled. The seat posts the claim and writes the assignee; the thread posts neither. This card's own round-1 claim and assignee were written by the thread under the round-1 order, before this rule existed; they stand as the record. 2. SKILL.md 红线 「⛔ GitHub 之外永不维护任何跟踪状态」: a card that waits for a coordinator slot is not yet claimed (the claim needs the thread's branch), so its only GitHub trace is its `pm:queue` label and priority. The coordinator's queue is a view derived from those labels and rebuildable from GitHub at any time; the order files are inputs, not state. Once a thread opens, the card carries assignee, `pm:dispatched` and the Claim like any other dispatch. 3. The ruling-thread line: dropped from this PR; card #25216 carries the maintainer's word and has to be reconciled with 「总监席是唯一裁决者」 there. 4. The branch name: `claude/issue-N-slug` stays the convention; the designated thread branch is recorded as the measured platform exception. The Duplicate Fix Guard is advisory. Whether AGENTS.md §2 itself should name the exception is a Tier H question the seat has taken to the maintainer; this PR touches no Tier H file. ## Gates Round 2, head e704856: `dispatch-gates --commands --repo objectstack-ai/objectstack` derived the same 22 families, each run with its exit code captured before any pipe, all 22 exit 0; `--ran` 22/22, 0 NOT-MEASURED. `check:skill-frame-freshness` and `check:pm-skill-ratchet` exit 0 (`dispatch-runbook.md` 240/241, `execution-duties.md` 188/188, `SKILL.md` 319/319, `os-dev.md` 404/404). Round 1 at b301b37: the same 22, all 0; `check:doc-formula-expressions` first exited 3 (unbuilt `@objectstack/lint`), rebuilt under the verify lock and re-run to 0. CI's remaining families are the PR's check-runs. No published package moved (`.claude/**` is a fast-track non-published path), so `skip-changeset` rides this PR's create. ## 维护者速读(草稿) **改了什么:** pm-dispatch 技能加了第三种派发后端 `mode:thread`:席位在项目线程里跑时,M 及以上、p1、security 的卡每张开一个线程,由 coordinator 跨席位按 p1 优先统一调度,总并发 = 各席 batch 之和;S 级机械小改仍用席内子 agent。派单按难度选 effort(S medium、M high、L/XL/p1/security/契约复核/四轴 xhigh、max 只凭你点名)。认领与 assignee 仍由席位写,线程先报分支再开工。行数上限没动,用删掉 18 条已在别处写明的旧规则抵账。 **为什么改:** 你 10-22 在项目里定的这几条规则(「规则类的应该进仓库」)。 **风险与代价(含回滚):** 纯规则文本,不碰代码与门禁;回滚即 revert 本 PR。AGENTS.md §2 的分支约定是否要写明项目线程的例外,属 H 档,席位已另报给你。 **席位意见:** **你要做的:** 无;`.claude/**` 是 Tier S,席位做完契约复核后自行落地。 ## Acceptance notes - The dispatch order's claim template carried `Thread-read: none (no comments yet)`; `post-stamped` refuses that spelling (H50 compares it for equality against one id or `none`). The seat has already corrected its template; noted here, not filed. - The dispatch order said the PR body starts with the attribution block linking the seat thread; the session's own attribution requirement names this card thread. This body follows the session's requirement; the deviation from the order is reported in the `os-dev-report`. - The attribution block's first line is an HTML comment the session requires as the body's first line; `os-dev.md` 〈干净收尾〉 forbids HTML comments in GitHub text. Measured on an earlier card thread's PR, the relay read-back keeps it byte for byte. Reported as a deviation, not hidden. --- _Generated by [Claude Code](https://claude.ai/code/session_01NVBPkGXNnJayvXnCjcXpFb)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 3a440b0 commit 03de83b

4 files changed

Lines changed: 28 additions & 26 deletions

File tree

‎.claude/agents/os-dev.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ model: opus
322322
- 全文 ⛔ 不出现 HTML 注释:sanitizer 落库后吃短尖括号片段,连反引号里的也吃。
323323
- 被吃掉标记的评论对 PM 扫描不可见;HTML 注释形不是等价写法,是坏写法。
324324
- 凡要上 GitHub 的文本,尖括号形状片段一律改占位词拼写(`FIELD`、`IDENT.MEMBER` 一类)。
325-
- 两种派发模式(`mode:subagent` 与 `mode:cloud`)下 GitHub 都是报告的权威源。
325+
- 各派发模式(`mode:subagent`、`mode:cloud`、`mode:thread`)下 GitHub 都是报告的权威源。
326326
- 写完读回那条评论到尾部:只认首行标记保不住正文,sanitizer 可从首个 tag 形片段吃到尾。
327327
- PR 正文同欠一次全文回读,评审读的正是它。
328328

‎.claude/skills/pm-dispatch/SKILL.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
5656
| `director` | 以项目总监席身份运行(人工召唤;三职与章程见 `references/lanes/director.md`) | — |
5757
| `label:<name>` | backlog 过滤标签;`label:all` = 全部 open 未认领 | `pm:queue` |
5858
| `repo:<owner/name>` | 扫哪个仓的 backlog(单 issue 的落地仓看它自己的 `repo:*` 标签) | `objectstack-ai/objectstack` |
59-
| `batch:<n>` | 席位同时在飞的子代理总上限,按 `Agent` 调用与 `create_session` 计:dev、复核、普查皆计,⛔ 只读不豁免 | 默认 `3`;`n` 的维护者天花板 `5` |
59+
| `batch:<n>` | 席位同时在飞的子代理总上限,按 `Agent` 调用、`create_session` 与卡线程计:dev、复核、普查皆计,⛔ 只读不豁免 | 默认 `3`;`n` 的维护者天花板 `5` |
6060
| `rounds:<n>` | 跑 N 轮后停 | 队列清空为止 |
61-
| `mode:subagent` \| `mode:cloud` | 派发后端 | 按卡分流:S+M ⇒ `subagent`,`cloud` 只留 L/XL 等保留面 |
61+
| `mode:subagent` \| `mode:cloud` \| `mode:thread` | 派发后端 | 按卡分流:S+M ⇒ `subagent`,`cloud` 只留 L/XL 等保留面;席位是项目线程时 M 及以上、p1、`security` 一律 `thread` |
6262
| `#12 #34 …` | 显式 issue 清单,整体覆盖标签查询 | — |
6363

6464
- 无角色参数按执行姿态运行,车道由座位贴认定;角色参数令召唤词收敛为一行调用。
@@ -310,7 +310,7 @@ Worktree: `<repo>-issue-<n>`
310310
Domain: `domain:<x>`
311311
Seat: `domain:<x>#<n>` (the seat number this PM sits on; absent = seat 1)
312312
File surface: `<预期触碰的目录>` (stop on breach; explain in the report)
313-
Container & model: `<S 级机械卡 / M / L>`, `mode:subagent | mode:cloud`, `model: <档位词,引当次 --tier 输出;天花板拼 CONTRACT_REVIEW_TIER,同行引其 MANDATORY 路径行或 reason:;⛔ 不抄模型 id>`
313+
Container & model: `<S 级机械卡 / M / L>`, `mode:subagent | mode:cloud | mode:thread`, `model: <档位词,引当次 --tier 输出;天花板拼 CONTRACT_REVIEW_TIER,同行引其 MANDATORY 路径行或 reason:;⛔ 不抄模型 id>`, `effort: <medium | high | xhigh | max,按卡难度定>`
314314
Clause-②: yes | no
315315
Responsibility: `<whose code produces the risk | the platform path that already covers it, or none | who reaches it, and whether anyone uses it today>` (defect cards only, else `n/a — not a defect card`; the dispatch prompt's ruling section repeats the three answers)
316316
Thread-read: <id of the newest comment on the card at the moment this claim is written, or none>

‎.claude/skills/pm-dispatch/references/dispatch-runbook.md‎

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,19 @@
77
- 级别半边:p1–p3 是分诊已裁的显式排序;无级末位是分诊缺口,不是一个已裁的低优先级。
88
- `pm:blocking` 的写入与摘除都在分诊轮 sweep,依赖者全关即摘。
99
- 手工挂上的按误标处理,sweep 对着索引校正。
10-
- 种子与消费者注记在 `scripts/pm/ensure-pm-labels.sh`。
1110

1211
## 紧急卡直接分诊
1312

1413
- 授权面不含派发:⛔ 不写码、不认领、不派发。
1514
- 单一生产者纪律照旧:分诊座位在班且已在处理同卡即让行。
1615
- 正文自报 P0 或 data-integrity 的命中即走本节紧急通道。
17-
- 机械年龄告警在半状态巡查脚本,细节以脚本头为权威。
1816

1917
## 发现分诊轮细则
2018

2119
- 状态转换机制:定级出 hold ⇒ 同笔 `finding` → `pm:on-hold`,域标签保留。
2220
- hold 评论照既有纪律带日期、理由与具名重启条件,出处写进评论。
23-
- ⛔ 不设第二个标签区分维护者裁与座位定级。
2421
- 首触定级补遗:零定级评论的卡优先;关闭 not planned 附理由并列入轮次报告。
2522
- 立单 dev 只有局部视野,照实立单不压级。
26-
- 每批约定:≤5 张同族卡、同上下文逐张读;常设授权,⛔ 不逐次请示。
2723
- sweep 打包晋级五条:同类才打包(全部命中同一判据)。
2824
- 逐项清单(落点、before、after)是 PR 正文必备件。
2925
- N 项之外零改动且 PR 自证;范围外按立卡三类门槛分流,三类外进 Acceptance notes、不单开。
@@ -48,7 +44,6 @@
4844
- 判据只认在任者自己的产出:自有评论、认领、正文编辑;作者与时间戳是硬读数。
4945
- ⛔ 不算发给它的跨座位通知:收到消息不是活着的证据。
5046
- >24h 无自有产出 ⇒ 当场降级:改 `⏳ vacant` + 摘 assignee 同笔 + 证据评论(时间戳与链接)。
51-
- 在飞认领照认领协议由原认领者跟完。
5247
5348
## 分诊席读数成本三则
5449

@@ -58,7 +53,6 @@
5853
- 细节禁止复述:逐卡理由已作审计评论落卡,简报只指不拷。
5954
- 硬预算正文 ≤3000 字符,收班自报字符数;连续两轮超限即漂移。
6055
- 互斥最小尾页读法:尾页配方只覆盖座位贴的两个读数,判空缺另对正文与标题。
61-
- 第三读数(本车道 `pm:dispatched` ∪ `pm:queue` 卡最新非本 session 同席号 `Claim:`)出自车道盘点。
6256
- 配方:`issue_read get` 拿评论总数,按小 `perPage`(~15)算末页页码只读尾页。
6357
- 尾页缺读数再回翻一页,⛔ 不读整线程;返回数少于总数 ⇒ 记录可能已消失,报缺口。
6458
- 长线程状态读外包:>~15 条的线程派下限档只读子代理返回结构化摘录,尾部优先。
@@ -110,7 +104,6 @@
110104
- ⛔ 禁止记录后离场;结论表同规,表不是交付物,落账才是。
111105
- 无权执行 ⇒ 点名有权者,并当轮换标把状态搬进对方的收件箱视图或决策箱。
112106
- ⛔ 不许只留一条评论等人路过:评论不是任何人的收件箱,标签才是。
113-
- 机械半边:旗标由半状态巡查 report-only 浮出,判据以脚本头为权威;当轮执行才是修法。
114107

115108
## 云卡(`mode:cloud`)四课
116109

@@ -122,7 +115,6 @@
122115
- ⛔ 不为提问或中期汇报结束回合;开放选择按裁决与评估轴自裁,记入终报 `open_questions`。
123116
- 合法回合终点只有两个:推送完成加终报,或硬阻塞详报。
124117
- 三、交付通道:dev 自开 draft PR(`Fixes #<n>` 只写正文,`partof-closing-keyword` RULE 2,含验证记录)。
125-
- 终报以 issue 评论交付,带 `os-dev-report` 标记。
126118
- 未 attach 的姊妹仓够不着,跨仓跟进卡由 PM 代立。
127119
- trigger 定时会话维持降级通道:推送 outcome branch,终报走最后一条会话消息,PM 代开 draft PR。
128120
- 四、云卡 draft PR 一存在立即 `subscribe_pr_activity`,这是硬步骤。
@@ -134,6 +126,25 @@
134126
- 该答案与从不存在不可区分,⛔ 永不读作死亡信号。
135127
- 跨账号接班活性只认 GitHub 产出读数,draft-PR 时点交报正为此存在。
136128

129+
## 卡线程(`mode:thread`)
130+
131+
- 席位会话是项目线程(载 coordinator 通道工具)⇒ M 及以上、p1、`security` 卡一卡一线程。
132+
- S 级机械卡留席内 `mode:subagent`:开线程要重新克隆、重读技能与 `os-dev.md`,起步成本不值。
133+
- 披露纪律卡(私密细节不得离开席位会话)也留席内,认领写明;卡线程照计 `batch`。
134+
- 项目的 coordinator 跨席位统一调度卡线程;每席一个线程跑 PM 循环,卡线程即 dev。
135+
- 席位随时把候选卡交 coordinator,附优先级、派发令文件与建议 effort,⛔ 不等自己的槽位。
136+
- coordinator 按优先级开线程,p1 先;全项目上限 = 各席 `batch` 之和,满即排队。
137+
- 卡线程交回或其 PR 合入,席位当即告知 coordinator 释放槽位。
138+
- 请 coordinator 开线程附维护者原话消息:它只凭维护者明言设线程的 model 与 effort。
139+
- 席位留认领文本、派发令、契约复核、ACCEPT 与落地;线程实施、开 draft PR、驱动 CI。
140+
- 派发令落项目共享目录 `/mnt/project-files/<席位>/dispatch-<N>.md`:线程读不到席位 scratchpad。
141+
- 线程开起后第一动作:向席位报告指定推送分支并等待;⛔ 线程不贴认领、不写 assignee。
142+
- 席位按 AGENTS.md 的顺序写 assignee+`pm:dispatched`,再贴带该 `Branch:` 的认领;之后线程才开工。
143+
- 分支约定仍是 `claude/issue-<n>-<slug>`;线程只能推指定分支是实测平台例外,认领如实写。
144+
- worktree 照建;仓 `.claude/agents` 类型未加载(实测),线程照读 `os-dev.md`。
145+
- 交回:PR 与报告落地后给席位线程发一条消息(PR、head、报告要点);审核期线程不关,接 FAIL。
146+
- 容器重启杀本地后台循环:席位等服务端信号(PR 订阅事件、座位 Routine),本地 watcher 可选。
147+
137148
## subagent 批派发前置:先把本地检出钉到 main
138149

139150
- subagent 读 PM 容器本地检出的 agent 定义与技能文本,不读 `origin/main`:过期则整批过期。
@@ -168,24 +179,19 @@
168179
- ① 复述执行姿态;② 点名下一个工具调用加明令禁止后台等待。
169180
- ③ 第三次停摆判 unreliable,按接手协议重派到该分支。
170181
- 自己挂的定时器不会唤醒自己;长验证管线的派发或接力词写明前台姿态。
171-
- 生产侧条款在 os-dev 定义。
172182

173183
## 通知重放去重
174184

175-
- 重放形态可以完全正常、报告完整正确:monitor 按自己的 deadline 触发。
176185
- 身份 = 三元组(issue、分支、PR head sha)加通知自报的守护对象。
177186
- 自报缺席就用三元组自己算;判定重放 ⇒ 台账记重放与首达时间即结束。
178187

179188
## 直接验收兜底
180189

181190
- 验收动作:逐文件核对 diff 与认领申报的文件面。
182191
- 对照 `origin/main` 复核 PR 正文的前提声明与验证叙述,复核清单其余判据不减。
183-
- 抢先翻 ready 会撞上 agent 的收尾推送,故先探活后翻。
184-
- 推分支 → 开 draft PR → 立即交报告的契约住 os-dev 定义,派发令只带增量。
185192

186193
## 派发词构造细则
187194

188-
- 三分区各自的 dev 义务单源见 SKILL.md 与 os-dev 定义,派发词 ⛔ 不复述。
189195
- 兄弟 dev 报告里的成本或形状估计一律落机制假设区并注明须复测。
190196
- ⛔ 不得穿裁决的衣服转述:被当事实搬运的估计会把错误方向写死,而天真测试照绿。
191197
- 前提含 spec 有这个槽位 ⇒ 派发前先读安装包内的活性账本对应行。
@@ -201,15 +207,11 @@
201207
- ① 门禁清单单班之内即过期;全 farm 归 CI 跑一次,⛔ 不让 dev 枚举全 farm。
202208
- ② 去重或看板读数取一次(查询式加时间戳)整批共用。
203209
- 派发令写:当既有事实用,只复核其后的增量,⛔ 不重跑;dev 侧对价住 os-dev 定义。
204-
- 四轴框架块(SKILL.md 升级与决策 节)整段现取现粘、逐单随派发词下发。
205-
- 该块自黑体句起、至推荐约束句止,整段逐字粘贴,⛔ 不重打、⛔ 不摘句。
210+
- 四轴框架块(SKILL.md 升级与决策)黑体句起至推荐约束句止,逐字现取现粘,⛔ 不摘句。
206211
- 派发那刻现取,把该副本的 commit 与 md5 记进派发词。
207-
- ⛔ 仓内任何文件不得另立第三份,`check:skill-frame-sync` 全树扫;os-dev 定义没带就停下索取。
208212
- 文件面两句原文照抄:预期落点是 X。
209213
- 若实测表明真正的生产者在别包,直接按生产者侧修,落点与理由写进报告和 PR 正文。
210214
- 跨包常等于跨车道,PM 事后补跨座位声明。
211-
- 模型标识只禁内容工件:PR 标题与正文、代码注释、文档、changeset、评论。
212-
- 豁免:`.claude/agents/*` frontmatter 的 `model:`,`check:agent-model-declared` 要求。
213215
- 新 changeset 文件名用 `<issue>-<slug>.md`,⛔ 不用随机词对名。
214216
- same-day churn 行:派发时 `git log origin/main --oneline -20 -- <paths>` 见当天合并即加一行。
215217
- 该行原文:基于合并后的代码工作,issue 引用的片段可能已变,先核对当前 main。

‎.claude/skills/pm-dispatch/references/execution-duties.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
- 卡引用面:裁决/卡片点名的每张 issue 逐个读当前 open/closed/assignee。
1919
- 引用读到的现状,⛔ 不引用裁决写作时的描述。
2020
- 工作项面:卡片与分诊评论列的每条工作项逐条对树核验是否仍未完成,⛔ 不对卡核验。
21-
- 每条工作项写进派发令时都是 dev 首先证伪的前提。
2221
- `batch` 封顶全部子代理,等待不填槽;同批独立按文件面不相交判,⛔ 不按包、不按 check 名。
2322
- single-writer 路径 = `SINGLE_CLAIM_PATHS` 所枚举;共享其它路径是普通并发,后落地方解冲突。
2423
- 第 N 单派发前读 `scripts/pm/os-verify-lock.sh --status`:到达深度 ≥ `LOCK_DEPTH_HOLD`(= 2)即等。
@@ -90,7 +89,7 @@
9089

9190
## 派发
9291

93-
- 一单一次 `Agent` 调用,`subagent_type` 为 `os-dev`,后台并行。
92+
- 一单一次 `Agent` 调用,`subagent_type` 为 `os-dev`,后台并行;`mode:thread` 一卡一线程见 runbook。
9493
- 模型分档是 PM 的逐卡显式决定;档位值单源在 dispatch-gates 常量,⛔ 本文不写模型名。
9594
- 下限档给机械卡(正确性由门禁农场机械判定)。
9695
- 默认判断档给 M/L、裁决实施与任何带设计判断的卡;拿不准就升一档。
@@ -116,6 +115,8 @@
116115
- 降档出口两条:额度耗尽豁免(达档实测不可用才落默认判断档,⛔ 不再往下)与主动预降。
117116
- 额度墙只向下(降档或降并发)⛔ 永不向上;临时偏离记座位贴带结束条件,逐次巡检重读。
118117
- 降档的档位与理由记入认领评论 Container & model 行;档位逐次派发显式传参,永不省略。
118+
- effort 按卡难度定、与档位并列,写进 Container & model 行与派发令,派发显式传参,⛔ 不留空。
119+
- S 机械 `medium`;M `high`(默认);L/XL/`security`/p1/契约复核/四轴分析 `xhigh`;`max` 凭维护者点名。
119120
- 解析顺序、pin 语义与允许名单回退陷阱以 os-dev 定义 frontmatter 注释为权威。
120121
- 分诊 suggestion 行是输入不是决定,不采纳给理由。
121122
- 派发词 ⛔ 默认不整段粘贴 issue 正文:让 dev 自己读全文与全部评论并自查正文完整性。
@@ -147,12 +148,11 @@
147148
- 首张这类派发实测固定开销(安装 + 拉缓存)并记在其卡上。
148149
- 归档义务只落在云卡;OOM 死的单独重派;判定连同档位写进认领评论。
149150
- 一次性云卡用 `create_session`,⛔ 不用 create_trigger+fire;trigger 流只留给定时/重复型。
150-
- 云会话 `SendMessage` not-reachable 是设计非故障,⛔ 不复测。
151151
- 接手中断的 dev:先试 SendMessage 复活,不可用才走接手协议,⛔ 不重跑原派发词。
152152

153153
## 收集
154154

155-
- 收集先扫 GitHub(两种模式),标记评论在 = 报告完整;评论与返回消息皆无才进探活/判死。
155+
- 收集先扫 GitHub(各模式),标记评论在 = 报告完整;评论与返回消息皆无才进探活/判死。
156156
- 标记两种拼写等效(HTML 注释形、首行 `os-dev-report`);⛔ 永不把没收到失败通知读作还在跑。
157157
- 报告点名 PR ⇒ 会话席当即 `subscribe_pr_activity` 并记座位贴;中继开的 PR 永不自动挂会话。
158158
- ① 巡检首动作 `list_triggers` 确认 Routine 启用,在飞重挂加速器;唤醒归 Routine,漏挂不断链。

0 commit comments

Comments
 (0)