diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 6208eae65d..e296cefed1 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -52,20 +52,22 @@ metadata: 策箱无新 答复 ⇒ **自退**,不再读任何长文本 ——空转座位的成本上界就是这一次查询。 -**座位 Routine 三原则**(创建细则见 `references/seat-post-protocol.md`):① 由维护者在 Routines -UI 创建、UI 钉模型 —— 凭据随 Routine 所挂 repo sources 走,Routines UI 并无 GitHub 连接器入口 -(2026-08-23 实测;会话内 create_trigger 建的是静默零产出陷阱,细节在 references);② 创建后手动 -fire 一轮烟测,判据取**GitHub 上的产出**;③ 每 fire 一轮:读座位 -贴 → 从 labels 重建状态 → 跑一轮 → 结束,不继承上下文。**开轮互斥读法**(宁少跑,不让两 -个同座位会话并行写标签):fire 开始、首个写动作之前读四个读数,任一未满一个轮次 ⇒ 自 -退 —— 最近收班简报;晚于它的最新「开轮」标记(轮中会话在座位贴上唯一的痕迹);本车道 -`pm:dispatched` 卡最新非本 session 的 `Claim:` 评论(拼写见「认领」,车道盘点已取);本车道 +**座位 Routine 三原则**(细则见 `references/seat-post-protocol.md`):① 维护者在 Routines UI 创建、UI 钉 +模型;② 手动 fire 烟测,判据取**GitHub 上的产出**;③ 每 fire 一轮:读座位贴 → 从 labels 重建状 +态 → 跑一轮 → 结束,不继承上下文。**开轮互斥读法**(宁少跑,不让两个同座位会话并行写 +标签;维护者 2026-08-27 裁「落协议」:近期窗口只管**未收班**活动):fire 开始、首个写动作之 +前读四个读数,未收班活动任一未满一个轮次 ⇒ 自退 —— 最近收班简报;晚于它的最新 +「开轮」标记(轮中会话在座位贴上唯一的痕迹);本车道 `pm:dispatched` 卡最新非本 session 的 +`Claim:` 评论(拼写见「认领」,车道盘点已取;只计**认领本席车道派发**的 —— 评审链/总监 +席落在车道卡上的笔迹是跨席作业不算占席,认领自带 session ID 与席位身份);本车道 `state=CLOSED` 按 `updated_at` 降序第一张卡的 `Claim:` session ID —— 第四读免疫标签惯例:不用 -`pm:dispatched` 的会话对前三读完全隐形,叠加过期座位贴后与空席同形(实测:一个 16 分钟前还 -在一趟合并五个 PR 的会话被读作「清」)。标记可漏写,认领不可省;第三、四读数只**增 -加**自退、永不清座位;两读判「非本 session」把 subagent dev 的同 ID 认领读作本会话在飞、 -不自退,是特意保留的安全方向 —— 同会话 dev 本非互斥对象,甄别靠分支(见「认领」)。 -四读数皆清,先在座位贴留一行开轮标记(session ID + fire 时刻)再跑轮。 +`pm:dispatched` 的会话对前三读隐形,与空席同形(实测:16 分钟前还在合并 PR 的会话被读作「清 +」)。**收班简报 = 前任「不再写」的显式声明,是释放标记不是锁**:简报即最新事件 ⇒ 立即 +坐席,滞后标题是进场顺手修的半状态(⛔ 不是阻塞),简报点名的留守尾巴作围栏(细则见 +seat-post-protocol);维护者明示召唤是仲裁:有简报径直坐席,无简报(前任或死在轮中)才走保守确 +认,确认终止即坐席。标记可漏写,认领不可省;第三、四读数只**增加**自退、永不清座位;两 +读判「非本 session」对 subagent dev 的同 ID 认领不自退,是特意保留的安全方向(同会话 dev 本非 +互斥对象,甄别靠分支)。互斥清,先在座位贴留一行开轮标记(session ID + fire 时刻)再跑轮。 ## 全体座位的不变量 @@ -159,8 +161,6 @@ fire 一轮烟测,判据取**GitHub 上的产出**;③ 每 fire 一轮:读座位 `git show origin/main:`),⛔ 不用共享检出的工作树 —— 它的 HEAD由别的 agent 摆布。 - **零命中必须用确定存在的邻近词反查**,否则零命中不成立;仓不可达同理,⛔ 不因「查不了」当「查 过了干净」—— 在 issue 上贴出给对应座位的现成命令,等读数回贴再派。 -- **GitHub 限流 ⇒ 先 `GET /rate_limit`(零配额)取精确 reset 与余量,⛔ 不盲等**;公开仓降级 WebFetch - 读法与限流细则见 platform-readings。 - **定时器文本纪律(一切自设定时器适用)**:已删除的定时器仍会投递,投递时文本可能落后 现实数 轮 —— 每一枪**以「幂等 —— 动手前先重读状态」开头**,只写关键判 diff --git a/.claude/skills/pm-dispatch/references/seat-post-protocol.md b/.claude/skills/pm-dispatch/references/seat-post-protocol.md index 8dd2c49b48..0a8e9015a2 100644 --- a/.claude/skills/pm-dispatch/references/seat-post-protocol.md +++ b/.claude/skills/pm-dispatch/references/seat-post-protocol.md @@ -16,9 +16,8 @@ - **「当前 PM」段登记三元**:GitHub 账号(`get_me` 自查)+ 会话 ID 或 Routine ID + 上任时刻。审计/认领评论的**作者字段**是平台盖章、不可自述错的硬读数 —— 接管仲 裁与活性判定优先用它对账正文。 -- **读侧边界(接管与巡检)**:只读晚于正文最后编辑时间的评论 —— 评论无界增长而正 - 文有界,读全评论是纯 token 税;两个时刻都是平台盖章的硬读数,比对即得(批准出处在主文 - 件)。 +- **读侧边界(接管与巡检)**:只读晚于正文最后编辑时间的评论(评论无界增长,读全评论是 + 纯 token 税;两个时刻都是平台盖章的硬读数,比对即得,批准出处在主文件)。 - **班次叙事不进贴正文**:逐卡状态在卡与 PR 上本就必填,轮次合计走轮次报告;贴正 文按写侧刷新点(下方)编辑,⛔ 不逐事件追加(无界贴会超出单次读取上限)。 - **接管压缩细则**:接任 PM 把交接的有效内容按四段模板重述为新正文,**编辑历史即 @@ -40,26 +39,27 @@ 由,边界刷足以覆盖;中途状态的承载见上「班次叙事」条(原话在主文件)。协议/结构 升级迁移状态、或巡检发现正文不符时,当场改正文 + 审计评论。Routine 座位的收尾简报也 落自己的座位贴(它是下一轮自退守卫的读数)。 -- **收班 = 状态 flush + 看护显式移交,⛔ 不等于在飞归零**(维护者 2026-08-13 拍板;实测:云卡本 - 就设计为活过 PM 会话,等它归零曾挂住座位数小时)。在飞归零对子代理 - dev 是对的(随会话死);对云卡与合并队列尾巴是错的 —— 那些是持久的、GitHub 锚 - 定的进程,需要的是**看护者**。热移交三件齐即可收班:① 每张在飞卡落**收单注记** - (评审判据、落地步骤、当前状态);② 座位贴正文刷新到当下;③ 每件在飞物**点名接手看 - 护者** —— 默认下任座位 - (在跑云会话用绑定会话 ID 的 poke 触发器投递,⛔ 非 `SendMessage` 直投,细则见 - `dispatch-runbook.md`),已入队 PR 的看护同样点名接手座位。**评审判断不可外包** - :看护只守落地,热移交把评审交给下任座位,⛔ 不是跳过评审;会话内 `create_trigger` 的 - Routine 拿不到 GitHub 工具(下方细则),⛔ 不是逃生舱。 -- **交接收尾清单(退场序列,漏一步就是留残缺现场)**:① 立即停止新派发;② 在手工 - 件逐件处置 —— 能收则收,收不完走上一条热移交(⛔ 不为清零而等);③ 全量枚举本车 - 道队列 + 决策箱 + findings,形成接任台账;④ 贴正文改「⏳ vacant」+ 完整台账(前 - 任会话 ID、注销时间、队列快照、**热文件串行队**、跨车道备忘);⑤ 审计评论存档 - (接任指引:`/pm-dispatch 接手` + 先读座位贴);⑥ `list_triggers` 清点本会话全 - 部自设定时器,逐个清理**或随移交物转交**(绑着移交中 PR 的定时器随 PR 转交,不 - 清);⑥ʹ 本座位派出的 dev 会话由**离任 PM 自己**逐个 `archive_session`,归档 - 义务**不可移交**(会话句柄是账号作用域的,细则见 `dispatch-runbook.md`);确须 - 留跑的会话在座位贴里点名、写明「归档不随交接转移」,⛔ 不留作接任者的欠账 —— - 那是一条它做不到的待办;⑦ 向维护者交最终报告(零建议与三类上报纪律在主文件)。 +- **收班 = 状态 flush + 在飞显式安置,⛔ 不等于在飞归零**(维护者 2026-08-13 拍板;云卡与队列 + 尾巴是持久、GitHub 锚定的进程)。安置默认**离任留守**(下条);留不了的才热移交:在飞卡落 + **收单注记**(评审判据、落地步骤、当前状态)+ 点名接手看护者 —— 默认下任座位,在跑 + 云会话经 poke 触发器投递(⛔ 非 `SendMessage` 直投,见 runbook);看护只守落地,**评审判断不可外 + 包**。**收班序列**(维护者 2026-08-27 裁「落协议」):贴正文/标题刷新在先,**收班简报评论是 + 最终一笔**;继任的释放判据 = 简报在;标题滞后是可修半状态,坐席时顺手修,⛔ 不是阻塞。 +- **离任留守(linger)= 收班后的默认看护形态**(维护者 2026-08-27 裁「落协议」;提案片段: + 「立刻进行交接,并继续处理完手上的任务到合并」;「清标即落地」的延伸,谁评审 + 谁落地):离任 PM 可继续把在手项驱动到 MERGED;写面恰为**简报点名的项**(已 ACCEPT 待队列 + PR、落地中评审链载体),⛔ 不读队列、不新派发、不碰未点名卡,残余定时器同界;末尾巴 + 合并 ⇒ 贴上一条尾清注记。继任立即坐席,点名集作围栏(声明式,同热文件串行队);标题词 + 表不扩,收班座位恒 `⏳ vacant`,留守登记(谁、哪些尾巴)= 「说明」段一行。 +- **交接收尾清单(退场序列,漏一步就是留残缺现场)**:① 立即停止新派发;② 在手工件逐件 + 处置 —— 能收则收,收不完留守或热移交(⛔ 不为清零而等);③ 全量枚举本车道队列 + 决 + 策箱 + findings,形成接任台账;④ 贴正文改「⏳ vacant」+ 完整台账(前任会话 ID、注销时间、 + 队列快照、**热文件串行队**、跨车道备忘);⑤ 收班简报/审计评论存档(最终一笔;接任指 + 引:`/pm-dispatch 接手` + 先读座位贴);⑥ `list_triggers` 清点本会话全部自设定时器,逐个清理、 + 随移交物转交(移交中 PR 的定时器随 PR 走)或随留守保留(只触点名项);⑥ʹ 本座位派出的 + dev 会话由**离任 PM 自己**逐个 `archive_session`,归档义务**不可移交**(会话句柄是账号作用域 + 的,细则见 `dispatch-runbook.md`);确须留跑的会话在座位贴里点名、写明「归档不随交接转移」 + (⛔ 不留作接任者的欠账);⑦ 向维护者交最终报告(零建议与三类上报纪律在主文件)。 - **epic 委托不入座位贴体系**(父单正文自带会话与领地,`label:pm:epic` 即全量索 引);座位贴只记常设座位,一件事只记一处。`packages/spec` 恒归 spec 座位。