From b6911a8db4d2c4a91be9e6855e1b8f49a8d06342 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 18 Aug 2026 05:36:26 +0000 Subject: [PATCH] docs(pm-skill): stale-premise check covers ruling-named cards; triage self-exit guard sees in-flight sibling rounds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two gaps in one file, bundled under the hard same-file serial rule: - Pre-dispatch stale-premise check gains its second half: every issue a ruling or card names as a blocker, claim surface, coordination target, or arms-once-this-lands dependency is re-read (open/closed/assignee) at dispatch time, and the dispatch order cites the observed state, not the ruling's description. origin/main cannot answer whether a card is still open; a stale action claim self-corrects when the dev starts, a stale card reference never turns anything red. - Seat-Routine round guard becomes a complete mutual-exclusion reading: each fire leaves a round-open marker (session ID + fire time) on the seat post before its first write; the guard reads both the last closing brief and the latest round-open marker — a marker newer than the brief and younger than one round means a live sibling round, so the fire self-exits. Closes the window in which a slow round is invisible because its brief only lands at round end. Line ratchet stays at 682/682: both additions are paid for by removing text duplicated verbatim in the references files the same sections already cite (create_trigger trap, release-board cadence lines, org Project view note, epic territory rationale, landing-readings tail). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Rn7aaamsR99FXRqLcpL99q --- .claude/skills/pm-dispatch/SKILL.md | 44 ++++++++++++++--------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index c6d6757945..c818266d50 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -47,17 +47,18 @@ metadata: 答复 ⇒ **自退**,不再读任何长文本 ——空转座位的成本上界就是这一次查询。 **座位 Routine 三原则**(创建细则见 `references/seat-post-protocol.md`):① 由维护者在 Routines -UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Routine 拿不到 GitHub 工具,静默 -零产出);② 创建后手动 fire 一轮烟测,判据取**GitHub 上的产出**;③ 每 fire 一轮:读座位 -贴 → 从 labels 重建状态 → 跑一轮 → 结束,不继承上下文;fire 开始先读本座位上一轮产出时间,不足 -一个轮次即自退(轮次互斥—— 宁少跑,不让两个同座位会话并行写标签)。跨 fire 长流程的前提:接力/停 -放的每一项都落成 GitHub 上可读的文本,⛔ 不留在会话记忆里。 +UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 建的是静默零产出陷阱,细节在 +references);② 创建后手动 fire 一轮烟测,判据取**GitHub 上的产出**;③ 每 fire 一轮:读座位 +贴 → 从 labels 重建状态 → 跑一轮 → 结束,不继承上下文。**开轮互斥读法**(宁少跑,不让两个同座位 +会话并行写标签):fire 开始、首个写动作之前读两个读数 —— 最近收班简报未满一个轮次,或最新「开 +轮」标记晚于收班简报且自身未满一个轮次(轮中会话按设计还没发收班贴,开轮标记是它唯一可见的痕 +迹)⇒ 自退;两读数皆清,先在座位贴留一行开轮标记(session ID + fire 时刻)再跑轮。跨 fire 长流 +程的前提:接力/停放的每一项都落成 GitHub 上可读的文本,⛔ 不留在会话记忆里。 ## 全体座位的不变量 -- **所有状态在 GitHub,本地零状态。** 循环必须能从全新会话恢复;状态只经 issue 标签、assignee - 、正文行与 `pm:seat` 座位贴读写。org Project 只是视图层,没有任何判据读它,⛔ 不进热路径 —— - GitHub 之外不维护任何跟踪状态。 +- **所有状态在 GitHub,本地零状态。** 循环必须能从全新会话恢复;状态只经 issue 标签、assignee、 + 正文行与 `pm:seat` 座位贴读写,GitHub 之外不维护任何跟踪状态(org Project 只是视图,见多仓协调 5)。 - **PM 不写文件、不写代码。** 唯一例外:维护者**逐 PR 明示授权**的 `.claude/` 内部工具 PR —— 授权原话引用在 PR 正文,复核需另一座位或维护者 walkthrough,⛔ 不得自审自合。 - **GitHub 上一切新内容用英文**(维护者 2026-08-06 指令);中文留两个通道 —— 轮次报告(chat)与派 @@ -122,9 +123,8 @@ UI 创建并勾 GitHub 连接器、UI 钉模型(会话内 create_trigger 的Rout 轮 —— 每一枪**以「幂等 —— 动手前先重读状态」开头**,只写关键判据(「若 X 则 Y」),其余指针化 (座位贴为唯一状态源);⛔ 不写结论、不含未经重读即可执行的祈使句。 - **放行认门禁 job 的结论,不认聚合读数**(承载门禁族的 job 须 `completed: success`,`in_progress` - 不算);聚合只作阴性筛查(`blocked`/`dirty` ⇒ 再定位),放行按名定向读单条 job,⛔ 不拉全表(定位 - 失败才拉);advisory 门禁红着合并进 main 是共享损伤,任何车道发现都立即止血 + 立单。落地判据永远 - 两个读数:队列成员资格(timeline 事件,⛔ 非 `auto_merge` 字段)和 `origin/main`;踢出重投先认签名(见事实表)。 + 不算;聚合只作阴性筛查,放行按名定向读单条 job,⛔ 不拉全表);advisory 门禁红着合并进 main 是共 + 享损伤,任何车道发现都立即止血 + 立单;落地两个读数与踢出重投的签名纪律见事实表。 - **dev 自己死了 ≠ 维护者中止**:子代理消失(零推送/零分支/无报告)是正常死法,按死认领 回收处理;「维护者中止」只在有显式信号(原话,或宿主回报stopped by the user)时成立 —— 判 据是信号不是症状,⛔ 不得据推断立一道没有重启条件的门。 @@ -241,8 +241,7 @@ of record)。**读侧闭环(维护者 2026-08-12 批准):接管与巡检只读 收过不过得去?):in-scope ⇒ 挂父单sub-issue 下轮自动入队;顺带发现 ⇒ 独立立单进修复落地 仓 backlog(查重先行,⛔ 不借sub-issue 通道把未分诊的塞进池子);触 spec/公共契约 ⇒ 转 spec 座位 队列 + epic 侧写`Blocked-by:`;每次分流留一行审计评论。进度视图:父单维护 checklist 汇总评论, -决策仍锚在具体 sub-issue。收尾四步与僵尸回收细则见 `references/seat-post-protocol.md`;领地防 -撞是声明式的 —— 撞上由合并队列兜底,所以领地声明越窄越诚实。 +决策仍锚在具体 sub-issue。收尾四步、僵尸回收与领地防撞(声明式,越窄越诚实)细则见 `references/seat-post-protocol.md`。 ## 分诊座位职责 @@ -293,12 +292,11 @@ hold 评论纪律见状态模型,hold 重验只在 `Restart-when:` 命中时发 道 finding 由该席自分诊,全仓轮跳过)。**自动集中轮**(常设授权,维护者 2026-08-13):`finding` >15 ⇒ 下 一 fire 跑域分批集中轮,sweep 打包晋级五条照用;原话、批量参数与五条细则见 `references/dispatch-runbook.md`。 -**发版板(`target:`;运维细则见 `references/seat-post-protocol.md`)。** 判据二元(⛔ 不 -做优先级渐变 —— 渐变没人维护):「不修它,当前 RC 能不能发?」判阻塞四类:① 用户今天就撞的已发布 -面缺陷;② 公开契约 declared≠enforced;③ 存量数据/迁移形状(发布后修不回);④ 发布说明里要为它道歉 -的。拆分/分票时 `target:*` 随工作走,对每一半重跑二元判据,默认继承,不继承按四类写明理由。**每 -张板同归本座位生产**(每板恰好一个生产者的不变量不变);「归零 = 可发版」指三张板都空。鲜度每 -~5 轮;**发版时刻 = 清板不是重扫**;清板三选一与 pin 前置细则见 references。 +**发版板(`target:`;鲜度节奏、清板三选一、pin 前置等运维细则见 +`references/seat-post-protocol.md`)。** 判据二元(⛔ 不做优先级渐变 —— 渐变没人维护):「不修它, +当前 RC 能不能发?」判阻塞四类:① 用户今天就撞的已发布面缺陷;② 公开契约 declared≠enforced;③ 存 +量数据/迁移形状(发布后修不回);④ 发布说明里要为它道歉的。拆分/分票时 `target:*` 随工作走,对每 +一半重跑二元判据,默认继承,不继承按四类写明理由。**每张板同归本座位生产**(每板恰好一个生产者)。 **高置信决策卡的分诊代裁(维护者 2026-08-12 裁定)。** 出处原话:「让他帮我从实际业务需求出发, 从平台长远合理性出发,从避免ai写代码犯错的角度出发,从创业阶段不扩散需求的角度出发综合分析……很 @@ -329,9 +327,11 @@ hold 评论纪律见状态模型,hold 重验只在 `Restart-when:` 命中时发 构性盲区。候选 = open、未 assign、无`needs-user-decision`;已排队父单的 open sub-issue 自动是 候选(`pm:epic` 父单的子树除外)。**每张候选读全文 + 全部评论**(裁决落在评论区,跳过评论就是跳 过裁决;评论还可能记着一半工作已交付);**派发前做前提过时检查(stale-premise check)—— 裁决同 -罪**(裁决描述的也是当时的仓,写得权威、日期又近,恰恰更容易被当成现成事实 —— -`git log --oneline -20 -- ` 之外,裁决实施卡再核被点名的动作在 `origin/main` 上还没被做 -掉;花几分钟,不查则赔一次 agent 运行)。 +罪**(裁决描述的也是当时的仓,写得权威、日期又近,恰恰更容易被当成现成事实),两半都查:**动作 +面** —— `git log --oneline -20 -- ` 之外,裁决实施卡再核被点名的动作在 `origin/main` 上 +还没被做掉;**卡引用面** —— 裁决/卡片点名为阻塞、认领面、协调对象或「落地即启用」依赖的每张 +issue,逐个读当前 open/closed/assignee,引用读到的现状 ⛔ 不引用裁决写作时的描述(树答不了「那 +张卡还开着吗」;过时动作断言 dev 动手即自纠,过时卡引用不变红)。花几分钟,不查则赔一次 agent 运行。 **批次独立性。** 一批内任两单不得可能碰同一个包/registry/barrel/spec schema;拿不准就串行。**同 文件单跨轮硬串行;延后不是搁置**(被延后那一刻就把已知的坑记到该 issue 上)。**维护者明示豁免同