Skip to content

Commit 37ed9ae

Browse files
docs(pm-dispatch): the filing door — a card is created only for four classes, paced writes through claude[bot]; and the grading contract's measured gaps (#19570) (#19575)
Fixes #19570 Clause-②: no Tier H (`.claude/**` plus `scripts/pm/`) — the maintainer merges by hand. Draft; no ready, no auto-merge, no labels, no assignee written by this run. ## Provenance — the maintainer's own sentences, verbatim and untranslated > 19546 帮我派发处理 > 刚才 os-sam 又被封号了,也是因为分诊批量处理issue的时候,所以现在 issue 太多对于车队是负担。 19546 我希望在创建issue 的环节就卡死,没必要的issue就不要创建。 > 19546 卡片好像也丢了,要重新写。你创建一个新的吧,而且注意不要和之前的一模一样 > 之前封号的时候讨论过 issue 和 pr 应该使用 claude app 创建,名称应该是 claude(bot) The second sentence is quoted at the head of the new charter section itself (`references/filing-gate.md:10`), the fourth beside it (`:12`), so the door carries its own authority where it is read. ## Part A — the filing door, rule by rule, with the line that carries it | card rule | carried at | |:--|:--| | 1 · four classes or no card; the body's first line names the letter | `references/filing-gate.md:14` (headline), `:15`–`:18` (a/b/c/d), `SKILL.md:351`–`:352` (the door and its pointer, inside 〈分诊座位职责〉) | | 2 · named non-cards | `references/filing-gate.md:19`–`:24` — instrument misfire (pointing at `references/instrument-discipline.md`, which #19513 landed this morning), seat mistakes and lessons, a `finding` outside the three classes, a lost-card rebuild, anything a comment can carry, a sweep-derived pin/bump reminder | | 3 · three answers before POST | `references/filing-gate.md:25`–`:28`; mirrored in `references/core-rules.md:80` | | 4 · quota (three per fire; groups of ten for stock cleanup) | `references/filing-gate.md:29`–`:30` | | 5 · paced writes | `references/filing-gate.md:31`–`:33`; the invariant every seat reads is `SKILL.md:99` | | 6 · writes go through the App identity `claude[bot]` | `references/filing-gate.md:34`–`:36`; `SKILL.md:99` carries the prohibition beside the pacing numbers | | the sweep reconciliation (first-touch closes only clear what predates the door) | `SKILL.md:391` | Rule 6's consequence is stated where it bites: a user-class write is bound to its author and 404s with the account (`references/platform-readings.md:135` is the standing reading, and `:130`–`:134` record that the class is set by the Claude account's GitHub connection rather than by the session and can flip mid-session). So each seat reads back `user.type` on its first write of a fire, records a `User` reading on the seat post and files nothing new that fire. The claim carrier stays the assignee and attribution stays the session ID in the text — nothing else in the protocol moves. ## Part B — the grading contract's measured gaps, with the line that carries each | card item | carried at | |:--|:--| | false green counts one human catch as one measured cost | `references/filing-gate.md:43` | | 「仪器为车队服务」 has four answers, never two; a false red's standard cost is a seat complying | `references/filing-gate.md:44`–`:45` | | chain inheritance is an upper bound, the failure shape decides the grade inside it | `references/filing-gate.md:46` | | the three-state checklist test, state (2) inheriting the item's priority | `references/filing-gate.md:40`–`:42`; `SKILL.md:373` names the three states in the principal text | | North Star item 4: shipped faces only; a wrong sentence, not a missing one | `references/filing-gate.md:47`–`:48` | | the decision box re-reads the premise in the same act | `SKILL.md:365` | | `pm:retriage` judged by content, not shape | `SKILL.md:400` | | a zero carries a control, and the control proves reach, not that the probe is right | already on `main` at `SKILL.md:168` and `references/core-rules.md:45` — nothing added, this PR only extends it | | exact-name matching, not prefix; hit counts lie too | `references/filing-gate.md:60` | | the reach radius, two arms, and the two corollaries | `references/filing-gate.md:52`–`:56` | | a git-ignored directory is a convention; the three-part zero | `references/filing-gate.md:57`–`:59` | | one board enumeration per fire, statistics offline, patrol daily | `references/filing-gate.md:61` | `SKILL.md:170` is the pointer that puts all of the reading criteria in the reader's path, immediately under the 零命中须配同主体必中词 line the card names. ## Why the reading criteria are in a new reference file rather than `platform-readings.md` The card asks for them in `references/platform-readings.md`. Measured against that file as it stands, they cannot land there without either a ceiling raise or a deleted rule, both of which the card forbids: - `platform-readings.md` is 469 lines at ceiling 469 (headroom 0), and **zero** of its adjacent bullet pairs merge under the 120-byte cap (the smallest pair is 135 bytes). - `dispatch-runbook.md` is the same shape: 241/241, zero mergeable pairs, smallest 122 bytes. So the charter text lands in a new `references/filing-gate.md`, following the pattern `references/instrument-discipline.md` set on `main` this morning (PR #19513, merged as `3e8e2b0d`), and `SKILL.md` carries the pointers. One difference from that precedent, deliberately: this PR **adds the new file to the ratchet map** (`CEILINGS` and the table-row pin), at its landed count with headroom 0, because the map is an enumeration and a file merely absent from it is silently unratcheted. ## Ratchet — per-file counts, every added line paid in place | file | before | after | ceiling | how it was paid | |:--|--:|--:|--:|:--| | `.claude/skills/pm-dispatch/SKILL.md` | 815 | 819 | 819 | headroom 4 spent, plus three lines paid back: the three Acceptance-notes lines compress to one (their content is the door's rule 3), the two-level-inventory cadence lines merge into one, and the paced-writes invariant absorbs the identity prohibition without a new line | | `.claude/skills/pm-dispatch/references/core-rules.md` | 151 | 151 | 151 | net zero, two in-place amendments only (`:80` the three answers, `:84` the door) | | `.claude/skills/pm-dispatch/references/filing-gate.md` | — | 61 | 61 | new file, pinned at its landed count | | `.claude/agents/os-dev.md`, `AGENTS.md`, every other map entry | unchanged | unchanged | unchanged | not touched | No ceiling was raised. No rule was deleted to pay: every limb removed from `SKILL.md` is present in the new file (`git diff origin/main -- .claude/skills/pm-dispatch/SKILL.md` removes seven lines, and each one's content is at a line named above). ## Gates Derived on the final tree with `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` at `34a97c4` — 40 commands, identical to the list derived before the last two commits. All 40 were run with the exit code captured before any pipe; all exit 0. Named families: ``` check:pm-skill-ratchet exit 0 SKILL.md 819/819 · core-rules.md 151/151 · filing-gate.md 61/61 (+ self-test, 157 cases) check:pm-widening-tells exit 0 self-test, 525 cases (report-only family) check:pm-label-desc-cap exit 0 39 label descriptions, all at or under 100 characters check:pm-skill-id-lint exit 0 30 file(s) clean — no issue-number citation in the new charter text check:skill-frame-sync exit 0 77 markdown files scanned; the one declared copy of the decision frame is coherent check:nul-bytes exit 0 9134 text files, no raw control bytes check:pm-governed-prose exit 0 check:pm-governed-merges exit 0 check:pm-dispatch-gates exit 0 check:ratchet-remedy-authority exit 0 265 scripts swept check:self-test-wired exit 0 (the self-test-wired family, both arms) ``` Nine of the forty first returned exit 3, PREREQUISITE NOT MET, in a fresh worktree with no `node_modules`; they were re-run after `pnpm install` and, for `check:doc-formula-expressions`, after building `@objectstack/formula` and `@objectstack/lint` under the shared verify lock. Exit 3 is not a finding and was not read as one. ## Acceptance greps ``` $ git grep -n '三态\|会 fail' .claude .claude/skills/pm-dispatch/SKILL.md:373:- 清单项三态定级(会 fail / 步骤够不到 / 无项断言)与定级判据见 `references/filing-gate.md`。 .claude/skills/pm-dispatch/references/dispatch-runbook.md:149:…(pre-existing) .claude/skills/pm-dispatch/references/platform-readings.md:371:…(pre-existing) $ git grep -n '半径' .claude .claude/skills/pm-dispatch/SKILL.md:168, :169 (pre-existing, the line this PR extends) .claude/skills/pm-dispatch/references/core-rules.md:45 (pre-existing twin) .claude/skills/pm-dispatch/references/filing-gate.md:46, :48, :49, :50, :52 (the two arms and the corollaries) .claude/agents/os-dev.md:240, .claude/skills/pm-dispatch/references/platform-readings.md:280, .claude/skills/spec-property-retirement/SKILL.md:278, :281, :301 (pre-existing, unrelated) ``` The three states are at `references/filing-gate.md:40`–`:42`, which `SKILL.md:373` names. ## Collision with PR #19513 It merged while this branch was in flight (`3e8e2b0d`, then `origin/main` moved on to `b3615f1a4c`). `origin/main` is merged into this branch rather than proved clean against it. The one conflict was in the triage seat's filing rules and is resolved in favour of both: #19513's report-only-instrument line is kept verbatim and this branch's compressed Acceptance-notes question sits beside it. The door's instrument clause points at `references/instrument-discipline.md` instead of restating the no-dev half #19513 landed. ## Not in this PR — pending the maintainer's word Each needs the maintainer's own sentence on its own card (ruling #208 R6 — a new gate is not a maintenance edit): - a mechanical throttle inside `scripts/pm/post-stamped.mjs` and `scripts/pm/label-write.mjs` — this PR states the pacing numbers as charter only; - a refusal in `scripts/pm/label-write.mjs` when `domain:*` or `priority:*` is written with no pm-state label in the same write; - a `filed.log` receipt for newly filed cards; - the backup status written into the board snapshot itself. ## Changeset `skip-changeset` applies: nothing under `packages/**` is touched. The four paths are `.claude/skills/pm-dispatch/**` and `scripts/pm/check-skill-line-ratchet.mjs`, all on the fast track (internal protocol and PM tooling, not shipped by any package's `files[]`). ## 维护者速读(草稿) **改了什么**:给「立什么卡」装了一道门。今天起,一张 issue 只为四类事存在:有落点或能复现的产品缺陷、只有你能做的决定、你直派的任务、跨仓跨层必须的协调父单。其余一律不立卡 —— 仪器误报、席位自己的失误、三类外的 finding、丢卡重建、一条评论能承载的知会、sweep 每次都能重新推出来的提醒。立卡前必须在正文答三件:类别字母、谁会动手、查重跑了什么命中几条;缺一件分诊首触就关。配额:一席一轮最多三张。写节奏进章程:每笔间隔 3 秒、每账号每小时 40 笔封顶,429 就停写。写入身份恒走 App 的 `claude[bot]`,不走席位用户令牌。第二半是定级契约的十处实测缺口(假绿、四种答案、沿链继承是上界、清单三态、北极星第 4 条的两个限定、可达半径、零的三件判据等)。 **为什么改**:24 小时内两仓新立 183 张卡,其中 64 张当天就关、41 张是 finding;今天有两个席位账号因批量 issue 操作被封,它们立的卡跟着账号一起消失(本卡自己就是第二次重建)。成本已经不在开发队列,而在板面本身:每张开着的卡每轮都被每个席位扫一遍,每次写都是账号信誉的一笔支出。 **风险与代价(含回滚)**:门收紧后,真缺陷有被判成「不是卡」的可能 —— 对冲是类别 (a) 的定义没有变,仍是原来的 `pm:queue` 判据。识别口径变严会让分诊首触关掉一些格式不全的卡,这些卡重开免费。回滚是一次 `git revert`:本 PR 只改三份协议文本和一份门禁脚本的两行台账,不动任何运行时代码,回滚零迁移。 **席位意见**:(留空,待席位复审填写) **你要做的**:读一遍 `references/filing-gate.md` 的〈立卡门〉十六条,确认四类和两个数字(每轮三张、每小时四十笔、每笔三秒)是你要的口径;然后人工合并本 PR。另有四件被本 PR 明确挡在门外、等你一句话:label-write 的两道闸、filed.log、备份状态写进备份。 --- _Generated by [Claude Code](https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 4d0bd23 commit 37ed9ae

5 files changed

Lines changed: 85 additions & 17 deletions

File tree

‎.claude/agents/os-dev.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ model: opus
4848
- 其余 ⛔ 不立卡:观察、休眠、零拉动、死代码、未演练漂移、抛光、风格、nit、命名。
4949
- 它们进 PR `## Acceptance notes`;报告 `out_of_scope_findings` 逐条带 `class: a|b|c`+证据或 `carrier:`。
5050
- `carrier:` = 将碰该文件的 PR 或人,答不出写「承接者:无」;皆无 ⇒ 只进 Acceptance notes。
51-
- 立卡者不查重,只在卡面附 3–5 个查重词;查重归分诊席,⛔ 不扫 open issues、不拉板。
51+
- dev ⛔ 不查重,只附 3–5 个查重词;查询与命中数由立卡席写,⛔ 不扫 open issues、不拉板。
5252
- GitHub 写一律走 REST 代理(`curl` 带 `GITHUB_TOKEN`);归属 = 文本里的 session ID,非 `user.login`。
5353
- 写预算四笔:`git push`、一次 `POST /pulls`(draft)、`POST /issues/{n}/labels`、`os-dev-report` 评论。
5454
- 卡与线程只走 payload 档(公开仓单卡网页内嵌 JSON,拼写住 platform-readings)或单卡 REST 读。

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

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
9696
- 状态只经 GitHub 标签、assignee、正文行与 `pm:seat` 座位贴读写;循环须能从全新会话恢复。
9797
- 用户账号仅三用:assignee、授权批准、维护者亲手;批准账号永不跑席位或作其关联用户。
9898
- 内容写只走 REST 代理,⛔ 无 MCP 写;`user.login` 记令牌不记席位,归属 = 文本里的 session ID。
99+
- 写侧恒走 `claude[bot]` ⛔ 不走用户令牌;节奏 ≥3 秒/笔、每账号每小时 ≤40 笔,429 即停写。
99100
- GitHub 上一切新内容用英文;中文只留四通道(维护者速读、轮报、裁决引文、四维分析)。
100101
- 裁决引文照抄不译;四维中文只管新记录,存量英文块 ⛔ 不迁移;存量中文 ⛔ 不追溯改写。
101102
- 一 PM 恰管一车道,一车道由一组座位管,一席一贴;PM Y 管什么恰一个答案。
@@ -166,6 +167,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
166167
- 同仪器的控制词双零是仪器坏,⛔ 不读作缺席:换法重画再报;哑火仪器与干净结果同值。
167168
- 控制通过 ≠ 问题问对:零命中须写仪器可达半径与一个必在半径外的已知目标。
168169
- 半径按形态写(内容/文件名/声明/字段);所求在半径外 ⇒ 零非读数,换看得见它的仪器。
170+
- 零的三件判据、目录约定、精确名与枚举配额见 `references/filing-gate.md` 的〈读数判据〉。
169171
- 正命中须答谁打印/执行它,否则不证缺陷仍活;注释/文档块/夹具/修复的回归 pin 不算。
170172
- 他人据以行动的读数须带单位并答什么本来会让它不是这个值;递 dev 的恒标线索非答案。
171173
- ⛔ 自用即弃的探针不欠此税;「不是这个值」的答案取逐字工件或具名反例。
@@ -182,7 +184,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
182184
- dev 自己死了不等于维护者中止:子代理消失是正常死法,走接管(见认领节)。
183185
- 维护者中止只认原话或宿主回报 stopped by the user,⛔ 不据推断立无重启条件的门。
184186
- 共享基础设施修复入队前按症状复查 main,不按 issue 号。
185-
- 立卡者不查重、只附 3–5 查重词;真撞上重复,先比数值与作用域再决定关哪个。
187+
- 立卡者自跑查重并写下查询与命中数(含 closed);判重仍归分诊,比数值与作用域定关哪个。
186188
- sweep 晋级与立卡的前提要对此刻的 main;dev 带证据的零实现停手是好产出,不当返工计。
187189
- 裁决明令的动作实施中测出对向事实 ⇒ 照字面执行,被打断行为的 pin 反转为拒绝 pin。
188190
- 对向事实下 ⛔ 同 PR 不做任何 promote/回退;pin 是反转不是删除。
@@ -236,8 +238,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
236238
- 认领即跟到 MERGED:派发后发现的跨车道面(含 spec)不移卡,认领席借契约复审档隔离复核。
237239
- 复核记录带 `Implemented-by:`/`Reviewed-by:`,自审机读可见;`pm:retriage` 改路由只对未派发卡。
238240
- 转移落对方队列:目标仓立单带 `pm:queue`、出处行与一行可执行判据,依赖用 `Blocked-by:`。
239-
- 任何跨座位请求都是工作(要读数、要开卡、要授权):一律立卡进目标车道队列。
240-
- ⛔ 座位贴敲门或裁决评论永不作跨座位请求的唯一载体;评论是加速器不是记录。
241+
- 跨座位请求骑在它所关的既有卡上:请求席在自卡写 `Blocked-by:`,并在目标卡留一条评论。
242+
- 该评论点名席位与步骤;无既有卡承载且请求自身即立卡门 ①②④ 时才立新卡。
241243
- 等待方同一笔把自卡翻 `pm:blocked` + `Blocked-by:` 指向请求卡;⛔ 不设新标签新 sweep。
242244
- 目标仓不可达是读数缺口,不是落点:由可达席在目标仓立卡,此前请求记座位贴或协调卡。
243245

@@ -305,7 +307,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
305307
- `pm:epic` + `pm:queue` 同卡 = 半状态(保留兼移交);后者即已移交,取回走全套认领协议含重读。
306308
- 单车道仓(无 `domain:*`)开卡即认领合法;多车道仓域标签前置照旧,子树标记即保留。
307309
- 新立 spec/公共契约 sub-issue 照旧转 spec 座位队列,epic 侧写 `Blocked-by:`;衍生按三分留席。
308-
- 顺带发现 ⇒ 独立立单进修复落地仓,附查重词;⛔ 不借 sub-issue 通道塞未分诊卡进池子。
310+
- 顺带发现只经立卡门:三类内缺陷才立,带查询与命中数;其余进 Acceptance notes 或座位贴。
309311
- 每次分流留一行审计评论;父单维护 checklist 汇总评论,决策仍锚在具体 sub-issue。
310312
- 收尾四步、僵尸回收与领地防撞细则见 `references/seat-post-protocol.md`。
311313

@@ -317,8 +319,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
317319
- 工具加载纪律只约束分诊 fresh session 的开局;执行座位与 dev 不受约束。
318320
- 两级盘点:小时轮以 `since` 窗口读增量,锚 = 座位贴上一份收班简报的时间戳。
319321
- 查重缓存住席内:新会话全量拉,其后 `since` 增量;⛔ 不建分支、不共享、不依赖备份。
320-
- 每日一 fire 跑全仓全量对账并归集日频职责。
321-
- 选层按 fire 时刻,⛔ 不用计数器;简报写明本轮跑的层。
322+
- 每日一 fire 跑全仓全量对账并归集日频职责;选层按 fire 时刻 ⛔ 不用计数器,简报写明层。
322323
- 从不更新的卡不入窗;老化欠账归半状态巡查不归小时轮。
323324
- 每条枚举比对返回数与 `totalCount`,不等 ⇒ 报 `sweep INCOMPLETE` 点名缺口,⛔ 永不报干净。
324325
- Backlog sweep 是常设职责,每 fire 扫任一析取命中的卡。
@@ -347,6 +348,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
347348
- 碰迁移形状或删已发布能力也进决策箱;说明书脱节不进:有裁定出处才是 (b),否则改文档。
348349
- 决策卡落卡必带四棱卡面块与其上的「维护者速读」,⛔ 不留待有人接手再补。
349350
- 决策卡的速读同题,用业务语言先讲事情与选项,末句只问一字:A/B/C 或是否。
351+
- 立卡门四类:① 缺陷 / ② 维护者决定 / ③ 直派任务 / ④ 协调节点,⛔ 其余一律不立卡。
352+
- 首行写立卡门类别 ①–④;四类定义、⛔ 清单、三答与配额见 `references/filing-gate.md`。
350353
- `finding` = 三类内待定级:(a) 可复现缺陷(复现或失败探针);(b) 违背已声明契约(引契约文);
351354
- (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## Acceptance notes`,⛔ 不立卡。
352355
- (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。
@@ -355,20 +358,19 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
355358
- 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内;记为边界,⛔ 不扩类。
356359
- (a) 须今天可达,(c) 须具名生产者;观察、休眠、零拉动 ⛔ 不立卡、不进汇总卡、无配额。
357360
- 只报告的仪器,报错不配 dev:猜意图的只印读数,误报席位一句推翻,⛔ 不立卡不派 dev。
358-
- 判「进 Acceptance notes」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。
359-
- ⛔ 说不出(`.changeset/*`、无人在改的文档页、生成物、已扫完的批次)⇒ 兜底不成立。
360-
- 仍然关,但关闭理由必须写明「承接者:无」。
361+
- Acceptance notes 前先答「哪个 PR 或人会碰到它」;答不出 ⇒ 仍然关,理由写「承接者:无」。
361362
- 先修复:正文被 sanitizer 截断的卡不可派发,评论修复指令后跳过。
362363
- 停摆指令判据必须比其它分类更硬(双读取),事后证伪同处公开作废。
363364
- 决策箱勤务:入箱校验/补全四棱块、速读与 `Prior rulings on this card:` 行;存量卡低频回填。
365+
- 入决策箱那一笔连「前提今天还成立吗」一起现读;改状态只需现读卡。
364366
- 线程有 `Ruling:`/RULED 的卡再入箱,该行逐 id 各一句变化;缺行 ⇒ 拒入,`pm:retriage` 回立卡者。
365367
- `type`(Bug/Feature/Task)是分诊固定产出,分诊席唯一权威生产;立单者可预填,分诊校正。
366368
- 判据:违背已声明契约 ⇒ `Bug`,扩大接受集/公开面越出已声明 ⇒ `Feature`,其余 ⇒ `Task`。
367369
- `Bug` 无具名落点或复现路径不入 `pm:queue`(标记补复现)。
368370
- ⛔ 不回填存量 backlog 的 type;新卡即时打、存量卡下次碰到补。
369371
- 定级按北极星「优先级」1–3 条;首行 `Path: <定义项> | <清单项 id/缺项> | P<路步> | none`。
370372
- 定义项取北极星「做出来的是什么」或仪器卡的车队决定;无则关;`none` 非分诊缺口。
371-
- 清单项会 fail 才算断,继承其 `priority`;缺项先补账本;⛔「有人在等」不是定级判据。
373+
- 清单项三态定级(会 fail / 步骤够不到 / 无项断言)与定级判据见 `references/filing-gate.md`。
372374
- 「无则关」= 首触即关 not_planned,带理由与入队两条件,⛔ 不定 p3、不 hold;下行同此。
373375
- 产品仓 P0/P1 开着时,无解锁对象的 p2/p3 `tooling` 卡同样关。
374376
- 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题;父单是协调节点,永不派发。
@@ -386,7 +388,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
386388
- `Restart-when:` 命中同 closed 命中待遇:回队前 ref 重验再回队。
387389
- ⛔ 不设逐卡豁免评论;每 fire 定完全部未定级 finding,优先于旧卡重验。
388390
- 三类外不可逆或有硬时限(发版即固化、只被消费的文件、过窗不可补)⇒ 不关,报维护者。
389-
- 每批先验三类:三类外关 not planned(不等批准,维护者可否决重开);三类内无证据拒收。
391+
- 三类外首触关闭只清门前存量,关 not planned(不等批准可否决重开);三类内无证据拒收。
390392
- 三类内再过时前提检查,三选一:晋级 / 关闭 not planned / hold;判级只在此轮,不在立单时。
391393
- ⛔ 写入前对每张卡现读当前状态;任何列表快照读数一律作废。
392394
- ⛔ 带 `pm:dispatched` / assignee / 任何 open 或 merged PR 引用的卡,一律不动。
@@ -395,6 +397,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
395397
- 域分批与 sweep 打包晋级五条照用;每批约定与积压告警见 `references/dispatch-runbook.md`。
396398
- `pm:retriage` 每 fire 先答异议评论所求,答后同笔摘标;须维护者答的进收件箱,标照摘。
397399
- retriage 维持或改判皆由分诊席同笔摘标;挂标归异议席。
400+
- retriage 的异议判据认内容(有评论写明所求)⛔ 不认形状(有一条异议评论)。
398401
- 发版板 `target:<major>`:判据二元,⛔ 不做优先级渐变:不修它,当前 RC 能不能发。
399402
- 判阻塞四类:① 用户今天就撞的已发布面缺陷;② 公开契约 declared≠enforced。
400403
- ③ 存量数据/迁移形状(发布后修不回);④ 发布说明里要为它道歉的。
@@ -779,7 +782,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
779782
- `status: needs_decision` 时 `open_questions` 必须非空。
780783
- `out_of_scope_findings` 每条 `class: a|b|c`+证据,或 `carrier:`(承接者);皆无 ⇒ Acceptance notes。
781784
- dev 不立卡;ACCEPT 逐条一行 `filed #N`/`Acceptance notes`/`dropped — 因`;三类由席位立在修复仓。
782-
- 席位读 PR `## Acceptance notes`,实属三类的补立、归挂、附查重词;三类外已立卡关 not planned。
785+
- 席位读 PR `## Acceptance notes`,实属三类的经立卡门补立、归挂;门外已立卡关 not planned。
783786
- PM 核验它们存在,并把同轮并行报告互相对读:两个 dev 同一小时审相邻代码会立出孪生卡。
784787

785788
## 机械守卫索引

‎.claude/skills/pm-dispatch/references/core-rules.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
- 跨层功能点或跨仓 `Seam:` 卡拆成父单加逐层子单,下游带 `Blocked-by:`,上游未关 ⛔ 不派发。
5959
- pin 消费的仓派发前核 pin 是否已覆盖那个提交,发布包消费的仓判据是消费方可安装。
6060
- 上游未发版时转 hold ⛔ 不回队列;已验收产物流向另一仓由接受席立即立后续单。
61-
- 跨座位请求即立卡进目标车道,自卡翻 `pm:blocked`;阻塞项无主由被挡席认领,在飞即等。
61+
- 跨座位请求骑既有卡:自卡 `Blocked-by:` + `pm:blocked`,目标卡评论;无主被挡席认领,在飞即等。
6262
- 认领席跟到 MERGED,派发后的跨车道面不移卡、借隔离复核;新 spec 工作由 spec 席收口。
6363
## 域车道
6464
- 每个包恰好属于一个域,域标签 = 修复落地包的域,只决文件归属 ⛔ 非队列非优先级单位。
@@ -77,14 +77,14 @@
7777
- 换班报告默认零建议,只收原则错缺、可机械化项与平台事实变化三类。
7878
- 交接按收尾清单走完;强制接管 ⛔ 不取在飞卡,由原认领者跟完;归档自派会话不可移交。
7979
## 分诊座位职责
80-
- 执行席 ⛔ 跳过分诊动作,读到标签当既成事实;立卡者不查重、只附查重词。
80+
- 执行席 ⛔ 跳过分诊动作,读到标签当既成事实;立卡者只答类别/读者/查重命中数。
8181
- 两级盘点是小时轮读增量加每日全量对账,枚举须比对总数、不等即报不完整并点名缺口。
8282
- sweep 扫全裸卡、队列卡缺域或缺定级、域卡缺 pm 状态,排除跟踪、停放与协议载体卡。
8383
- 首触定级跑到清空 ⛔ 无总量预算、未跑完断点续跑;清得空最新优先,否则最老优先。
84-
- 裸卡超过十五张则下一轮改域分批集中模式,每批不超过五张同族卡。
84+
- 立卡门 ①–④ 外 ⛔ 不立卡;裸卡超十五张则下轮改域分批,每批不超过五张同族卡。
8585
- 有落点或可复现的缺陷、实现未被裁错的说明书脱节进 `pm:queue`;工具卡另须带解锁行。
8686
- 设计卡、契约形状提案、碰迁移形状或删已发布能力的进决策箱;无出处说明书脱节不进。
87-
- 立卡限三类:今日可达可复现缺陷、契约违背、具名生产者陷阱;截断卡发修复指令不派。
87+
- 门 ① 内 `finding` 限三类:今日可达可复现缺陷、契约违背、具名生产者陷阱;截断卡不派。
8888
- 三类边界:缺陷问错不问缺、文档同判;元数据须他人再作者化;引向更糟的警告在类外。
8989
- 类型字段由分诊席唯一生产,违背已声明契约是缺陷、扩出已声明是功能、其余是任务。
9090
- 缺陷卡无具名落点或复现路径不入队列 ⛔ 不回填存量;每张卡留一条英文审计评论。

0 commit comments

Comments
 (0)