From 4d3194ba74bc6e6327ed1dd000ec840283195d0c Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 6 Sep 2026 09:01:40 +0000 Subject: [PATCH] docs(pm-dispatch): read the verify-lock queue depth before each dispatch and hold at depth >= 2 The dispatch cap counts cards in flight; the container-wide heavy-verify lock is one unit wide, and the measured exit-99 (NOT MEASURED) rate is a function of arrival queue depth alone: 1% / 23% / 36% / 56% at depth 1 / 2 / 3 / 4. The PM loop now reads `scripts/pm/os-verify-lock.sh --status` before the N-th dispatch and waits while the arrival depth (`queue N:` lines + the dev's own run; holder and parked slots not counted) would reach LOCK_DEPTH_HOLD = 2. The nominal `batch` cap is unchanged; `priority:p0` may still exceed `batch` but does not cross the depth hold. Both places carry the rule (SKILL.md and references/core-rules.md). The four added lines are paid inside the same file by four same-topic merges, so the line ratchet stays at its ceilings. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01Vbw3RPgdtqesx4azk9SbW8 --- .claude/skills/pm-dispatch/SKILL.md | 18 +++++++++--------- .../pm-dispatch/references/core-rules.md | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 7d2c8d5640..862b7fe076 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -81,8 +81,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 读数三:本车道 `pm:dispatched` 卡最新非本 session 的 `Claim:` 评论,只计认领本车道派发的。 - 读数四:本车道 `state=CLOSED` 按 `updated_at` 降序第一张卡的 `Claim:` session ID。 - 评审链与总监席落在车道卡上的笔迹是跨席作业,不算占席。 -- 读数三、四只增加自退、永不清座位。 -- 同 session 的 subagent dev 认领不触发自退,甄别靠分支。 +- 读数三、四只增加自退、永不清座位;同 session 的 subagent dev 认领不触发自退,甄别靠分支。 - 收班简报是前任不再写的显式声明,是释放标记不是锁:简报即最新事件 ⇒ 立即坐席。 - 滞后标题是进场顺手修的半状态,⛔ 不是阻塞;简报点名的留守尾巴作围栏。 - 维护者明示召唤是仲裁:有简报径直坐席;无简报才走保守确认,确认终止即坐席。 @@ -117,7 +116,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 | `target:` | 发版阻塞:每个 backlog 恰好一个生产者 | | `pm:epic`(父单或 sub-issue) | 已由 epic PM 保留;其它 PM 永不取;⛔ 永不与 `pm:queue` 同挂 | | `pm:seat` | 座位登记贴:协议载体,不是待分诊的工作 | -| `priority:p0` | 插队:可超 `batch`、破轮次立即派发;⛔ 不豁免同文件串行与认领协议 | +| `priority:p0` | 插队:可超 `batch`、破轮次立即派发;⛔ 不豁免同文件串行、深度等待与认领协议 | | open PR 引用该单 | 已实现,复核中 | | merged PR 带 `Fixes #n` | 完成(GitHub 关单) | @@ -432,6 +431,10 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 工作项面:卡片与分诊评论列的每条工作项逐条对树核验是否仍未完成,⛔ 不对卡核验。 - 每条工作项写进派发令时都是 dev 首先证伪的前提。 - 并行度以 `batch` 封顶,同批按构造文件面不相交;`priority:p0` 插队可超 `batch`。 +- 第 N 单派发前读 `scripts/pm/os-verify-lock.sh --status`:到达深度 ≥ `LOCK_DEPTH_HOLD`(= 2)即等。 +- 到达深度 = `queue N:` 行数 + 1(待派 dev 的运行算作到达);`state:` holder 与 `parked` 行不计。 +- 有效上限是锁宽的函数,⛔ 不是第二个 `batch`;`priority:p0` 可超 `batch`,⛔ 不越过深度等待。 +- 阈值出处是深度表:深度 1/2/3/4 的 exit 99 率 1%/23%/36%/56%;等待不填槽,读数带 UTC 写进认领。 - 批次独立性:一批内任两单不得可能碰同一个包/registry/barrel/spec schema;拿不准就串行。 - 同文件单跨轮硬串行;延后不是搁置,被延后那一刻就把已知的坑记到该 issue 上。 - 家族派发是范围澄清不是豁免:一个 dev 有意覆盖 N 张同区域已裁卡,可折叠为一次派发。 @@ -441,9 +444,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - ⑤ 派发令点名排除清单:长得像家族而不是的成员及理由。 - fold-or-serial 必答:≥2 张排队卡共享热文件时,必须以五门为判据显式答折叠或串行。 - 答题处是串行队条目和/或链首认领;不答而默认串行是漏答。 -- 维护者明示豁免同文件串行时,替代纪律四条:① 文件面申报到区域级。 +- 维护者明示豁免同文件串行时,替代纪律四条,豁免不外溢:① 文件面申报到区域级。 - ② 开 PR 前合一次 main;③ 兄弟卡落地后再合一次;④ 冲突交合并队列仲裁,⛔ 不手动排序。 -- 豁免不外溢。 - 阻塞解除后给延后单重新定价:派发前一单时带必答项。 - 必答项:你的改动让 #X 变简单、变难、变得不必要还是无影响。 - 派发后一单前用该回答重读它的选项与成本,⛔ 不沿用立单时那份。 @@ -516,8 +518,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 契约复审档留给裁决/复审子代理、skills 席与条款②工作。 - 降档出口两条:额度耗尽豁免,与主动预降(余量吃紧可预先降档)。 - 额度耗尽豁免仅当契约复审档实测不可用才落默认判断档,⛔ 不再往下。 -- 降档的档位与理由记入认领评论 Container & model 行。 -- 档位逐次派发显式传参,永不省略。 +- 降档的档位与理由记入认领评论 Container & model 行;档位逐次派发显式传参,永不省略。 - 解析顺序、pin 语义与允许名单回退陷阱以 os-dev 定义 frontmatter 注释为权威。 - 分诊 suggestion 行是输入不是决定,不采纳给理由。 - 派发词 ⛔ 默认不整段粘贴 issue 正文:让 dev 自己读 GitHub 全文与全部评论。 @@ -700,8 +701,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 权威的墙信号是失败本身:撞墙报文里的重置时刻在那一刻可得、事前查不到,记下来。 - 跨墙定时器:拿到重置时刻 ⇒ 一发定点(reset + 缓冲)优先。 - 没有重置时刻 ⇒ 挂每小时 cron Routine,⛔ 不用 send_later 链。 -- 第一枪成功的 fire 跑恢复后删除 cron。 -- fired 文本照定时器写法纪律。 +- 第一枪成功的 fire 跑恢复后删除 cron;fired 文本照定时器写法纪律。 - 恢复 playbook 链的是既有规则:逐个探在飞云卡 → 直接验收兜底或 transcript 复活。 - 随后重挂常规巡检 → 照常跑轮。 diff --git a/.claude/skills/pm-dispatch/references/core-rules.md b/.claude/skills/pm-dispatch/references/core-rules.md index e53c815271..b2299f4907 100644 --- a/.claude/skills/pm-dispatch/references/core-rules.md +++ b/.claude/skills/pm-dispatch/references/core-rules.md @@ -8,7 +8,7 @@ - 受管面由维护者人工合并且合并即审核记录,⛔ 席位永不以任一账号对受管面 PR 批准。 - ⛔ 永不代维护者回答产品或架构问题,唯一例外是已裁的代裁车道。 - ⛔ 永不派发 assignee 属于别人的 issue,⛔ 永不派发带决策标签的 issue。 -- 并行度以 `batch` 封顶,同批按构造文件面不相交。 +- 并行度以 `batch` 封顶,验证锁到达深度 ≥ `LOCK_DEPTH_HOLD`(2)即等;同批按构造文件面不相交。 ## 入口与角色 - 座位角色由 `/pm-dispatch` 参数认定;无角色参数按执行姿态跑,车道由座位贴认定。 - 开轮第一个动作是一次最便宜的车道盘点查询,⛔ 在它之前不读任何长文本。 @@ -36,7 +36,7 @@ - `pm:blocked` 配正文行 `Blocked-by:`,工已完而卡在门禁的同用此态并写 `Unlock-action:` 行。 - `pm:awaiting-maintainer` 只剩站外人工动作;`pm:blocking` 是反向索引推导的缓存 ⛔ 不手工挂。 - `pm:retriage` 并存 ⛔ 不摘原标且跳过派发;`finding` 恒等于待首次定级、定级即离标。 -- 插队标签可超 `batch` 立即派发,⛔ 不豁免同文件串行与认领协议。 +- 插队标签可超 `batch` 立即派发,⛔ 不豁免同文件串行、深度等待与认领协议。 - 五个 pm 状态标签加 `needs-user-decision` 共六态互斥,转换恒一笔 replace,队列卡逾三天欠转换。 - 关闭即在同一笔摘掉 pm 状态标;状态变更不过夜,半状态在结束会话前补齐或回滚。 - 等待别的座位也是状态、写在卡上才存在;代他人指令的关闭须带指令、原话与出处三件。