diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index 4997e0b094f..1486d582486 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -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 正文同欠一次全文回读,评审读的正是它。 diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 3e1597d0b30..1220ec23a46 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -56,9 +56,9 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 | `director` | 以项目总监席身份运行(人工召唤;三职与章程见 `references/lanes/director.md`) | — | | `label:` | backlog 过滤标签;`label:all` = 全部 open 未认领 | `pm:queue` | | `repo:` | 扫哪个仓的 backlog(单 issue 的落地仓看它自己的 `repo:*` 标签) | `objectstack-ai/objectstack` | -| `batch:` | 席位同时在飞的子代理总上限,按 `Agent` 调用与 `create_session` 计:dev、复核、普查皆计,⛔ 只读不豁免 | 默认 `3`;`n` 的维护者天花板 `5` | +| `batch:` | 席位同时在飞的子代理总上限,按 `Agent` 调用、`create_session` 与卡线程计:dev、复核、普查皆计,⛔ 只读不豁免 | 默认 `3`;`n` 的维护者天花板 `5` | | `rounds:` | 跑 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 清单,整体覆盖标签查询 | — | - 无角色参数按执行姿态运行,车道由座位贴认定;角色参数令召唤词收敛为一行调用。 @@ -310,7 +310,7 @@ Worktree: `-issue-` Domain: `domain:` Seat: `domain:#` (the seat number this PM sits on; absent = seat 1) File surface: `<预期触碰的目录>` (stop on breach; explain in the report) -Container & model: ``, `mode:subagent | mode:cloud`, `model: <档位词,引当次 --tier 输出;天花板拼 CONTRACT_REVIEW_TIER,同行引其 MANDATORY 路径行或 reason:;⛔ 不抄模型 id>` +Container & model: ``, `mode:subagent | mode:cloud | mode:thread`, `model: <档位词,引当次 --tier 输出;天花板拼 CONTRACT_REVIEW_TIER,同行引其 MANDATORY 路径行或 reason:;⛔ 不抄模型 id>`, `effort: ` Clause-②: yes | no Responsibility: `` (defect cards only, else `n/a — not a defect card`; the dispatch prompt's ruling section repeats the three answers) Thread-read: diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index 1c2d188705b..56e4cf6220d 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -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、不单开。 @@ -48,7 +44,6 @@ - 判据只认在任者自己的产出:自有评论、认领、正文编辑;作者与时间戳是硬读数。 - ⛔ 不算发给它的跨座位通知:收到消息不是活着的证据。 - >24h 无自有产出 ⇒ 当场降级:改 `⏳ vacant` + 摘 assignee 同笔 + 证据评论(时间戳与链接)。 -- 在飞认领照认领协议由原认领者跟完。 ## 分诊席读数成本三则 @@ -58,7 +53,6 @@ - 细节禁止复述:逐卡理由已作审计评论落卡,简报只指不拷。 - 硬预算正文 ≤3000 字符,收班自报字符数;连续两轮超限即漂移。 - 互斥最小尾页读法:尾页配方只覆盖座位贴的两个读数,判空缺另对正文与标题。 -- 第三读数(本车道 `pm:dispatched` ∪ `pm:queue` 卡最新非本 session 同席号 `Claim:`)出自车道盘点。 - 配方:`issue_read get` 拿评论总数,按小 `perPage`(~15)算末页页码只读尾页。 - 尾页缺读数再回翻一页,⛔ 不读整线程;返回数少于总数 ⇒ 记录可能已消失,报缺口。 - 长线程状态读外包:>~15 条的线程派下限档只读子代理返回结构化摘录,尾部优先。 @@ -110,7 +104,6 @@ - ⛔ 禁止记录后离场;结论表同规,表不是交付物,落账才是。 - 无权执行 ⇒ 点名有权者,并当轮换标把状态搬进对方的收件箱视图或决策箱。 - ⛔ 不许只留一条评论等人路过:评论不是任何人的收件箱,标签才是。 -- 机械半边:旗标由半状态巡查 report-only 浮出,判据以脚本头为权威;当轮执行才是修法。 ## 云卡(`mode:cloud`)四课 @@ -122,7 +115,6 @@ - ⛔ 不为提问或中期汇报结束回合;开放选择按裁决与评估轴自裁,记入终报 `open_questions`。 - 合法回合终点只有两个:推送完成加终报,或硬阻塞详报。 - 三、交付通道:dev 自开 draft PR(`Fixes #` 只写正文,`partof-closing-keyword` RULE 2,含验证记录)。 -- 终报以 issue 评论交付,带 `os-dev-report` 标记。 - 未 attach 的姊妹仓够不着,跨仓跟进卡由 PM 代立。 - trigger 定时会话维持降级通道:推送 outcome branch,终报走最后一条会话消息,PM 代开 draft PR。 - 四、云卡 draft PR 一存在立即 `subscribe_pr_activity`,这是硬步骤。 @@ -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-.md`:线程读不到席位 scratchpad。 +- 线程开起后第一动作:向席位报告指定推送分支并等待;⛔ 线程不贴认领、不写 assignee。 +- 席位按 AGENTS.md 的顺序写 assignee+`pm:dispatched`,再贴带该 `Branch:` 的认领;之后线程才开工。 +- 分支约定仍是 `claude/issue--`;线程只能推指定分支是实测平台例外,认领如实写。 +- worktree 照建;仓 `.claude/agents` 类型未加载(实测),线程照读 `os-dev.md`。 +- 交回:PR 与报告落地后给席位线程发一条消息(PR、head、报告要点);审核期线程不关,接 FAIL。 +- 容器重启杀本地后台循环:席位等服务端信号(PR 订阅事件、座位 Routine),本地 watcher 可选。 + ## subagent 批派发前置:先把本地检出钉到 main - subagent 读 PM 容器本地检出的 agent 定义与技能文本,不读 `origin/main`:过期则整批过期。 @@ -168,11 +179,9 @@ - ① 复述执行姿态;② 点名下一个工具调用加明令禁止后台等待。 - ③ 第三次停摆判 unreliable,按接手协议重派到该分支。 - 自己挂的定时器不会唤醒自己;长验证管线的派发或接力词写明前台姿态。 -- 生产侧条款在 os-dev 定义。 ## 通知重放去重 -- 重放形态可以完全正常、报告完整正确:monitor 按自己的 deadline 触发。 - 身份 = 三元组(issue、分支、PR head sha)加通知自报的守护对象。 - 自报缺席就用三元组自己算;判定重放 ⇒ 台账记重放与首达时间即结束。 @@ -180,12 +189,9 @@ - 验收动作:逐文件核对 diff 与认领申报的文件面。 - 对照 `origin/main` 复核 PR 正文的前提声明与验证叙述,复核清单其余判据不减。 -- 抢先翻 ready 会撞上 agent 的收尾推送,故先探活后翻。 -- 推分支 → 开 draft PR → 立即交报告的契约住 os-dev 定义,派发令只带增量。 ## 派发词构造细则 -- 三分区各自的 dev 义务单源见 SKILL.md 与 os-dev 定义,派发词 ⛔ 不复述。 - 兄弟 dev 报告里的成本或形状估计一律落机制假设区并注明须复测。 - ⛔ 不得穿裁决的衣服转述:被当事实搬运的估计会把错误方向写死,而天真测试照绿。 - 前提含 spec 有这个槽位 ⇒ 派发前先读安装包内的活性账本对应行。 @@ -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 文件名用 `-.md`,⛔ 不用随机词对名。 - same-day churn 行:派发时 `git log origin/main --oneline -20 -- ` 见当天合并即加一行。 - 该行原文:基于合并后的代码工作,issue 引用的片段可能已变,先核对当前 main。 diff --git a/.claude/skills/pm-dispatch/references/execution-duties.md b/.claude/skills/pm-dispatch/references/execution-duties.md index 396bcb2484a..7071a37f602 100644 --- a/.claude/skills/pm-dispatch/references/execution-duties.md +++ b/.claude/skills/pm-dispatch/references/execution-duties.md @@ -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)即等。 @@ -90,7 +89,7 @@ ## 派发 -- 一单一次 `Agent` 调用,`subagent_type` 为 `os-dev`,后台并行。 +- 一单一次 `Agent` 调用,`subagent_type` 为 `os-dev`,后台并行;`mode:thread` 一卡一线程见 runbook。 - 模型分档是 PM 的逐卡显式决定;档位值单源在 dispatch-gates 常量,⛔ 本文不写模型名。 - 下限档给机械卡(正确性由门禁农场机械判定)。 - 默认判断档给 M/L、裁决实施与任何带设计判断的卡;拿不准就升一档。 @@ -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 自己读全文与全部评论并自查正文完整性。 @@ -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,漏挂不断链。