Skip to content

Commit 1a02ef1

Browse files
claude[bot]claude
andauthored
pm-dispatch: reconcile the quota rows with the identity-bound rate limit; merged-write rule; account-suspension recovery readings (#18242)
Fixes #17374 Second half of the shared-identity rate-limit card. The first half (PR #17860, landed as `ed8dea17b`) placed expectations 1 and 4 — the identity-bound rate-limit rows in `references/rest-channel.md` and the destroyed-evidence NOT MEASURED line in `.claude/agents/os-dev.md`; expectation 5 is met by the half-state patrol's H40 row. This PR lands what was deferred behind same-file serial: expectation 2 (merged writes), expectation 3 (the account-suspension recovery steps as readings), the reconciliation of the two quota rows that still prescribed the same-identity channel switch, and the reviewing seat's NOT MEASURED line. With this the card's five expectations are all placed. F5 (GitHub App / machine users) is the maintainer's infrastructure decision and not this card's; the disciplines here hold independently of it. Clause-②: no — no published `skills/**` file moves; no operator or contract semantics. skip-changeset — nothing published moves (`.claude/**` and `scripts/pm/**` sit outside every package's `files[]`). ## What changed — 4 files, +60 / −7, head `694b1d2` on base `b3b43b6` ### `references/platform-readings.md` — 454 → 459 (+5 under the standing one-file exception) Two quota-block rows re-conditioned in place (line-neutral; they pay nothing and buy nothing): - 「限流、403、传输失败都要试过另一侧才说得出我没手段。」 → 「403 与传输失败要试过另一侧才说得出我没手段;限流先比身份,同 ID 的他侧不是手段。」 (114 B) - 「⇒ MCP 限流先探 REST 再定退避,⛔ 不据一侧限流把整个平台的写都停掉。」 → 「⇒ MCP 限流先 `GET /user` 比 ID:同 ID 的 REST 满额不是退路,写排队到重置;异 ID 才是。」 (109 B) Until this PR both rows told a seat to do the exact same-identity channel switch that `rest-channel.md`'s identity-bound rows (landed by the first half) forbid. The 403 and transport halves stay as they were: those are per-side readings, and the row above them (「任一侧的拒绝只是那一侧的读数」) is untouched. Reads are untouched too — the row below (「MCP 的读限流与写限流彼此独立」) still governs them, and the identity test is itself a read on the other side. 「写排队到重置」 points at the standing queue-into-the-patrol-word row (:159) rather than restating it. Five new rows after the retry-alignment row (the end of the quota-exhaustion prescriptions), one measured event per row, each under 120 B: 1. 「停用报文 account was suspended 遍及 /rate_limit 与 git,不给理由;非会话门 403、非限流。」 (108 B) — the recognition reading: the third 403 shape beside the session gate and the rate limit, which is what tells a seat the four steps below now apply. 2. 「账号停用销毁其名下 PR、卡与评论;分支与 commit 属仓库照留远端 ⇒ 代码从未真丢。」 (112 B) — F3 step 1. 3. 「被销毁的 PR 仍占分支名:API 答 404,同名开新 PR 仍被拒 ⇒ 同批 commit 推新分支名再开。」 (114 B) — F3 step 2. 4. 「本地对象库是最后备份:复核时 fetch 过的每条分支,其 head 在停用后仍在本地可推。」 (110 B) — F3 step 3. 5. 「重建 PR 正文自报四件:head 逐字节同、无 rebase/amend/squash、数字出自旧基底、CI 为准。」 (113 B) — F3 step 4. Dedup table for the exception (候选/落地/已有/拒收): candidates 5 / landed 5 / already present 0 / refused 0. The family grep `suspended`, `停用`, `销毁`, `幽灵`, `重推`, `重建`, `对象库`, `分支名` on `origin/main` at `b3b43b6` hits only the Routine-rebuild rows (:445–:446, :453), the issue-transfer rebuild row (:144) and the landing criterion (:366); none carries any of the five, and the later suspension-row family the dispatch word anticipated does not exist on `origin/main`. Ratchet: ceiling 454 → 459 in `scripts/pm/check-skill-line-ratchet.mjs`, with a FIFTEENTH `ruledRaises` record citing the standing exception verbatim — 「唯一例外:`platform-readings.md` 增量抬上限到落地行数,免决策卡,记 `ruledRaises` 引常设裁决。条件:席位验收评论逐条核实、去重计数(候选/落地/已有/拒收)、一事一行、不计重排」 — and the increment accounted for line by line beside the ceiling. The cross-file-move arithmetic re-derives unchanged (`+11 against a net source decrease of 20`). ### `SKILL.md` 〈平台读数纪律〉 — 812 → 812 (equal-line, paid by density) Added as the section's last line, beside the pre-dispatch `rate_limit` read: - 「写少而大:同卡同轮结论合成一条评论,⛔ 不放慢单笔、不攒着一次性发;写量按身份计。」 (117 B) Paid by folding the two maintainer-abort lines into one: 「维护者中止只在有显式信号时成立:原话,或宿主回报 stopped by the user。」 + 「⛔ 不据推断立一道没有重启条件的门;判据是信号不是症状。」 → 「维护者中止只认原话或宿主回报 stopped by the user,⛔ 不据推断立无重启条件的门。」 (108 B). Every operative clause survives (explicit signal only; no inference-built gate without a restart condition); 「判据是信号不是症状」 is the first clause said twice. `references/core-rules.md` :46 already digests this pair in one line, so the mirror is unchanged (151 / 151). A2 measured on `b3b43b6`: `grep -c '合并\|少而大\|节流' SKILL.md` counts 0 lines in the write-merging sense — every 合并 hit is merge-queue / merged-PR vocabulary — against control `限流` 3 lines. The quota rows in `platform-readings.md` (:103–:105: the per-minute secondary limit, the ~1 s spacing between mutations, the same-second burst that hits the minute wall) answer the BURST half of the card's shape and not the MERGE half: nothing on the seat surface said fewer-and-larger, and nothing said not-slower. The dev side already carries a merged budget (`os-dev.md` 写预算四笔); the seat side now carries this line. ### `references/review-checklist.md` 〈测试与门禁证据〉 — 77 → 77 (equal-line, paid by density) - 「复核项证据已销毁(评论、卡或 PR 答 404)⇒ 记 NOT MEASURED 并写因,⛔ 不记通过或无旗。」 (113 B) — directly under the INCONCLUSIVE row, so the reviewer's verdict vocabulary now has all three: INCONCLUSIVE (the positive control failed), NOT MEASURED (the evidence is destroyed), 不入账 (a dead-tree reading). A5 measured: `grep -c 'NOT MEASURED\|销毁\|404'` on `review-checklist.md` and on `contract-review.md` at `b3b43b6` = 0 and 0 (control `INCONCLUSIVE` = 2 in review-checklist), so the reviewer had no line to read; the first half's line lives in the dev's file. Paid by folding the dead-code deletion pair (:75–:76) into 「以死代码或不可达为由的删除,PM 先在 `origin/main` 用带引号精确名核引用面,再 ACCEPT。」 (113 B): the rule survives whole and the deleted half (「这是断言不是 diff 里的事实,而这一查只花十秒」) is rationale. Face note: the claim comment's file surface names `platform-readings.md`, `SKILL.md` and `core-rules.md`; the dispatch word's A5 asks for exactly this one reviewer line in `review-checklist.md` or `contract-review.md`, inside the ratchets, and this is the one deviation from the claim's list. All 11 open PRs' file lists were read at 2026-09-15T02:46Z, immediately before this PR was opened; none touches any file in this diff. ## Acceptance against the card 1. **Positive** (client A refused, client B has quota): the quota section itself now answers 停 for the same user ID — 「限流先比身份,同 ID 的他侧不是手段」 and 「同 ID 的 REST 满额不是退路,写排队到重置」 — and 「异 ID 才是」 only when `GET /user` answers a different id. Measured on this container: `GET /user` on the REST credential answers `os-zhuang` id 277994282, the same login as the card's assignee, so PM and dev are one identity in this seat — exactly the case the rule is for. 2. **Negative control** (normal-quota writes unaffected): every changed rule fires only on a refusal, a suspension or a destroyed record; the new SKILL.md line says 「⛔ 不放慢单笔、不攒着一次性发」 in so many words, so it can neither slow a write nor push a seat toward the burst shape. No transport is banned, no 「下次注意」 is written, no green-widening exemption is introduced — the card's three 「不要走的路」 hold. 3. **Rehearsed recovery**: on record rather than staged. The incident's own recovery is the rehearsal — PRs #17332, #17334, #17336 and #17339 were rebuilt on new branch names from the same commits with byte-identical heads, each self-reporting the four items row 5 now spells. A staged suspension is not something this PR can or should perform; the five rows are the steps that recovery took, written so the next seat does not rediscover them. 4. **Ablation** (grep line counts, `origin/main` at `b3b43b6` versus head `694b1d2`, with a lit control in the same file): - `platform-readings.md`, pattern 停用 / 销毁 / 新分支名 / 对象库: 0 → 4 (row 5's term 自报 is excluded because :220 already carries it in another sense; `自报四件` alone reads 0 → 1); control `限流` 10 → 11. - `platform-readings.md`, pattern 比 ID / 比身份: 0 → 2; the deleted instruction 先探 REST / 整个平台的写: 1 → 0. - `SKILL.md`, pattern 少而大 / 攒着 / 按身份计: 0 → 1; control `限流` 3 → 3. - `review-checklist.md`, pattern NOT MEASURED / 销毁: 0 → 1; control `INCONCLUSIVE` 2 → 2. Remove the new text and the positive case is again answered only by `rest-channel.md`, with the quota section arguing the other way. ## Mechanism assumptions from the dispatch word, measured - A1 — confirmed: :123 and :126 on `b3b43b6` prescribed the switch; both re-conditioned in place as above. - A2 — measured as above; a rule line was owed, and it lands in 〈平台读数纪律〉. - A3 — the family grep found no suspension rows on `origin/main`; all four F3 steps plus the recognition reading were absent and land. - A4 — recorded under acceptance 3. - A5 — measured as above; the reviewer line lands in `review-checklist.md`. ## Gates — head `694b1d2` `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths; change set taken from git off merge base `b3b43b6ea`, 4 committed paths) derived 40 commands. 39 of the 40 ran in the foreground with the exit captured by redirect before any pipe, and every one exits 0; the 40th is the tool's own self-test, run detached (below). `--ran` on the exit-carrying record reconciles 40 derived / 40 run / 0 unrun. - `check:pm-skill-ratchet` (self-test + gate): `cross-file move into platform-readings.md: +11 (314→459, less 134 lines of ordinary ruled raise) against a net source decrease of 20` · `declared cross-file moves: 1, total ceilings down 9 lines`. - `check:pm-dispatch-gates` (the tool's own self-test, 1723 cases): detached per its header's foreground-cap warning, waited on in the foreground with `tail --pid`; verdict line `✓ dispatch-gates self-test: 1723 cases pass.` - The three lint-package families ran after `pnpm --filter "@objectstack/lint..." build` under `os-verify-lock.sh` (VERDICT command-exit 0, held 220 s, waited 0 s). - `check:pm-skill-id-lint`, `check:skill-frame-sync`, `check:nul-bytes`, `check:ratchet-remedy-authority`, `check:pm-governed-prose`, `check:required-contexts`: exit 0. - Three roster families the derivation marked as sitting under `scripts/` beside this diff were run in addition: `check-published-list-mirrors`, `check:pm-label-desc-cap`, `check-skills-token-ratchet` — all three exit 0. - Not measured locally, CI's: the 3 workflow-value families, the Test Core job, the 11 wide-population families, the 14 changeset-pending families (skip-changeset), the remaining artifact rosters; repo-wide `pnpm lint` not run. - Control-byte scan on the four files: 0 hits. No changed line over 120 B in the three markdown files. No card number in any added operative line. ## Acceptance notes - noted, not filed (承接者: the skills seat, holder of the same-batch tension ruling): `platform-readings.md` :97 「⛔ 不据限流报文里的 user ID 推池子跨席共用」 and :143 「报文里的 user ID 只是报文」 stay as written — the ratchet's own record says both hold pending a discriminating read, and the first half's `GET /user` comparison is that read (the id in the refusal text names the identity and says nothing about cross-seat pools), so :143's 「只是报文」 could become 「只标身份」 at equal bytes in a later density pass. Not edited here because the ruling says neither is. - noted, not filed (承接者: none): `core-rules.md` 〈平台读数纪律〉 carries no digest of the new write-merging line; the mirror's own header says it adds no rules, and the claim conditions a mirror edit on a core clause moving, which none did. ## 维护者速读(草稿) **改了什么**:三份 PM 席位的规则/事实文件加一份门禁台账。① 事实表 `platform-readings.md` 配额段:把两条还在教席位「限流了就换另一条通道继续写」的行改成「先比身份,同一身份就停写排队」,并新增五行记下账号被停用时的识别信号与恢复步骤(分支和提交不丢、被销毁的 PR 仍占着分支名要换名重推、本地对象库是备份、重建的 PR 要自报)。② 席位规则 `SKILL.md`:加一行「写少而大」—— 同一张卡同一轮的结论合成一条评论,既不放慢单笔也不攒着突发,写入量按身份合计;用合并两行既有规则付账。③ 复核清单:复核项的证据被销毁时记 NOT MEASURED,不记通过;同样以合并两行付账。④ 棘轮台账:`platform-readings.md` 上限 454 → 459,按常设例外记录。 **为什么改**:这是 2026-09-10 整个 fleet 被停用的事故复盘卡的后半。前半已把「限流绑定身份」写进通道表;但事实表里还留着相反的指引,席位照读就会重演事故里的那个动作。恢复流程当时是现场摸索出来的,没写下来下次还要摸一遍。写入合并的口径此前完全空白。 **风险与代价(含回滚)**:纯文本规则与事实,不碰任何发布包,不改 CI 行为。代价是 `platform-readings.md` 多 5 行(每行 ≤120 字节,一事一行),其余三份文件行数不变。回滚 = revert 本 PR 的一个 commit,无迁移。误读风险:「写排队到重置」不是「所有写变慢」,新行已明写不放慢单笔。 **席位意见**: **你要做的**:审批本 PR(受管面,需要你的 approve 后由席位入队);若认为「写量按身份计」或恢复五行的措辞有误,直接改文字或留言,席位按你的话修。 --- _Generated by [Claude Code](https://claude.ai/code/session_01HZfg2AwVX191qCizp88gQr)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 48a93fb commit 1a02ef1

4 files changed

Lines changed: 60 additions & 7 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
172172
- advisory 门禁红着进 main 是共享损伤,任何车道发现都立即止血并立单。
173173
- main-red 的跳队例外与事故锚卡约定见 `references/landing-operations.md` B 节。
174174
- dev 自己死了不等于维护者中止:子代理消失是正常死法,走死认领回收。
175-
- 维护者中止只在有显式信号时成立:原话,或宿主回报 stopped by the user。
176-
- ⛔ 不据推断立一道没有重启条件的门;判据是信号不是症状。
175+
- 维护者中止只认原话或宿主回报 stopped by the user,⛔ 不据推断立无重启条件的门。
177176
- 立卡者不查重,只附 3–5 个查重词;分诊按词查自有列表,零命中须控制词背书。
178177
- 共享基础设施修复入队前按症状复查 main,不按 issue 号。
179178
- 真撞上重复,先比数值与作用域再决定关哪个。
@@ -183,6 +182,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
183182
- 冲突立成 `needs-user-decision` 卡,该 PR 不挂 auto-merge 留异议窗口。
184183
- 读序 git、payload、REST、MCP;REST 可达性逐会话探一次;通道对照见 `references/rest-channel.md`。
185184
- 派发前读一次 `rate_limit`,余量装不下整批就减批,⛔ 不靠撞墙发现。
185+
- 写少而大:同卡同轮结论合成一条评论,⛔ 不放慢单笔、不攒着一次性发;写量按身份计。
186186

187187
## 多仓协调
188188

‎.claude/skills/pm-dispatch/references/platform-readings.md‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,10 @@
120120
- REST 写侧经出口代理必带 `Content-Type: application/json`,否则代理回 415 且一个字节都没写。
121121
- 判别式:该 415 的 `documentation_url` 指 Claude Code 不指 GitHub ⇒ 代理拒,不是 GitHub;四端点实测。
122122
- 两通道的信封在配额、权限、传输三样上都不同 ⇒ 任一侧的拒绝只是那一侧的读数。
123-
- 限流、403、传输失败都要试过另一侧才说得出我没手段。
123+
- 403 与传输失败要试过另一侧才说得出我没手段;限流先比身份,同 ID 的他侧不是手段。
124124
- 读数:`POST /actions/runs/{id}/rerun-failed-jobs` REST 回 403 而 MCP 回 201。
125125
- job 日志只有 MCP 取得回,REST 侧转 blob 存储 `http=000`;同分钟 MCP 限流而 REST core 满 15000。
126-
- ⇒ MCP 限流先探 REST 再定退避,⛔ 不据一侧限流把整个平台的写都停掉。
126+
- ⇒ MCP 限流先 `GET /user` 比 ID:同 ID 的 REST 满额不是退路,写排队到重置;异 ID 才是。
127127
- MCP 的读限流与写限流彼此独立,两向各有实测 ⇒ 一侧被拒 ⛔ 不推另一侧也不可用。
128128
- REST 档以本班 repo-scoped 探针绿为前提;403 会话改按降级梯读。
129129
- 容器 curl 的 REST 通道令牌按会话定:installation(`claude[bot]`)或 user-to-server(用户),core 15,000/时。
@@ -158,6 +158,11 @@
158158
- 中途撞限流的 dev 完不成强制查重,只能把发现交回 PM 代为归档,⛔ 不盲目开卡。
159159
- 打满时待执行写排成有序清单挂进巡逻词,不靠记忆;恢复窗口按序连清。
160160
- 重试对齐整点(REST core 整点重置)优于指数退避,⛔ 绝不忙轮询。
161+
- 停用报文 account was suspended 遍及 /rate_limit 与 git,不给理由;非会话门 403、非限流。
162+
- 账号停用销毁其名下 PR、卡与评论;分支与 commit 属仓库照留远端 ⇒ 代码从未真丢。
163+
- 被销毁的 PR 仍占分支名:API 答 404,同名开新 PR 仍被拒 ⇒ 同批 commit 推新分支名再开。
164+
- 本地对象库是最后备份:复核时 fetch 过的每条分支,其 head 在停用后仍在本地可推。
165+
- 重建 PR 正文自报四件:head 逐字节同、无 rebase/amend/squash、数字出自旧基底、CI 为准。
161166
- 文档载明未实测:条件请求答 `304` 不计 core 池。
162167
- 公开仓零配额读法两档,payload 档优先 —— 只有 body 精确。
163168
- 网页档可达性逐会话逐 URL 形状分叉:一处容器 `/actions/**` 与 api. 回 403,另一处网页全 200。

‎.claude/skills/pm-dispatch/references/review-checklist.md‎

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

3333
- 测试证据要有真实命令与通过输出,⛔ 不接受一句 tests pass。
3434
- 测量类交付先看阳性对照:对照本身失败 ⇒ 该读数记 INCONCLUSIVE,⛔ 不入账。
35+
- 复核项证据已销毁(评论、卡或 PR 答 404)⇒ 记 NOT MEASURED 并写因,⛔ 不记通过或无旗。
3536
- 引 entry `.d.ts` 逐字节相同的读数必须同块带阳性对照,它只判名字集。
3637
- 对 barrel 已转发符号的形状恒无效:`export *` 与 `export type { X } from` 都不复述形状。
3738
- 判据是同块点名声明该符号的模块那份移动了的产物,或具名探针;缺则记 INCONCLUSIVE。
@@ -72,6 +73,5 @@
7273
- 但推翻过程必须写在 PR 正文并附 main 语料上的实测信噪比,否则按 REWORK 要证据。
7374
- `+0/-0` 不是空文件的证明:NUL 字节让 git 当二进制渲染,还让文件对 grep 隐身。
7475
- 先疑 NUL,以 blob 定论 `git show <sha>:<path> | wc -l`,要求源侧写转义序列。
75-
- 以死代码或不可达为由的删除,PM 在 `origin/main` 上用带引号精确名自己核一次引用面。
76-
- 核过再 ACCEPT:这是断言不是 diff 里的事实,而这一查只花十秒。
76+
- 以死代码或不可达为由的删除,PM 先在 `origin/main` 用带引号精确名核引用面,再 ACCEPT。
7777
- 卡的交付物含系统性 sweep 时,ACCEPT 评论把范围外产出成组列出并写明 sweep 判据。

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

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -905,7 +905,38 @@ export const CEILINGS = new Map([
905905
// width 134 B), and the two neighbours the row joins offer 37 and 6 spare
906906
// bytes against its 115 bytes of content; re-wrap funding is refused per the
907907
// 2026-08-17 rule in any case. Landed count, headroom 0, same convention.
908-
['.claude/skills/pm-dispatch/references/platform-readings.md', 454],
908+
// Raised 454 → 459 by the FIFTEENTH readings increment, again under the
909+
// STANDING one-file exception quoted above rather than a fresh decision
910+
// card, and again recorded as a `ruledRaises` record citing it. Spent at ONE
911+
// line per deduplicated reading, each written in this file's voice, all five
912+
// from one measured account-level incident and its measured recovery: the
913+
// suspension signal is `account was suspended` on every endpoint including
914+
// `/rate_limit` and on git, with no reason given — a third 403 shape beside
915+
// the session gate and the rate limit (+1); a suspension destroys the
916+
// account's PRs, cards and comments while every branch and commit stays on
917+
// the remote, because those belong to the repository (+1); a destroyed PR
918+
// still holds its branch name — the API answers 404 yet a new PR on the same
919+
// branch is refused — so the same commits go up under a NEW branch name (+1);
920+
// the local object store is the last backup — every branch a reviewer fetched
921+
// to verify on the tree still has its head locally after the suspension, and
922+
// it pushes (+1); and a rebuilt PR self-reports four things in its body:
923+
// byte-identical head, no rebase/amend/squash, numbers from the old base, CI
924+
// decides (+1) = +5 exactly. Candidates 5 / landed 5 / already present 0 /
925+
// refused 0 — the family grep (suspended / 停用 / 销毁 / 幽灵 / 重推 / 重建 /
926+
// 对象库 / 分支名) on `origin/main` hit only the Routine-rebuild and
927+
// issue-transfer rows, none of which carries any of the five.
928+
//
929+
// TWO corrections are paid in place and buy nothing: the quota block's
930+
// 「限流、403、传输失败都要试过另一侧才说得出我没手段」 row and its 「⇒ MCP 限流先探
931+
// REST 再定退避」 conclusion, which until this increment instructed the very
932+
// same-identity channel switch that `rest-channel.md`'s identity-bound
933+
// rate-limit rows forbid; both are re-conditioned in place, line-neutral, on
934+
// the `GET /user` identity test, with the 403 and transport halves kept as
935+
// the per-side readings they are. Nothing else was paid in place: the fourth
936+
// increment MEASURED zero line-neutral folds among this file's adjacent rule
937+
// pairs, and re-wrap funding is refused per the 2026-08-17 rule in any case.
938+
// Landed count, headroom 0, same convention.
939+
['.claude/skills/pm-dispatch/references/platform-readings.md', 459],
909940
// Per-operation REST/GraphQL/git channel mapping — which fleet operation has
910941
// a REST twin (each row executed in a real session, provenance date carried
911942
// per row), the handful that are GraphQL-only, and the queue-routing
@@ -1560,6 +1591,23 @@ export const CROSS_FILE_MOVES = new Map([
15601591
date: '2026-09-14',
15611592
delta: 1,
15621593
},
1594+
{
1595+
// The FIFTEENTH increment, under the same STANDING exception — the
1596+
// same words again, for the same reason: a record that quotes no
1597+
// ruling is RED and each record stands alone. The +5 is accounted for
1598+
// line by line beside this entry's ceiling above; the exception's
1599+
// conditions (per-item verification and the candidate / landed /
1600+
// already-present / refused counts) are carried by the raising PR's
1601+
// body and the seat's ACCEPT.
1602+
ruling:
1603+
'the standing one-file exception for'
1604+
+ ' `.claude/skills/pm-dispatch/references/platform-readings.md` — pm-dispatch'
1605+
+ ' SKILL.md, verbatim and untranslated: 「唯一例外:`platform-readings.md`'
1606+
+ ' 增量抬上限到落地行数,免决策卡,记 `ruledRaises` 引常设裁决。条件:席位验收评论'
1607+
+ '逐条核实、去重计数(候选/落地/已有/拒收)、一事一行、不计重排」',
1608+
date: '2026-09-15',
1609+
delta: 5,
1610+
},
15631611
],
15641612
sources: [
15651613
['.claude/skills/pm-dispatch/references/lanes/cli.md', 35],

0 commit comments

Comments
 (0)