Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

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

## 多仓协调

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

- 测试证据要有真实命令与通过输出,⛔ 不接受一句 tests pass。
- 测量类交付先看阳性对照:对照本身失败 ⇒ 该读数记 INCONCLUSIVE,⛔ 不入账。
- 复核项证据已销毁(评论、卡或 PR 答 404)⇒ 记 NOT MEASURED 并写因,⛔ 不记通过或无旗。
- 引 entry `.d.ts` 逐字节相同的读数必须同块带阳性对照,它只判名字集。
- 对 barrel 已转发符号的形状恒无效:`export *` 与 `export type { X } from` 都不复述形状。
- 判据是同块点名声明该符号的模块那份移动了的产物,或具名探针;缺则记 INCONCLUSIVE。
Expand Down Expand Up @@ -72,6 +73,5 @@
- 但推翻过程必须写在 PR 正文并附 main 语料上的实测信噪比,否则按 REWORK 要证据。
- `+0/-0` 不是空文件的证明:NUL 字节让 git 当二进制渲染,还让文件对 grep 隐身。
- 先疑 NUL,以 blob 定论 `git show <sha>:<path> | wc -l`,要求源侧写转义序列。
- 以死代码或不可达为由的删除,PM 在 `origin/main` 上用带引号精确名自己核一次引用面。
- 核过再 ACCEPT:这是断言不是 diff 里的事实,而这一查只花十秒。
- 以死代码或不可达为由的删除,PM 先在 `origin/main` 用带引号精确名核引用面,再 ACCEPT。
- 卡的交付物含系统性 sweep 时,ACCEPT 评论把范围外产出成组列出并写明 sweep 判据。
50 changes: 49 additions & 1 deletion scripts/pm/check-skill-line-ratchet.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -905,7 +905,38 @@ export const CEILINGS = new Map([
// width 134 B), and the two neighbours the row joins offer 37 and 6 spare
// bytes against its 115 bytes of content; re-wrap funding is refused per the
// 2026-08-17 rule in any case. Landed count, headroom 0, same convention.
['.claude/skills/pm-dispatch/references/platform-readings.md', 454],
// Raised 454 → 459 by the FIFTEENTH readings increment, again under the
// STANDING one-file exception quoted above rather than a fresh decision
// card, and again recorded as a `ruledRaises` record citing it. Spent at ONE
// line per deduplicated reading, each written in this file's voice, all five
// from one measured account-level incident and its measured recovery: the
// suspension signal is `account was suspended` on every endpoint including
// `/rate_limit` and on git, with no reason given — a third 403 shape beside
// the session gate and the rate limit (+1); a suspension destroys the
// account's PRs, cards and comments while every branch and commit stays on
// the remote, because those belong to the repository (+1); a destroyed PR
// still holds its branch name — the API answers 404 yet a new PR on the same
// branch is refused — so the same commits go up under a NEW branch name (+1);
// the local object store is the last backup — every branch a reviewer fetched
// to verify on the tree still has its head locally after the suspension, and
// it pushes (+1); and a rebuilt PR self-reports four things in its body:
// byte-identical head, no rebase/amend/squash, numbers from the old base, CI
// decides (+1) = +5 exactly. Candidates 5 / landed 5 / already present 0 /
// refused 0 — the family grep (suspended / 停用 / 销毁 / 幽灵 / 重推 / 重建 /
// 对象库 / 分支名) on `origin/main` hit only the Routine-rebuild and
// issue-transfer rows, none of which carries any of the five.
//
// TWO corrections are paid in place and buy nothing: the quota block's
// 「限流、403、传输失败都要试过另一侧才说得出我没手段」 row and its 「⇒ MCP 限流先探
// REST 再定退避」 conclusion, which until this increment instructed the very
// same-identity channel switch that `rest-channel.md`'s identity-bound
// rate-limit rows forbid; both are re-conditioned in place, line-neutral, on
// the `GET /user` identity test, with the 403 and transport halves kept as
// the per-side readings they are. Nothing else was paid in place: the fourth
// increment MEASURED zero line-neutral folds among this file's adjacent rule
// pairs, and re-wrap funding is refused per the 2026-08-17 rule in any case.
// Landed count, headroom 0, same convention.
['.claude/skills/pm-dispatch/references/platform-readings.md', 459],
// Per-operation REST/GraphQL/git channel mapping — which fleet operation has
// a REST twin (each row executed in a real session, provenance date carried
// per row), the handful that are GraphQL-only, and the queue-routing
Expand Down Expand Up @@ -1560,6 +1591,23 @@ export const CROSS_FILE_MOVES = new Map([
date: '2026-09-14',
delta: 1,
},
{
// The FIFTEENTH increment, under the same STANDING exception — the
// same words again, for the same reason: a record that quotes no
// ruling is RED and each record stands alone. The +5 is accounted for
// line by line beside this entry's ceiling above; the exception's
// conditions (per-item verification and the candidate / landed /
// already-present / refused counts) are carried by the raising PR's
// body and the seat's ACCEPT.
ruling:
'the standing one-file exception for'
+ ' `.claude/skills/pm-dispatch/references/platform-readings.md` — pm-dispatch'
+ ' SKILL.md, verbatim and untranslated: 「唯一例外:`platform-readings.md`'
+ ' 增量抬上限到落地行数,免决策卡,记 `ruledRaises` 引常设裁决。条件:席位验收评论'
+ '逐条核实、去重计数(候选/落地/已有/拒收)、一事一行、不计重排」',
date: '2026-09-15',
delta: 5,
},
],
sources: [
['.claude/skills/pm-dispatch/references/lanes/cli.md', 35],
Expand Down
Loading