Skip to content

Commit e073455

Browse files
docs(pm-dispatch): every card carries a business rationale the 分诊席 judges, every card is triaged (pre-applied labels are a suggestion), and a seat verifies a card's premise before dispatch (#25552)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} --> _Requested by **Elon** · [project thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DUiuRwAvJHZThcC1wdYPpPe)_ Fixes #25507 Clause-②: no Metadata-protocol: none ## 维护者速读(草稿) - **改了什么**:把您 2026-10-23 16:43–16:45Z 的三句话写进 pm-dispatch:①「我说的是业务需求上的合理性,谁来判断」+「立卡」⇒ 立卡门从三答变四答,多一栏「业务理由」(谁受益、什么场景、不做会怎样);分诊首触先读它,三个出口:清楚且合北极星方向 ⇒ 照常定级入队;缺失或站不住 ⇒ `Triage: returned` 退回立卡人补,卡留 `finding`、不入队,分诊 ⛔ 不代写、⛔ 不因此关卡;涉及产品取舍或方向不明 ⇒ `needs-user-decision`,由总监席按批呈您;批量立卡(一次 ≥10 张)审计评论带 `Batch-of:`,总监席每源抽 ≤5 张给您过目。②「分诊应该所有卡都分诊,因为有的车道在立卡的时候就打上了标签」⇒ 预贴的标签只算建议,`pm:queue`/`priority:*` 只由分诊首触落笔;与建卡同分钟出现的队列/级别标签视作未分诊;无分诊审计评论的卡不是候选、不得认领;skills 车道「finding 自分诊」的例外撤销;单车道仓(hotcrm 等)席位自己做的首触也含业务理由。③「并且立刻派发」所批的派发前核实 ⇒ 席位派发前起只读子代理核实前提(卡线程卡在交候选之前做):成立 ⇒ 派;不成立但改法明确(目标不变,只换落点或修法)⇒ 评论记改法与读数、改正文,再派;判不了 ⇒ 入决策箱,不占卡线程槽;砍范围、降级、关卡仍是卡的命运,归人工地板。 - **为什么改**:现状没有人判断需求合不合理,卡的来源写什么就当什么;卡线程发现前提不成立时已经占了一个名额。两条都是您 16:43Z 起在项目聊天里点的。 - **风险与代价(含回滚)**:纯规则文本;`filing-gate.md` 64→68、`dispatch-runbook.md` 241→245 两处抬上限引您的原话,其余七个文件就地改、行数不变;人工决裁底线(`triage-duties.md` 末 26 行)逐字节未动;一次 revert 可回。要您知道的三处:(a) 本 PR 改写了 #25422 一分钟前落地的一行「半标卡归所属车道席补齐」,析取 ③④ 回到分诊席,依据是您 16:44:57Z 的原话,不是静默覆盖;(b) SKILL.md 域车道「例外二」(自贴标签且三件齐 ⇒ 执行席直接认领)被撤,它不是批 #3 保留的那条「例外二」(那条是门禁翻 report-only,原文未动);(c) 应用仓没有分诊席,业务理由由仓席自己在首触里读,立卡人与判断人可能是同一席,您若要独立一眼,得把分诊席扩到应用仓,那是另一张卡。 - **席位意见**:席位契约复核两轮,首轮 6377274688 唯一 FAIL(全预贴卡没有 sweep 人口)已修,次轮 6377468190 在 head c9dae42 上 **PASS**,CI 47 项全绿;复核同时提醒:应用仓无分诊席(上面 (c))、`Premise:` 行未进 SKILL.md 认领模板(一行后续)、卡 #25490 派发前应重读正文(其六项中两项已被本 PR 做空)。 - **你要做的(一个动作)**:无。您 14:14Z 已在 Skills 席位线程授权「后续按 pm-dispatch 规则审核通过的都可以落地」;复核已 PASS、CI 全绿,现受您 2026-10-24 00:00Z「准备发版本,暂停合并新的pr」约束,解冻后由席位落地。 ## What changed Nine files: eight rule-text files under `.claude/skills/pm-dispatch/**` and two ceiling rows in `scripts/pm/check-skill-line-ratchet.mjs`. Every edited rule line is at or under 120 bytes. | File | Before | After | |:--|:--|:--| | `references/filing-gate.md` 立卡门 (64 → 68) | 「POST 前正文答三件:类别 ①–④、动手的读者、查重查询与命中数(含 closed)」; ③ and ④ on two lines | 四件 (类别、业务理由、动手的读者、查重查询与命中数); +5 lines: the field (who benefits, the scenario, the cost of not doing it; ③ answers with the maintainer's words, ④ inherits the parent; triage never writes it for the filer), the three triage exits (clear and on the North-Star direction ⇒ queue; missing or not holding ⇒ `Triage: returned`, card kept `finding`, re-read after the body changes, never written for them and never closed on it; a product trade-off or unclear direction ⇒ `needs-user-decision`, the 总监席 presents it), and the batch rule (≥10 cards at once ⇒ `Batch-of:` on the audit comment, the 总监席 samples ≤5 per source to the maintainer). Paid in place: ③ and ④ merged onto one line (110 bytes) | | `references/triage-duties.md` (103 → 103) | 析取 ② only; 「有 `domain:*` 无 pm-state,或 … 无 `priority:*` 的半标卡,归所属车道席补齐」 (#25422); 「自贴卡抽查:…同分钟,逐张核车道、补齐三件」; 「skills 车道 finding 由该席自分诊,全仓轮跳过」; pointer 「三答与配额见 filing-gate.md」 | 析取 ③ and ④ back on the triage seat with ②'s two-minute window; L17 「析取 ⑤:窗内新建且 `pm:queue`/`priority:*` 与建卡同分钟,照未分诊首触;⛔ 不凭 actor」 (the same-minute rule with its own sweep population; review fix `c9dae42` after FAIL-1 of 6377274688; the 「预贴标签只是建议」 clause lives in `SKILL.md` L172 and `execution-duties.md` L9), L19 五析取 sweep; 「每张卡欠一次分诊首触,车道 ⛔ 不自分诊」; +1 line 「首触先按业务理由三出口分流,再定级路由;批量卡审计评论带 `Batch-of:` 行」 after the pointer, which now names 四答 and 理由判据; paid by merging 「分类动作每张三选一…」 with 「裁定写方向、给六态之一」. Lines 78–103 (裁决恒归维护者人工, 人工地板, 风险判据, 工作量判据, 不呈, 例外一/二, 请示纪律) are byte-identical to `main` | | `SKILL.md` 域车道 (318, in place) | 「例外二:立卡人自贴而车道合上表、正文齐立卡门三件 ⇒ 执行席直接认领,分诊事后抽查」 | 「预贴标签只是建议,队列与级别只由分诊落笔(例外一同承);无分诊审计评论 ⛔ 不得认领」 | | `references/execution-duties.md` 候选 (in place) | 「自贴 `domain:*` 卡:合域表且齐立卡门三件 ⇒ 候选;缺一 ⇒ 挂 `pm:retriage`」 | 「无分诊审计评论的卡不是候选,预贴 `pm:queue` 视同无;例外一的 sub-issue 承父卡首触」 | | `references/lanes/triage.md` (in place) | 「范围 = … 的裸卡首触(定级、路由、三件)…」 | 「范围 = objectstack、objectui 每张卡首触(业务理由与定级)与跨车道查重;应用仓无分诊席」 | | `references/lanes/skills.md` (in place, 2 lines) | 「唯一例外:本车道 finding 自分诊,全仓轮跳过」 + the 仪器 question asked by the self-triage | the lane's findings take the triage seat's first touch like every card; the seat may attach evidence and its answer to 「仪器为车队服务」; a finding with no answer ⇒ the seat suggests p3 or not doing it, ⛔ never queues it itself; the grade stays with triage | | `references/cross-repo-coordination.md` (in place) | 「机械三务 = 自扫 sweep、自打 `type`、自做 `finding` 首触定级」 | 「… 自做首触(含 `finding` 与业务理由,判据评论同分诊)」: a single-lane repo's seat reads the business rationale in its own first touch and leaves the same audit comment | | `references/dispatch-runbook.md` (241 → 245) | 「## subagent 批派发前置:先把本地检出钉到 main」; 「sweep 析取①②」 | heading renamed in place 「## 派发前置:前提核实,再把本地检出钉到 main」; +4 lines at its head: the read-only subagent at the floor tier, run for a card-thread card before the candidate is handed to the coordinator; the three exits (holds ⇒ dispatch; false with a clear fix ⇒ correct the card then dispatch; cannot judge ⇒ decision inbox, no card-thread slot); 「改法明确 = 目标不变,只换落点或修法」 with the comment that records the old premise, the reading and the change before the body edit; scope cuts, downgrades and closes are the card's fate on the human floor, and the reading lands on a `Premise:` claim line. 「析取①–⑤」 in place | | `scripts/pm/check-skill-line-ratchet.mjs` | filing-gate.md 64, dispatch-runbook.md 241 | 68 and 245, each row's comment quoting the maintainer's word and the measured delta; neither file is a `CROSS_FILE_MOVES` participant. `triage-duties.md` is the declared source of the director.md move (120 → 103), so its ceiling is not raised: its one new line is paid in place | Acceptance reads on this head: `git grep -n '例外二' -- .claude/skills/pm-dispatch` → one hit, `triage-duties.md` L92 (the report-only valve batch #3 kept); `git grep -n '自分诊' -- .claude/skills/pm-dispatch` → two hits, both ⛔ lines; `git grep -n '三件' -- .claude/skills/pm-dispatch` → 出处三件 lines and `filing-gate.md` L30 「可推三件」 (the three answers triage may derive; the business rationale is the one it may not); `git diff main -- .claude/skills/pm-dispatch/references/triage-duties.md | grep '^[-+]' | grep -c '人工地板\|风险判据\|工作量判据'` → 0. ## Line budget | File | Lines | Ceiling | Net | |:--|--:|--:|--:| | `references/filing-gate.md` | 68 | 68 (was 64) | +4 (+5 −1), ruled raise | | `references/triage-duties.md` | 103 | 103 | 0 (+1 −1, 7 edited in place) | | `references/dispatch-runbook.md` | 245 | 245 (was 241) | +4, ruled raise; 2 edited in place | | `SKILL.md` | 318 | 318 | 0 (1 edited in place) | | `references/execution-duties.md` | 188 | 188 | 0 (1 edited in place; 187 → 188 is #25474's) | | `references/lanes/triage.md` | 7 | 7 | 0 (1 edited in place) | | `references/lanes/skills.md` | 32 | 33 | 0 (2 edited in place) | | `references/cross-repo-coordination.md` | 51 | 51 | 0 (1 edited in place) | The two raises are ordinary ruled raises under the ratchet header's maintainer exit: the ruling of record is the maintainer's word of 2026-10-23 quoted verbatim on card #25507 (「我说的是业务需求上的合理性,谁来判断」, 「立卡」, 「并且立刻派发」, 「而且分诊应该所有卡都分诊,因为有的车道在立卡的时候就打上了标签」) and in the seat's claim, comment 6370029859 (corrected by 6370094728); measured deltas +4 and +4, each row moved by exactly that. Paying them by deletion was tried first: every bullet pair in both files that would merge under 120 bytes was measured, one merge per file was available and both were taken; the remaining lines are the rule text the word orders. Widest edited line 120 bytes (`filing-gate.md` 四件 line). ## Gates On head `c9dae42` (the rule commit `7a21474`, the `main` merge `2ab989f` that brings #25474 and #25506 in, which touches `execution-duties.md` and `dispatch-runbook.md` in hunks this PR's diff does not, and the review fix `c9dae42` for FAIL-1 of contract review 6377274688: a card filed with `domain:*` + `pm:queue` + `priority:*` in the same minute matched none of disjuncts ①–④, so `triage-duties.md` L17 now names 析取 ⑤ 「窗内新建且 `pm:queue`/`priority:*` 与建卡同分钟,照未分诊首触;⛔ 不凭 actor」, L19 五析取, `dispatch-runbook.md` L64 析取①–⑤, all in place, 103/103 and 245/245 held), each exit code captured before any pipe: - The four the card names: `pnpm check:pm-skill-ratchet` ✓ (self-test green; `filing-gate.md` 68/68, `triage-duties.md` 103/103, `dispatch-runbook.md` 245/245, `SKILL.md` 318/318, `execution-duties.md` 188/188, `lanes/triage.md` 7/7, `lanes/skills.md` 32/33, `cross-repo-coordination.md` 51/51; the director.md move still reads +17 against its source's −17), `pnpm check:pm-skill-id-lint` ✓, `pnpm check:skill-frame-sync` ✓, `pnpm check:skill-frame-freshness` ✓. Also `pnpm check:pm-governed-prose` ✓ and `node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD` ✓, all re-run after the `main` merge. - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack <the nine changed paths>` derives 52 commands (the ratchet script's path pulls in the `scripts` roster families). After `pnpm install --frozen-lockfile`: **47 × exit 0; 3 × exit 2** (`check-closing-target-claim`, `check-partof-closing-keyword`, `check-single-claim-paths`: usage exits, they read a PR number or body from CI's environment; `check-partof-closing-keyword` re-run with this body as `PR_BODY` exits 0); **2 × exit 3** (`check:dts-closure`, `check:published-readme-exports`: PREREQUISITE, they read built `dist/`, which this card's text does not touch and this thread did not build). CI's check-runs on this head are the record either way. - No published package moves (`.claude/**` and one ceiling file), so `skip-changeset`. ## Ordering and open PRs - Built on `main` after #25422 (card #25414) and #25474 (card #25457) landed; `main` merged in at `2ab989f` (clean, no conflict). #25474's hunks (`execution-duties.md` 派发 L121–L130, `dispatch-runbook.md` 〈卡线程〉 L140) and this PR's (`execution-duties.md` L9, `dispatch-runbook.md` L64 and L149–L153) do not touch. - Card #25490 (queued, five stale triage lines in `seat-post-protocol.md`, `seat-lifecycle.md`, `cross-repo-coordination.md` L7) shares `cross-repo-coordination.md` with this PR; this PR edits L10 only. - The claim's file surface was widened by comment 6370094728 to the three in-place lines the 「所有卡都分诊」 rule needs (`execution-duties.md` L9, `lanes/skills.md` L22–L23, `cross-repo-coordination.md` L10); nothing outside the widened surface is touched. ## Acceptance notes - **Supersedes one line of #25422 and one of batch #3's untouched context, on the maintainer's later word.** #25422 (landed 16:46Z) sent the half-labelled disjuncts ③④ to the owning lane seat; the maintainer's 16:44:57Z sentence orders every card through triage, so ③④ return to the triage seat and the 自贴卡 spot-check becomes the rule. SKILL.md 域车道 例外二 (self-labelled ⇒ direct claim) is withdrawn for the same reason; it is not the `triage-duties.md` 例外二 (the report-only valve) that batch #3 item 1.2 kept, which is byte-identical. Both are said here so the reviewer can hold them against the word, not discover them. - **The `Premise:` claim line is prescribed in the runbook but not yet in the SKILL.md claim template** (318/318, no line in the file merges under 120 bytes). The claim-reading gates read only `Branch:`/`Clause-②:`/`Metadata-protocol:`, so an extra line is legal today; the template line is a one-line follow-up for the seat when SKILL.md next has a line to pay. - **Single-lane repos have no triage seat** (`cross-repo-coordination.md`, #25422): their `repo:*` seat reads the business rationale in its own first touch, so filer and judge can be the same seat there. Named in the 速读 for the maintainer; widening the triage seat to app repos would be its own card. - **A returned card is kept `finding`**, the label the state model already defines as 「待首次定级」, instead of a new label: it keeps the card out of the queue and the inbox and inside the finding round, which re-reads it only after the body changes. `sweep-stale-finding.mjs` strips `finding` only from cards that already carry a grade, so a returned card is never swept. - The body's first line is the HTML-comment attribution block the project session requires; `os-dev.md` 〈干净收尾〉 forbids HTML comments in GitHub text. Reported as a deviation, not hidden. - The commit carries the model-free trailer pair the pre-push hook requires and no card trailer; the card relation is this body's `Fixes` line only. - Opened through the fleet-write relay `pr_create`, so the author is `objectstack-fleet[bot]`; every later write to this PR goes through the relay too. - Governed surface `.claude/**` (Tier S): draft, awaiting the seat's `CONTRACT_REVIEW_TIER` review; landing by the seat under the maintainer's 14:14Z standing word in the skills seat thread; ⛔ not to be flipped ready, queued or armed by this thread. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_014kfbihfYYkWDWee41PM2Gn --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent df893f6 commit e073455

9 files changed

Lines changed: 51 additions & 22 deletions

File tree

‎.claude/skills/pm-dispatch/SKILL.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
169169
- 表未覆盖的包首次分诊时归类并走 PR 更新本表;新增或退役 `domain:*` 必须同批改本表。
170170
- 退役 `domain:*` 只退流通,对象保留;`domain:engine`/`domain:services`/`domain:cli` 读作 `domain:server`。
171171
- `domain:*` 只由分诊席产出,例外一:在飞卡衍生 sub-issue 承父卡域;无标签的卡 ⛔ 不得认领。
172-
- 例外二:立卡人自贴而车道合上表、正文齐立卡门三件 ⇒ 执行席直接认领,分诊事后抽查。
172+
- 预贴标签只是建议,队列与级别只由分诊落笔(例外一同承);无分诊审计评论 ⛔ 不得认领。
173173
- 跨域例外路径:拆不动的跨域单 PR 由分诊席指定一个车道 PM 认领,认领评论申报文件面。
174174
- 派发前在飞检查:读 `pm:dispatched` 卡认领评论申报的文件面,本地求交、不另发查询。
175175
- 跨域例外路径的范围加上该单文件面触及各域的在飞单;相交 ⇒ 排该 PR 之后串行或让行。

‎.claude/skills/pm-dispatch/references/cross-repo-coordination.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
- 多车道仓 `objectstack`、`objectui`:中央分诊是 `domain:*`/type/定级的唯一生产者。
88
- 单车道仓 `cloud`、`objectos`、`hotcrm`、`www.objectos.ai`;未来新仓默认此类。
99
- 单车道仓 `repo:*` 席自理机械三务,⛔ 不产 `domain:*`;决策卡入本仓收件箱,不落 objectstack。
10-
- 机械三务 = 自扫 sweep、自打 `type`、自做 `finding` 首触定级。
10+
- 机械三务 = 自扫 sweep、自打 `type`、自做首触(含 `finding` 与业务理由,判据评论同分诊)。
1111
- 新仓登记是一张清单:座位贴、标签、类别归属、门禁盘点、写身份锁移植(deny + hooks)。
1212
- 新仓三件:加入 `GOVERNED_REPOS`、安装车队 App、写 `lanes/<repo>.md` 宪章;应用仓无分诊席。
1313
- 新仓准入只问一句:真需要常设席位吗;hotcrm 宪章见 `references/lanes/hotcrm.md`。

‎.claude/skills/pm-dispatch/references/dispatch-runbook.md‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161

6262
## 分诊两级盘点细则
6363

64-
- 小时层三读法之一,sweep 析取①② = `list_issues` + `since`。
64+
- 小时层三读法之一,sweep 析取①–⑤ = `list_issues` + `since`。
6565
- 标签变更会刷新 `updated_at`,半标注照样入窗。
6666
- 之二,解锁扫描反演 = 逐仓 `state=CLOSED` + `since` 与 `Blocked-by:` 反向索引求交,命中走双查。
6767
- 之三,健康指标 = 逐标签 `perPage: 1` 只读 `totalCount`。
@@ -146,8 +146,12 @@
146146
- 终报 `needs_decision` ⇒ 席位附四维分析与推荐,并入决裁批次呈维护者裁;⛔ 无裁决线程。
147147
- 容器重启杀本地后台循环:席位等服务端信号(PR 订阅事件、座位 Routine),本地 watcher 可选。
148148

149-
## subagent 批派发前置:先把本地检出钉到 main
149+
## 派发前置:前提核实,再把本地检出钉到 main
150150

151+
- 派发前前提核实由只读子代理做(下限档);卡线程卡在交候选给 coordinator 之前做。
152+
- 成立 ⇒ 派;不成立而改法明确 ⇒ 改卡再派;判不了 ⇒ 入决策箱,⛔ 不占卡线程槽。
153+
- 改法明确 = 目标不变,只换落点或修法:评论记原前提、读数与改法,再改正文。
154+
- 砍范围、降级、关卡是卡的命运,归人工地板 ⛔ 不借改卡裁;读数落认领 `Premise:` 行。
151155
- subagent 读 PM 容器本地检出的 agent 定义与技能文本,不读 `origin/main`:过期则整批过期。
152156
- 每批派发前:`git -C <repo-root> fetch origin main && git -C <repo-root> checkout --detach origin/main`。
153157
- 游离 HEAD 使停止钩子跳过分支块,⛔ 不快进会话分支;只拒与切换冲突的脏改动,不拒分叉。

‎.claude/skills/pm-dispatch/references/execution-duties.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
- 整车道一次读全,本地求交:`list_issues` 带 `labels: [domain:X]` + 最小字段拿回全车道 open 集。
88
- 候选 = open、未 assign、无 `needs-user-decision`、无 `pm:retriage`;⛔ 排除三门皆无的 `tooling` 卡。
9-
- 自贴 `domain:*` 卡:合域表且齐立卡门三件 ⇒ 候选;缺一 ⇒ 挂 `pm:retriage`,⛔ 只评论不算。
9+
- 无分诊审计评论的卡不是候选,预贴 `pm:queue` 视同无;例外一的 sub-issue 承父卡首触。
1010
- 已排队父单的 open sub-issue 自动是候选,`pm:epic` 父单的子树除外。
1111
- 每张候选读全文 + 全部评论,写派发词前做决策复读:评论读到最后一页。
1212
- 维护者裁决逐字引入派发词裁决分区作约束,无则写明无裁决。

‎.claude/skills/pm-dispatch/references/filing-gate.md‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,18 @@
1515
- `reach:` 二选一:公开入口(HTTP/界面/`os validate`/保存)实测一次错误结果;或具名真实生产者。
1616
- 三种例外照立,要点首条「先测可达性」:可能泄露数据;发版固化的错误文字;维护者直派。
1717
- ② 只有维护者能做的决定,落卡即带「维护者速读」与四棱块。
18-
- ③ 维护者直派的任务,正文引其原话。
19-
- ④ 协调节点:跨仓/跨层父单与它的逐层子单。
18+
- ③ 维护者直派的任务,正文引其原话;④ 协调节点:跨仓/跨层父单与它的逐层子单。
2019
- ⛔ 不是卡:席位自己的失误、协议观察与「记住这条」,它们进座位贴或收班简报。
2120
- 「搭下个碰 X 的 PR」不算 `carrier:`;已落地工作欠的后续照立卡,⛔ 不按「不是卡」压下。
2221
- ⛔ 不是卡:丢卡重建(除非自身即 ①–④)、sweep 每 fire 重导的 pin/bump/卫生提醒。
2322
- ⛔ 不是卡:既有卡一条评论能承载的指针/知会/请求;那条评论即其记录。
2423
- UI 卡写明所需通用块或 spec 契约门;要产品命名 widget/dialog/hook/命名空间的卡退回重立。
25-
- POST 前正文答三件:类别 ①–④、动手的读者(哪席哪步)、查重查询与命中数(含 closed)。
24+
- POST 前正文答四件:类别、业务理由、动手的读者(哪席哪步)、查重查询与命中数(含已关)。
25+
- 业务理由:谁受益、什么场景、不做会怎样;③ 以原话代,④ 承父单;分诊 ⛔ 不代写。
26+
- 清楚且合北极星方向 ⇒ 照常定级入队;与「做出来的是什么」不符或无受益者 = 站不住。
27+
- 缺失或站不住 ⇒ `Triage: returned` 退回立卡人,留 `finding`,改后再读;⛔ 不代写不关卡。
28+
- 涉及产品取舍或方向不明 ⇒ `needs-user-decision` 入箱,总监席呈批;⛔ 不替维护者判需求。
29+
- 批量立卡(一次 ≥10 张):审计评论带 `Batch-of:` 行,总监席每源抽 ≤5 张呈维护者过目。
2630
- 缺件卡由分诊(单车道仓 `repo:*` 席)首触补齐卡与一次检索可推三件,写进定级评论并定级。
2731
- 补不齐(四类皆非)者才因缺件首触即关 not_planned,一行点名所缺。
2832
- 「动手的读者」与 Acceptance notes 同一问:说得出具体 PR 或人 ⇒ 写进去,说不出 ⇒ 不立卡。

‎.claude/skills/pm-dispatch/references/lanes/skills.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
- 额度耗尽豁免的地板是默认判断档,⛔ 不再往下。
2020
- 棘轮逐行付账,⛔ re-wrap 筹行;砍点逐条核幸存,被砍内容若在别处无家,砍掉就是丢规则。
2121
- 首触定级每轮;决策形状 ⇒ 决策箱带四棱块,⛔ 永不自裁。
22-
- 唯一例外:本车道 finding 自分诊,全仓轮跳过。
23-
- 自分诊问北极星「仪器为车队服务」的那一问:答不出 ⇒ 即刻 p3 或不做,⛔ 不入队。
22+
- 本车道 finding 同走分诊席首触,⛔ 不自分诊;席位可附证据与「仪器为车队服务」的答案。
23+
- 「仪器为车队服务」答不出的 finding ⇒ 席位建议 p3 或不做,⛔ 不自入队;定级归分诊。
2424
- 内部指令面中文,机器判据恒英文;认领前重读全线程;标签写 read-modify-write 加回读。
2525
- QA 波次由维护者手动触发,⛔ 不自启。
2626

‎.claude/skills/pm-dispatch/references/lanes/triage.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
见 triage-duties.md;本文是本席的岗位说明,现值状态恒在座位贴,⛔ 不迁入本文。
33

44
- 由维护者一句召唤到任一项目,默认同总监席项目;只写标签与审计评论,⛔ 无 PR、无认领。
5-
- 范围 = objectstack、objectui 的裸卡首触(定级、路由、三件)与跨车道查重;应用仓无分诊席。
5+
- 范围 = objectstack、objectui 每张卡首触(业务理由与定级)与跨车道查重;应用仓无分诊席。
66
- 每 fire 只取一个仓,两仓轮替、仓内最旧优先;最旧未路由超 4h 的仓本轮优先。
77
- 补半状态前先确认无人在动,读后新现六态属他席即停手;⛔ 不加第二席、不改 fire 频率。

‎.claude/skills/pm-dispatch/references/triage-duties.md‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,18 @@
1111
- 每条枚举比对返回数与 `totalCount`,不等 ⇒ 报 `sweep INCOMPLETE` 点名缺口,⛔ 永不报干净。
1212
- Backlog sweep 是常设职责,每 fire 扫任一析取命中的卡。
1313
- 析取 ①:全裸(无 `pm:*`、无 `needs-user-decision`、无 `domain:*`)。
14-
- 析取 ②:有 `pm:queue` 无 `domain:*`(仅多车道仓),只取 `updated_at` 早于 ~2 分钟。
15-
- 有 `domain:*` 无 pm-state,或有 `pm:queue`+`domain:*` 无 `priority:*` 的半标卡,归所属车道席补齐。
14+
- 析取 ②:有 `pm:queue` 无 `domain:*`(仅多车道仓);析取 ③:有 `domain:*` 无 pm-state。
15+
- 析取 ④:有 `pm:queue`+`domain:*` 无 `priority:*`;②③④ 只取 `updated_at` 早于 ~2 分钟。
1616
- 排除 `tracking`、`status:parked`、全部 `pm:seat` 贴、`qa-run` 记录。
17-
- 自贴卡抽查:窗内新建且 `domain:*` 事件与建卡同分钟,逐张核车道、补齐三件;⛔ 不凭 actor。
18-
- 半状态治愈积压 ② 最老优先、P0 嫌疑先行,⛔ 优先最新不适用。
19-
- 首触定级与两析取 sweep 每 fire 跑到清空:⛔ 无每轮总量预算,清得动就多清。
17+
- 析取 ⑤:窗内新建且 `pm:queue`/`priority:*` 与建卡同分钟,照未分诊首触;⛔ 不凭 actor。
18+
- 半状态治愈积压 ②③④ 最老优先、P0 嫌疑先行,⛔ 优先最新不适用。
19+
- 首触定级与五析取 sweep 每 fire 跑到清空:⛔ 无每轮总量预算,清得动就多清。
2020
- 窗口耗尽未跑完的,下一 fire 从标签状态断点续跑。
2121
- 排序:队列每轮清空时最新优先;清不空的那一刻起改最老优先。
2222
- 裸卡数 >15 ⇒ 下一 fire 整轮改域分批集中模式,每批 ≤5 张同族卡,照样跑到清空。
2323
- 紧急卡直接分诊:维护者点名或 p0 嫌疑 ⇒ 立即起默认判断档分诊子代理,不等定时轮。
2424
- 紧急分诊的授权面 = 分诊本身,⛔ 不写码不认领;产出落卡,与定时轮分诊同格式同效力。
25-
- 分类动作每张三选一,外加一个修复通道。
26-
- 裁定写方向、给六态之一。
25+
- 分类动作每张三选一,外加一个修复通道;裁定写方向、给六态之一。
2726
- 方向在 ADR/本卡裁决/不可重裁规则:贴 `check-prior-rulings.mjs` 的 `Prior rulings read:` 行,或不点。
2827
- `pm:queue` = 有具名落点或复现的具体缺陷,无可问之事;⛔ 工具/门禁修复不由此进。
2928
- `tooling` 入 `pm:queue` 仅凭三门之一:首行带 `Unblocks: #N`(open 产品卡)或点名所护的已发布面;
@@ -32,7 +31,8 @@
3231
- `needs-user-decision` = 设计卡、feature/契约形状提案、需要 appetite 的多周程序。
3332
- 碰迁移形状或删已发布能力也进决策箱;说明书脱节不进:有裁定出处才是 (b),否则改文档。
3433
- 决策卡速读居四棱块之上、同题,用业务语言先讲事情与选项,末句只问一字:A/B/C 或是否。
35-
- 首行写立卡门类别 ①–④;四类定义、⛔ 清单、三答与配额见 `references/filing-gate.md`。
34+
- 首行写立卡门类别 ①–④;四类定义、⛔ 清单、四答、理由判据与配额见 `filing-gate.md`。
35+
- 首触先按业务理由三出口分流,再定级路由;批量卡审计评论带 `Batch-of:` 行。
3636
- `finding` = 三类内待定级:(a) 可复现缺陷(复现或失败探针);(b) 违背已声明契约(引契约文);
3737
- (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## Acceptance notes`,⛔ 不立卡。
3838
- (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。
@@ -71,7 +71,7 @@
7171
- 在飞活性复查:认领逾一天无自有产出(commit/PR/评论)⇒ 敲门一次,首行键 `Owned-24h re-check:`。
7272
- 敲门后 `RECLAIM_AFTER_HOURS = 12` 小时无答复 ⇒ `label-write.mjs --release` 一笔中继释放,贴不动。
7373
- 释放:`Release:` 评论(出处三件)+ `Resume-from:` 行 + `pm:dispatched`→`pm:queue` + 清 assignee。
74-
- 车道席可附证据/前提重验,⛔ 不定级不改标;skills 车道 finding 由该席自分诊,全仓轮跳过。
74+
- 车道席可附证据/前提重验,⛔ 不定级不改标;每张卡欠一次分诊首触,车道 ⛔ 不自分诊。
7575
- 域分批与 sweep 打包晋级五条照用;每批约定与积压告警见 `references/dispatch-runbook.md`。
7676
- `pm:retriage` 每 fire 先答异议评论所求,答后同笔摘标;须维护者答的进收件箱,标照摘。
7777
- retriage 的异议判据认内容(有评论写明所求)⛔ 不认形状(有一条异议评论)。

‎scripts/pm/check-skill-line-ratchet.mjs‎

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,16 @@ export const CEILINGS = new Map([
418418
// tails leave the corpus; one rule per ≤120-byte line, no rule already stated in
419419
// SKILL.md). Landed count, headroom 0, same convention (lowering is always
420420
// legitimate).
421-
['.claude/skills/pm-dispatch/references/dispatch-runbook.md', 241],
421+
// Raised 241 → 245 by the pre-dispatch premise check (the same maintainer's
422+
// word of 2026-10-23, 「立卡」 and 「并且立刻派发」 on the proposal 「席位派发前先用
423+
// 子代理核实前提。核实成立就派;不成立、但改法明确的,就改卡后再派;判断不了的,
424+
// 转决策,不占卡线程名额」; quoted on card #25507, claim comment 6370029859):
425+
// four lines at the head of the pre-dispatch section — the read-only subagent
426+
// and when a card-thread card runs it, the three exits, what 「改法明确」 may and
427+
// may not change, and the `Premise:` claim line. Measured delta +4; the section
428+
// heading was renamed in place. Not a CROSS_FILE_MOVES destination, so no
429+
// `ruledRaises` record applies. Landed count, headroom 0, same convention.
430+
['.claude/skills/pm-dispatch/references/dispatch-runbook.md', 245],
422431
// Whole-text restructuring round (maintainer ruling 2026-08-23, Q1 = A):
423432
// mechanism detail extracted from SKILL.md — the four long state-table rows
424433
// (state-machine.md) and the clause-② review-chain operational detail
@@ -1341,7 +1350,19 @@ export const CEILINGS = new Map([
13411350
// 120-byte cap), with no restatement left in the section to pay with. Not a
13421351
// CROSS_FILE_MOVES destination, so no `ruledRaises` record applies. Landed
13431352
// count, headroom 0, same convention.
1344-
['.claude/skills/pm-dispatch/references/filing-gate.md', 64],
1353+
// Raised 64 → 68 by the business-rationale card (maintainer's word 2026-10-23,
1354+
// project chat, verbatim and untranslated: 「我说的是业务需求上的合理性,谁来判断」
1355+
// and 「立卡」 on the proposal that names the field and the three triage exits;
1356+
// quoted on card #25507 and in its claim, comment 6370029859). The text is the
1357+
// fourth filing-gate answer 「业务理由」 (who benefits, the scenario, the cost of
1358+
// not doing it) and the triage reading of it: clear and on the North-Star
1359+
// direction ⇒ queue; missing or not holding ⇒ returned to the filer, never
1360+
// written for them and never closed on it; a product trade-off ⇒ the decision
1361+
// inbox; batch filings sampled to the maintainer. Five lines landed, one paid
1362+
// in place (③ and ④ of the gate merged onto one line), so the measured delta
1363+
// is +4. Not a CROSS_FILE_MOVES destination, so no `ruledRaises` record
1364+
// applies. Landed count, headroom 0, same convention.
1365+
['.claude/skills/pm-dispatch/references/filing-gate.md', 68],
13451366
// The project layer above the seats (maintainer's word: ONE project form, the
13461367
// instruction line 「pm-dispatch <席位…>」 is the summon, seats are read from the
13471368
// seat posts' 🟢 line, takeover never waits for a walled account, mailbox PRs,

0 commit comments

Comments
 (0)