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
39 changes: 39 additions & 0 deletions .claude/skills/pm-dispatch/references/platform-readings.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,12 @@
- **红窗调度**:`until remaining > 阈值` 的守候**只给上面那几件 GraphQL-only
的**(逐件判据与官方文档核对日期住 `references/rest-channel.md`),⛔ 其余一切不为配额空等;
走队列的仓落地必经 auto-merge ⇒ 红窗里**无退路**,直合仓有(合并本身有 REST 端点)。
- **MCP 侧限流下,只有 MCP/GraphQL 做得了的那两件(draft 翻转、auto-merge 挂载)整窗不可得 ——
被这样挡住的翻转是在等窗口,不是关于该 PR 的信号**(2026-09-04 02:17Z 实测:MCP
`update_pull_request` 回 `API rate limit already exceeded for user ID …`,同刻本席 repo-scoped REST 读回满
额;两桶分离本身见上「信封」条,⛔ 不重复)⇒ ⛔ 不据它重挂、不据它改判 PR 状态,其
余(评论、标签、请审、读、timeline)照常走 REST。⚠️ 报文里的 user ID 只是报文:据它
推「MCP 池按身份跨席共享」与本节首条的禁令正面冲突,⛔ 未裁不写成事实。
- **`issue transfer` 因配额或权限拿不到 ⇒ 当轮改走多仓协调条款的「在目的仓重建」
配方**(出处头 + 裸 `#N` 改全名 + 关源单为 moved):纯 REST、配额免疫,⛔ 不为转移空等重置。
- **两个「瘦身参数」都不省池**:`fields` 省载荷不省池 —— MCP list/search 服务器端无条件抓
Expand Down Expand Up @@ -154,6 +160,11 @@
单卡读、**不覆盖 issue search**(搜索页无 SSR 结果);⛔ 永
不拿渲染列表定规模(静默只显一页,实测 12 vs 权威 147)。渲染层 WebFetch 仍在(~15 分缓存、
有损)。
- **「本档的缺席不是读数」的成因:本档经 CDN 缓存,专对最新内容失效且绕不掉** —— 内容
可滞后数分钟到数十分钟,实测三次抓取横跨 75 分钟(其中一次带 cache-busting 查询串 +
no-cache 头)都没取到一条已存在 75 分钟的评论(2026-08-30)。⚠️ 它**没有位置性对照**:更早
的内容全在、读起来完全正常,只有最新几条缺席 ⇒ 前 15 项那条判别式在此不成立,唯一
出路是第二通道;失效方向是据它对**别人的工作**下「没有认领」的判词。
- **查重先 `search_issues`,并按它的契约拼**:它是**语义**匹配器 —— ⛔ `query` 里永不放 GitHub
限定符(`repo:` / `is:` / `label:` / `in:title`),范围走 `owner` / `repo` 参数,`query` 写成描述缺陷
的**句子**;限定符形对每个带自由词的查询回 `total_count: 0` 且 `incomplete_results: false`,同一意
Expand Down Expand Up @@ -293,6 +304,18 @@
线只写页脚则原样存活(2026-08-28 两仓同轮、两张 PR 全文回读)。**评论不受影响**(两种拼法
都活)⇒ 失效既**依拼写**又**依载体**:评论里验过页脚**对 PR 正文什么都没证明**。⇒ PR
正文页脚**不带前置横线**、且**写后回读正文**(唯一检测手段);评论两形皆可。
- **署名页脚的写侧变异按通道与输入双重定域,⛔ 不是一条定律**(作者侧处方住 AGENTS.md,本
条只定作用域):MCP `update_pull_request` 包装器**删掉** PR 正文的页脚块(2026-09-03 姊妹仓实测:带
与不带页脚两次送出,落库都是 12317 字节、零页脚);裸 REST `PATCH /pulls` **追加**一个裸页脚
并保留既有 session-URL 页脚(送 15726、落 15784、差恰 +58、前缀逐字节相同;2026-09-04 两仓两席
各一次独立观察,后一次全文比对 22,533 字符、两页脚并存)。⚠️ **同一 MCP 包装器上有反
例**:把**已带页脚**的正文整体重送,两条页脚均逐字节存活(2026-09-04 07:02Z,n=1),提出的机理
是「工具只为没有页脚的正文合成页脚」—— ⛔ **未实测**,⛔ 不把这些观察压成一条定
律、不为凑定律改写其中任一句。**第四种组合**:裸 REST `POST /pulls` 建 PR 时,在已带
session-URL 页脚的正文后再追加一条 **session-URL** 页脚(前置 `---`、恰 +90 字节、送出体是存
储体的严格前缀;2026-09-04 实测)⇒ 追加的形态随通道**与动作(建 / 改)**变,⛔ 不由任一条推
其余。⇒ 写后必回读;评论创建两通道都追加同样 58 字节 ⇒ 严格解析 `os-dev-report` 评论必
须停在最后一个右花括号。
- **并行 spec PR 同动 pin 计数断言**(被踢不是事故,按 os-regen 序再解一轮):解冲突两侧收据都
保留、按合并顺序堆叠,新计数**从合并后源码重数**(操作数是文件本身不是历史),⛔ 不从
两侧收据做算术;双方占同一编号是常态(各取当时 max+1),重编号后进侧。
Expand Down Expand Up @@ -356,3 +379,19 @@
原则、定时器选型(⛔ 不用 send_later 链)与恢复 playbook 在主文件;事实补遗:`npx ccusage blocks` 容
器内可用(读本地会话记录),报当前 5 小时窗口边界/剩余与燃烧率;盲区:窗口起点是本地推
断的近似值;撞墙报文形如「limit reached, resets at HH:MM」(重置时刻只在此刻可得)。
- **agent 建的 Routine 起的会话不带 `mcp__github__*` 工具**(2026-08-29 两次探针,决断的是第二次:显
式禁止自退休、唯一动作是跑一次 github 查询并发一条评论 —— 回 30s IDLE、评论从未出
现,判别读数是目标卡评论数与 `updated_at` 全程不动,它排除了「正确自退休」这个同形解
释)⇒ **对任何以 GitHub 读写为工作的席位不可用**。⚠️ 2026-09-04 复核本会话工具契约:创
建端现有 `connectors` 参数(声明起的会话可用哪些连接器)⇒ 当时的成因(不存连接器)有了参
数级解法,⛔ **未实测**,⛔ 不据参数在场推「现在能用了」。
- **自绑唤醒的是已存在的会话、工具已加载 ⇒ 上条的传输问题不发生 —— 代价是拿新会
话可恢复性换工具可得性**(`persistent_session_id` 或绑自身):绑定的会话一死,定时器成孤儿、
每小时唤醒一个死会话且长期无人察觉(实测一例躺了 6 天)⇒ **绑定会话一死:先删旧
Routine、再从新会话重建,⛔ 永不留孤儿**;自绑是性能优化(保住一条 prompt-cache 链),⛔ 不是
状态存储,删了重建零成本。
- **创建端无 `sources`、无 `model` 参数**(2026-09-04 复核仍然如此)⇒ agent 建不出带仓库源或钉死
档位的 Routine,起的会话落**默认档**(2026-08-29 实测落在档位裁决之下,两个方向 agent 都改不
动);⚠️ 更新端**今日带** `model`,但只有「每次起新会话」的 Routine 吃得到 —— 自绑的保
持所绑会话的档位直到绑定解除 ⇒ ⛔ 不据「更新端能改档」推「自绑的档位可改」;UI 建
的 Routine agent 改不动(更新端只受理自己建的)。
62 changes: 52 additions & 10 deletions scripts/pm/check-skill-line-ratchet.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -496,12 +496,36 @@ export const CEILINGS = new Map([
// bytes spread over three bullets, none of them completing a line inside its own
// bullet), and re-wrap funding is refused per the 2026-08-17 rule. Landed count,
// headroom 0, same convention.
// Raised 358 -> 397 by the third-increment ruling — again an ORDINARY raise
// under this map's own maintainer exit, ⛔ not a cross-file move. Maintainer,
// decision batch #34, 2026-09-04, verbatim and untranslated: 「决裁批 #34 同意」
// on the presented recommendation, item 1 = A; the director record's own
// sentence for that item: "raise the ceiling by the measured +39, 358 → 397".
// Spent in full, and measured the same way — each member written in the file's
// voice and wrapped by this module's own `wrapLine` rather than estimated:
// attribution-footer scoping +12 (the row is true per CHANNEL and per
// ACTION/INPUT over four observations, and names what is untested instead of
// resolving the mechanism into a law), the MCP-side rate refusal read as a
// window reading rather than a signal about the PR +6, the CDN cause behind
// 「本档的缺席不是读数」 +5, and the Routine transport family +16 (no connector
// tools in a fired session · self-binding's trade and its orphan-recovery rule
// · neither `sources` nor `model` on the create end) = +39 exactly. Two members
// shrank against `origin/main` before landing, because the file already carried
// the fact: a reading the table states is cited, never re-spelled. Nothing was
// paid in place — the deletions this file can offer were measured at 0 whole
// lines under the previous raise and nothing has been added since to delete —
// and re-wrap funding is refused per the 2026-08-17 rule. Landed count,
// headroom 0, same convention.
// Item 2 of the same ruling = C: the two quota sentences this increment leaves
// in tension — the standing 「⛔ 不据限流报文里的 user ID 推…」 and the new
// member's 未裁 clause beside it — BOTH STAY AS WRITTEN, pending a
// discriminating read. ⛔ Neither is edited here or there.
// ⚠️ This entry is also the DESTINATION of the cross-file move declared below,
// and the +34 above is not part of it. It is recorded there as a `ruledRaises`
// record quoting this same ruling, which is what keeps that declaration's `was`
// at this file's literal pre-move 314 while the move's own raise still reads
// +10 against the sources' −11.
['.claude/skills/pm-dispatch/references/platform-readings.md', 358],
// and NEITHER ordinary raise above is part of it. Both are recorded there as
// `ruledRaises` records quoting their own rulings, which is what keeps that
// declaration's `was` at this file's literal pre-move 314 while the move's own
// raise still reads +10 against the sources' −11.
['.claude/skills/pm-dispatch/references/platform-readings.md', 397],
// 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 @@ -777,11 +801,13 @@ export const CROSS_FILE_MOVES = new Map([
was: 314,
// ORDINARY ruled raises taken on this destination SINCE the move. Each is
// the maintainer's rather than this move's, so each is subtracted before
// the move's raise is measured: 358 − 314 − 34 leaves the +10 the move
// landed with, against the same net source decrease of 11. Recording it
// here rather than inside `was` is the whole point — with neither, the same
// tree reads the move as +44 against −11 and reds twice, for lines no
// source was ever asked to pay.
// the move's raise is measured: 397 − 314 − (34 + 39) leaves the +10 the
// move landed with, against the same net source decrease of 11. Recording
// them here rather than inside `was` is the whole point — with neither, the
// same tree reads the move as +83 against −11 and reds twice, for lines no
// source was ever asked to pay. The list GROWS by one record per ruled
// raise; ⛔ `was` never moves, so the reviewer's completeness check keeps
// the one shape it has always had.
ruledRaises: [
{
// Quoted beside this entry's ceiling above, where the +34 is accounted
Expand All @@ -798,6 +824,22 @@ export const CROSS_FILE_MOVES = new Map([
date: '2026-09-04',
delta: 34,
},
{
// The third increment, ruled the same day as the one above and in the
// same way. Quoted beside this entry's ceiling too, where the +39 is
// accounted for member by member. Copied from there, not paraphrased.
ruling:
'the third-increment raise on `.claude/skills/pm-dispatch/references/platform-readings.md`'
+ ' — maintainer, decision batch #34, 2026-09-04, verbatim and untranslated:'
+ ' 「决裁批 #34 同意」 on the presented recommendation, item 1 = A; and the director'
+ ' record\'s own sentence for that item: "raise the ceiling by the measured +39,'
+ ' 358 → 397". Measured per member rather than estimated: attribution-footer'
+ ' scoping +12, the MCP-side rate refusal read as a window reading +6, the CDN'
+ ' cause behind the payload channel\'s absence rule +5, and the Routine transport'
+ ' family +16 = +39 exactly.',
date: '2026-09-04',
delta: 39,
},
],
sources: [
['.claude/skills/pm-dispatch/references/lanes/cli.md', 35],
Expand Down
Loading