From 35962a565b2c3e9596c07238b5974747d7baf073 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 1 Sep 2026 08:25:35 +0000 Subject: [PATCH 1/2] =?UTF-8?q?skills(pm):=20give=20sweep=20disjunct=20?= =?UTF-8?q?=E2=91=A0=20the=20drain=20clauses=20the=20finding=20box=20alrea?= =?UTF-8?q?dy=20has?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Disjunct ① (bare cards: no pm:*, no needs-user-decision, no domain:*) had a stock query and nothing that drains it, and its ordering rule 「新入卡①优先最新」 inverts into tail starvation the moment intake exceeds throughput. Three clauses land in the sweep paragraph, one home each: - first-touch grading every round, budget 3–5 stated as a CEILING not a quota (a bare card costs more per unit than a finding: full read + route + grade + type); - the ordering rule REPLACED: newest-first while the queue clears each round, oldest-first the moment it does not, with the inversion rationale inline; - bare count > 15 ⇒ the next fire runs a domain-batched concentrated round of 15–20 cards per ROUND (not per batch — batches stay ≤5 same-family per the standing convention), with the pair rationale written in: the threshold absorbs bursts, the budget drains steady state, neither substitutes. The round brief's health indicators go from four to five: bare count + median age join the finding line. The runbook's hourly-tier reading recipe records the one exception the new indicator creates — a label-absence population has no totalCount to read, so it comes from the round's own disjunct-① enumeration. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2 --- .claude/skills/pm-dispatch/SKILL.md | 18 ++++++++++++++---- .../pm-dispatch/references/dispatch-runbook.md | 3 ++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index aa806662db..baa4f0eff0 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -344,8 +344,16 @@ issue 任何人不得认领** —— 那意味着分诊还没走到,不是「可 ②③ 只取 `updated_at` 早于 ~2 分钟的卡且不是可选项 —— 半标注卡是协议自己按设计生产的 (一次标签写入即把老卡打成半标注),只带路由或状态机其一的卡对两个视图同时不可见。 排除:`tracking`、`status:parked`(其正常形状恰是「带域标签无 pm-state」)、 -全部 `pm:seat` 贴、`qa-run` 记录(协议载体非工作);存量大时每轮限量 —— 新入卡①优先最新, -半状态治愈积压②③**最老优先、P0 嫌疑先行**,⛔ 优先最新不适用(细则见 runbook)。 +全部 `pm:seat` 贴、`qa-run` 记录(协议载体非工作);存量大时每轮限量 —— 半状态治愈积压 +②③**最老优先、P0 嫌疑先行**,⛔ 优先最新不适用(细则见 runbook)。 +**析取①的排空条款(与发现箱同构,参数按本总体自定)。首触定级每轮必做**,预算 3–5 张是 +**上限不是配额** —— 裸卡单位成本高于 finding(全文读 + 路由 + 定级 + 打 `type`), +清得动就多清、清不动不欠。**排序:队列每轮清空时最新优先,清不空的那一刻起 +改最老优先** —— 最新优先只在入流 ≤ 吞吐时最小化首触延迟,积压下它按构造饿死队尾, +而队尾正是隐藏严重度老化最久处。**裸卡数 >15 ⇒ 下一 fire 跑域分批集中轮 15–20 张/轮** +(轮总量,非批大小;每批仍 ≤5 张同族卡,见 runbook)。**预算与阈值成对生效,理由:** +阈值吸收突发(实测 40 分钟到 13 张 ≈ 稳态四倍,审计式倾倒形态),预算排空稳态, +⛔ 二者不可互相替代 —— 只取预算,一次 13 张的倾倒要三轮才吸收完,期间队尾继续增长。 **紧急卡直接分诊** (维护者 2026-08-13):维护者点名或 p0 嫌疑 ⇒ 立即起 `claude-fable-5` 分诊子代理,不等定时轮次;授权面 = 分诊本身(定级/路由/标签/既有评论格式), ⛔ 不写码不认领;产出落卡,与定时轮分诊同格式同效力(细则见 `references/dispatch-runbook.md`)。 @@ -790,11 +798,13 @@ a human merge 项、governed 合并审计清单(实跑 `node scripts/pm/check-go ⛔ 不凭记忆汇总;此为车道早警,权威合并窗口与认定/回滚处置归总监席, `references/lanes/director.md`)、**`UNRECOGNISED` 行**(对本轮门禁日志 grep `UNRECOGNISED`, 逐行照录,`NOT APPLICABLE` 行也在内 —— 缺行读作「无未识别项」,实则可能是没人 grep)。 -健康指标四个(总 open 数刻意不在其中 —— 债密区发现快于关闭是循环在工作): +健康指标五个(总 open 数刻意不在其中 —— 债密区发现快于关闭是循环在工作): **可派发库存**(dispatchable inventory;open `pm:queue` 未认领及趋势);**决策箱**(decision inbox; 待维护者数,分诊简报还要点名带开放下游依赖的决策卡 —— 从 `Blocked-by:` 反向索引现算); **finding 数与中位年龄**(裸标签数即未定级数,hold 已换标不在内; -老化 = 首触欠账);**发版阻塞**(release blockers;三仓 `target:`之和,归零 = 三张板都空)。 +老化 = 首触欠账);**裸卡数与中位年龄**(sweep 析取①;老化 = 首触欠账, +读法与 finding 不同族见 runbook);**发版阻塞**(release blockers;三仓 `target:`之和, +归零 = 三张板都空)。 **波次收工点(维护者 2026-08-09 裁定)。** ① 收工点 = 会话内在飞归零(⛔ 不在复核中途压缩; 云卡不挡 —— 热移交见座位贴协议细则); diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index fd1b1edb4a..34cdbe166b 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -89,7 +89,8 @@ fire 附带一次: 出处原话逐字住主文件「两级盘点」条。实测全量四仓 ~50k token/轮, `since` 等价 ~8k。小时层三读法:sweep 析取①②③ = `list_issues` + `since`(标签变更刷新 `updated_at`, 半标注照样入窗);解锁扫描反演 = 逐仓 `state=CLOSED` + `since` 与 `Blocked-by:` 反向索引求交, -命中走既有回队双查;健康指标 = 逐标签 `perPage: 1` 只读 `totalCount`。 +命中走既有回队双查;健康指标 = 逐标签 `perPage: 1` 只读 `totalCount` —— +裸卡数例外(标签缺席无计数可读),取本轮析取①枚举,⛔ 不另发查询。 每日层(当日首 fire)= 四仓全量对账 + 归集本就日频的职责(finding 集中轮、 `Restart-when:` 判据批扫、决策箱回填)。成本靶:干活轮 ≤50k, 空转轮守既有探针预算。每条枚举都比对返回数与 `totalCount`:不等 ⇒ 本轮没读完, From 438df6a82629c98b43fdd90187c87d3c8d702e75 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 1 Sep 2026 08:48:13 +0000 Subject: [PATCH 2/2] =?UTF-8?q?skills(pm):=20drop=20the=20disjunct-?= =?UTF-8?q?=E2=91=A0=20total=20cap=20for=20the=20sibling's=20run-to-empty?= =?UTF-8?q?=20shape?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The at-tier compensating review found two blocking items against the numbers the seat adjudicated, on two independent grounds. 1. The concentrated round's 15–20 per-round total re-created 封顶总量 — the exact category the 2026-08-25 run-to-empty ruling retired for the sibling box (⛔ 无每轮总量预算 … 不靠封顶总量 … 单轮数小时是可接受形态 … 下一 fire 从断点续跑). It would also have forbidden the maintainer's own 40-card round, which is the existence proof the clause rests on. The trigger, 域分批 and 每批 ≤5 stay; the size cap becomes run-to-empty, window-bounded, resuming from the breakpoint on the next fire — the sibling's post-ruling wording. 2. 「预算 3–5 张是上限不是配额 …清得动就多清、清不动不欠」 carried two mutually exclusive instructions, and the conservative reading is the chronic-under-clear hazard. The numeric ceiling is gone; the per-unit cost parenthetical is repositioned as the reason bare rounds run LONG — which the ruling accepts — rather than a reason to cap. No calibration number is kept: on a population that has needed 9, 13 and 40 cleared in a round, a 「常态 3–5」 anchors low in precisely the direction the review flagged. With both fixed, 「与发现箱同构」 is now literally true (metric + run-to-empty drain + threshold), so the parenthetical says which three parts are shared and names the ordering rule as this population's own addition. The pair rationale survives with its terms updated: the threshold absorbs bursts by switching the next fire into domain-batched mode, run-to-empty drains steady state. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2 --- .claude/skills/pm-dispatch/SKILL.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index baa4f0eff0..83b4400cee 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -346,14 +346,17 @@ issue 任何人不得认领** —— 那意味着分诊还没走到,不是「可 排除:`tracking`、`status:parked`(其正常形状恰是「带域标签无 pm-state」)、 全部 `pm:seat` 贴、`qa-run` 记录(协议载体非工作);存量大时每轮限量 —— 半状态治愈积压 ②③**最老优先、P0 嫌疑先行**,⛔ 优先最新不适用(细则见 runbook)。 -**析取①的排空条款(与发现箱同构,参数按本总体自定)。首触定级每轮必做**,预算 3–5 张是 -**上限不是配额** —— 裸卡单位成本高于 finding(全文读 + 路由 + 定级 + 打 `type`), -清得动就多清、清不动不欠。**排序:队列每轮清空时最新优先,清不空的那一刻起 -改最老优先** —— 最新优先只在入流 ≤ 吞吐时最小化首触延迟,积压下它按构造饿死队尾, -而队尾正是隐藏严重度老化最久处。**裸卡数 >15 ⇒ 下一 fire 跑域分批集中轮 15–20 张/轮** -(轮总量,非批大小;每批仍 ≤5 张同族卡,见 runbook)。**预算与阈值成对生效,理由:** -阈值吸收突发(实测 40 分钟到 13 张 ≈ 稳态四倍,审计式倾倒形态),预算排空稳态, -⛔ 二者不可互相替代 —— 只取预算,一次 13 张的倾倒要三轮才吸收完,期间队尾继续增长。 +**析取①的排空条款(与发现箱同构:指标 + 跑到清空 + 阈值;本总体另加排序一条)。 +首触定级每轮必做,跑到清空**:⛔ 无每轮总量预算,清得动就多清、清不动不欠; +窗口耗尽未跑完的,下一 fire 从断点续跑。裸卡单位成本高于 finding +(全文读 + 路由 + 定级 + 打 `type`),所以裸卡轮天然更长 —— 单轮数小时同为可接受形态, +⛔ 不是封顶总量的理由。**排序:队列每轮清空时最新优先,清不空的那一刻起改最老优先** +—— 最新优先只在入流 ≤ 吞吐时最小化首触延迟,积压下它按构造饿死队尾, +而队尾正是隐藏严重度老化最久处。**裸卡数 >15 ⇒ 下一 fire 整轮改域分批集中模式**: +每批 ≤5 张同族卡,同样跑到清空或断点续跑(见 runbook)。**阈值与跑到清空成对生效,理由:** +跑到清空排空稳态,阈值吸收突发(实测 40 分钟到 13 张 ≈ 稳态四倍,审计式倾倒形态)—— +没有阈值,倾倒只能按到达顺序摊进常规轮,失掉同族同上下文一次读完的批次红利, +队尾同期继续增长;⛔ 二者不可互相替代。 **紧急卡直接分诊** (维护者 2026-08-13):维护者点名或 p0 嫌疑 ⇒ 立即起 `claude-fable-5` 分诊子代理,不等定时轮次;授权面 = 分诊本身(定级/路由/标签/既有评论格式), ⛔ 不写码不认领;产出落卡,与定时轮分诊同格式同效力(细则见 `references/dispatch-runbook.md`)。