Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

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

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

- 无角色参数按执行姿态运行,车道由座位贴认定;角色参数令召唤词收敛为一行调用。
Expand Down Expand Up @@ -310,7 +310,7 @@ Worktree: `<repo>-issue-<n>`
Domain: `domain:<x>`
Seat: `domain:<x>#<n>` (the seat number this PM sits on; absent = seat 1)
File surface: `<预期触碰的目录>` (stop on breach; explain in the report)
Container & model: `<S 级机械卡 / M / L>`, `mode:subagent | mode:cloud`, `model: <档位词,引当次 --tier 输出;天花板拼 CONTRACT_REVIEW_TIER,同行引其 MANDATORY 路径行或 reason:;⛔ 不抄模型 id>`
Container & model: `<S 级机械卡 / M / L>`, `mode:subagent | mode:cloud | mode:thread`, `model: <档位词,引当次 --tier 输出;天花板拼 CONTRACT_REVIEW_TIER,同行引其 MANDATORY 路径行或 reason:;⛔ 不抄模型 id>`, `effort: <medium | high | xhigh | max,按卡难度定>`
Clause-②: yes | no
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)
Thread-read: <id of the newest comment on the card at the moment this claim is written, or none>
Expand Down
38 changes: 20 additions & 18 deletions .claude/skills/pm-dispatch/references/dispatch-runbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,19 @@
- 级别半边:p1–p3 是分诊已裁的显式排序;无级末位是分诊缺口,不是一个已裁的低优先级。
- `pm:blocking` 的写入与摘除都在分诊轮 sweep,依赖者全关即摘。
- 手工挂上的按误标处理,sweep 对着索引校正。
- 种子与消费者注记在 `scripts/pm/ensure-pm-labels.sh`。

## 紧急卡直接分诊

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

## 发现分诊轮细则

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

## 分诊席读数成本三则

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

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

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

## 卡线程(`mode:thread`)

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

## subagent 批派发前置:先把本地检出钉到 main

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

## 通知重放去重

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

## 直接验收兜底

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

## 派发词构造细则

- 三分区各自的 dev 义务单源见 SKILL.md 与 os-dev 定义,派发词 ⛔ 不复述。
- 兄弟 dev 报告里的成本或形状估计一律落机制假设区并注明须复测。
- ⛔ 不得穿裁决的衣服转述:被当事实搬运的估计会把错误方向写死,而天真测试照绿。
- 前提含 spec 有这个槽位 ⇒ 派发前先读安装包内的活性账本对应行。
Expand All @@ -201,15 +207,11 @@
- ① 门禁清单单班之内即过期;全 farm 归 CI 跑一次,⛔ 不让 dev 枚举全 farm。
- ② 去重或看板读数取一次(查询式加时间戳)整批共用。
- 派发令写:当既有事实用,只复核其后的增量,⛔ 不重跑;dev 侧对价住 os-dev 定义。
- 四轴框架块(SKILL.md 升级与决策 节)整段现取现粘、逐单随派发词下发。
- 该块自黑体句起、至推荐约束句止,整段逐字粘贴,⛔ 不重打、⛔ 不摘句。
- 四轴框架块(SKILL.md 升级与决策)黑体句起至推荐约束句止,逐字现取现粘,⛔ 不摘句。
- 派发那刻现取,把该副本的 commit 与 md5 记进派发词。
- ⛔ 仓内任何文件不得另立第三份,`check:skill-frame-sync` 全树扫;os-dev 定义没带就停下索取。
- 文件面两句原文照抄:预期落点是 X。
- 若实测表明真正的生产者在别包,直接按生产者侧修,落点与理由写进报告和 PR 正文。
- 跨包常等于跨车道,PM 事后补跨座位声明。
- 模型标识只禁内容工件:PR 标题与正文、代码注释、文档、changeset、评论。
- 豁免:`.claude/agents/*` frontmatter 的 `model:`,`check:agent-model-declared` 要求。
- 新 changeset 文件名用 `<issue>-<slug>.md`,⛔ 不用随机词对名。
- same-day churn 行:派发时 `git log origin/main --oneline -20 -- <paths>` 见当天合并即加一行。
- 该行原文:基于合并后的代码工作,issue 引用的片段可能已变,先核对当前 main。
Expand Down
8 changes: 4 additions & 4 deletions .claude/skills/pm-dispatch/references/execution-duties.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
- 卡引用面:裁决/卡片点名的每张 issue 逐个读当前 open/closed/assignee。
- 引用读到的现状,⛔ 不引用裁决写作时的描述。
- 工作项面:卡片与分诊评论列的每条工作项逐条对树核验是否仍未完成,⛔ 不对卡核验。
- 每条工作项写进派发令时都是 dev 首先证伪的前提。
- `batch` 封顶全部子代理,等待不填槽;同批独立按文件面不相交判,⛔ 不按包、不按 check 名。
- single-writer 路径 = `SINGLE_CLAIM_PATHS` 所枚举;共享其它路径是普通并发,后落地方解冲突。
- 第 N 单派发前读 `scripts/pm/os-verify-lock.sh --status`:到达深度 ≥ `LOCK_DEPTH_HOLD`(= 2)即等。
Expand Down Expand Up @@ -90,7 +89,7 @@

## 派发

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

## 收集

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