From b9fdc656099406c29664aece5b59f7f64f2e6462 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Mon, 7 Sep 2026 12:36:01 +0000 Subject: [PATCH 1/2] =?UTF-8?q?docs(pm-skill):=20the=20sixth=20readings=20?= =?UTF-8?q?increment=20=E2=80=94=20seven=20measured=20platform=20facts,=20?= =?UTF-8?q?ceiling=20388=20->=20395=20(ruled)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seven deduplicated readings land as one rule line each in the readings ledger, and the ceiling row moves to the landed count under the STANDING one-file exception (pm-dispatch SKILL.md), recorded as a `ruledRaises` record rather than a decision card, exactly as that exception directs. The lines, each written in the file's voice and placed in the section that owns its subject: - MCP's read limiter and write limiter are independent of each other, measured in both polarities, so one side's refusal does not predict the other's. - A control word's hit does not license a different term's zero: the same document is reachable by one term and empty by another in the same batch, so the defect is term-shaped, not document-shaped. - A listing that returns a bare array and no total cannot announce its own truncation, so its zero is not a reading — the neighbouring row already covers the full-first-page case, this one states the response-shape property. - An existence question goes to a single-point 200/404 read (`GET /repos/{o}/{r}/branches/BRANCH`) or `git ls-remote --heads`, never to a listing page. - `issue_write` clears every field it is not passed, assignees included — the labels half was already on the ledger, this is the other half. - Assignability is a repo+account property that moves mid-session, with its 204/404 probe and the read-back rule. - A standalone marker line is dropped by the COMMENT read path with the bytes still in storage, so its absence is not evidence of a write-side strip. Ceiling 388 -> 395 at the landed count, headroom 0, same convention; `was` is untouched and no other ceiling moves. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_018dxq7YqsLDMeZDZ5AzsgJX --- .../references/platform-readings.md | 7 ++++ scripts/pm/check-skill-line-ratchet.mjs | 41 ++++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/.claude/skills/pm-dispatch/references/platform-readings.md b/.claude/skills/pm-dispatch/references/platform-readings.md index 9676c55779..70f08b840e 100644 --- a/.claude/skills/pm-dispatch/references/platform-readings.md +++ b/.claude/skills/pm-dispatch/references/platform-readings.md @@ -109,6 +109,7 @@ - 读数:`POST /actions/runs/{id}/rerun-failed-jobs` REST 回 403 而 MCP 回 201。 - job 日志只有 MCP 取得回,REST 侧转 blob 存储 `http=000`;同分钟 MCP 限流而 REST core 满 15000。 - ⇒ MCP 限流先探 REST 再定退避,⛔ 不据一侧限流把整个平台的写都停掉。 +- MCP 的读限流与写限流彼此独立,两向各有实测 ⇒ 一侧被拒 ⛔ 不推另一侧也不可用。 - REST 档以本班 repo-scoped 探针绿为前提;403 会话改按降级梯读。 - 容器 curl 的 REST 通道 = App installation token,core 15,000/时,与 GraphQL 池独立计。 - GraphQL 池 5000/时,只留给没有 REST 对应物的几件。 @@ -167,6 +168,7 @@ - ⛔ 空查重结果不是读数,除非本会话内一个已知必中的控制词答了命中。 - ⛔ 不是可疑时才验:归零下空结果与真无重复逐字节同形,读作搜过了没有。 - 后果是重复卡照开、空车道照停;控制词回 0 ⇒ 本会话 search 已坏,立刻换通道,⛔ 不重试。 +- 控制词命中只证通道活着:同一文档换个词即回零,故障按词形不按文档,零仍不是读数。 - 换道:探针绿走 REST 列表端点 `GET /repos/{o}/{r}/issues?state=open&labels=a,b&per_page=N`。 - 它走 core 桶且 `labels` 是真 AND;⛔ 完整性自证靠 `&page=N` 加总数核对。 - 翻页在偏移 ~9,900 硬拒:422 Pagination with the page parameter is not supported for large datasets。 @@ -192,8 +194,11 @@ - 组织侧授权变更后仓库访问逐步传播,同一端点数分钟内 403 转 200。 - 该 403 体解析成净零 ⇒ 空车道先对 `open_issues_count` 反查再信,零命中纪律覆盖 list 读。 - 满页首页零命中是截断不是缺席:`GET /branches?per_page=100` 回满 100 行无目标 ⇒ 翻完再判。 +- 裸数组无总数的 listing 自报不了截断,它的零不是读数;MCP 侧有 `totalCount` 可自报。 +- 存在性问题改单点读:`GET /repos/{o}/{r}/branches/BRANCH` 200/404,或 `git ls-remote --heads`。 - `issue_write` 的 `labels` 是整组替换不是追加:同一动作内重读现值合并再写。 - 隔轮旧读数是无效快照,按其回写静默剥别的标签;真追加走 REST `POST /issues/{n}/labels`。 +- `issue_write` 还清空每个未传字段(assignees 在内)⇒ 单字段更新必须把现值带齐重写。 - 追加端点同样先过探针:403 会话没有真追加通道,只能整组替换。 - 摘标签也没有加法端点:`finding` 定级这类只能整组写,carve-out 保留;写后照纪律回读。 - PR 标签的三条读腿全盲、两条静默。 @@ -207,10 +212,12 @@ - ⇒ union-write 欠一次延迟确认;必需标签(如 `skip-changeset`)其后每次触碰重核。 - `list_issues` 永不返回 assignees:`fields` 枚举无此成员,不传也没有。 - 已认领卡与空闲卡响应逐字节相同,清单只是候选名单 ⇒ 认领前必须过完整 `issue_read`。 +- 可指派性是仓+账号属性且会话中可变:`GET /repos/{o}/{r}/assignees/USER` 204/404,指派后回读。 - MCP `issue_read` 的 body 实体转义是纯读侧伪影,撇号与引号与尖括号成数字实体,comments 原样。 - 存储体是明文,先解码实体再写回往返安全;腐蚀 body 的恰是把转义读数原样回写。 - 读侧并非一律可逆:行内反引号里的尖括号片段被 MCP 读路径整个丢弃,非转义,无从解码。 - 写侧剥除是真实存储损耗,⛔ 两类不并成一条,写后回读必做;实体归属与 `&` 类未实测。 +- 评论里独立成行的标记同被读路径吃掉留空行 ⇒ 缺失不证写侧剥除,先读 payload 原体。 - `Blocked-by:` 行归 BODY,是单通道反向索引:追加按解码后写回执行。 - 历史上寄放在评论里的行按同程序增量回填,⛔ 不搞批量突击。 - 解锁扫描只 grep body,⛔ 不加常设评论读;扫描走 `list_issues` 加 `issue_read` 直读。 diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index 90e7aa0257..3e61eeba7f 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -575,7 +575,31 @@ export const CEILINGS = new Map([ // line cap when merged, so there is no re-wrap slack at all, 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', 388], + // Raised 388 → 395 by the SIXTH readings increment, taken under the STANDING + // one-file exception rather than a fresh decision card. `pm-dispatch` + // SKILL.md carries that exception, verbatim and untranslated: + // 「唯一例外:`platform-readings.md` 增量抬上限到落地行数,免决策卡,记 + // `ruledRaises` 引常设裁决。条件:席位验收评论逐条核实、去重计数(候选/落地/ + // 已有/拒收)、一事一行、不计重排」 + // so the number below is the LANDED count and the seat's ACCEPT carries the + // per-item verification and the candidate / landed / already-present / refused + // counts the exception requires. Spent at ONE line per deduplicated reading, + // each written in this file's voice: MCP's read limiter and write limiter are + // independent of each other, measured in both polarities (+1); a control + // word's hit does not license a different term's zero, since the same document + // is reachable by one term and empty by another (+1); a listing that returns a + // bare array and no total cannot announce its own truncation (+1) and the + // single-point 200/404 read that answers an existence question instead (+1); + // `issue_write` clears every field it is not passed, assignees included (+1); + // assignability is a repo+account property that moves mid-session, with its + // 204/404 probe (+1); a standalone marker line is dropped by the COMMENT read + // path with the bytes still in storage, so its absence is not evidence of a + // write-side strip (+1) = +7 exactly. Nothing 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. + // The same-PR correction of the footer-mechanism row is line-neutral and buys + // nothing. Landed count, headroom 0, same convention. + ['.claude/skills/pm-dispatch/references/platform-readings.md', 395], // 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 @@ -1028,6 +1052,21 @@ export const CROSS_FILE_MOVES = new Map([ date: '2026-09-07', delta: 26, }, + { + // The STANDING exception's own words, copied from `pm-dispatch` + // SKILL.md rather than paraphrased; the +7 is accounted for line by + // line beside this entry's ceiling above. This raise takes no decision + // card BECAUSE the exception says it does not, and it is recorded here + // BECAUSE the exception says to record it here. + 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-07', + delta: 7, + }, ], sources: [ ['.claude/skills/pm-dispatch/references/lanes/cli.md', 35], From ca1fba4d23a61670df6ec3a04cbbea21a13d33af Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Mon, 7 Sep 2026 12:40:27 +0000 Subject: [PATCH 2/2] =?UTF-8?q?docs(pm-skill):=20the=20footer-synthesis=20?= =?UTF-8?q?mechanism=20is=20measured=20false=20=E2=80=94=20replace=20the?= =?UTF-8?q?=20untested=20row=20with=20the=20reading?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The row proposed a mechanism for the attribution-footer variation and marked it 未实测 with an explicit refusal to compress the observation into a law: the tool synthesises a footer only for a body that carries none. Measured twice now, on two different PRs, in the direction that mechanism predicts: a body edit sent through the MCP `update_pull_request` wrapper with no footer of its own reads back, through the same channel, with NO footer at all — no synthesised block, nothing appended. The mechanism is false, so the row that proposed it is replaced BY the reading, at the same line count. The neighbouring rows are untouched, including the one that refuses to generalise any single form across channels and actions, which still governs this line. ⚠️ This disagrees with `AGENTS.md`'s edit-side reading (session-URL footer survives, the platform appends a bare block). AGENTS.md is outside this flight's file surface; the conflict is reported rather than silently resolved. Ceiling unchanged at 395: this correction is line-neutral and buys nothing. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_018dxq7YqsLDMeZDZ5AzsgJX --- .claude/skills/pm-dispatch/references/platform-readings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/skills/pm-dispatch/references/platform-readings.md b/.claude/skills/pm-dispatch/references/platform-readings.md index 70f08b840e..a1a0cbf387 100644 --- a/.claude/skills/pm-dispatch/references/platform-readings.md +++ b/.claude/skills/pm-dispatch/references/platform-readings.md @@ -301,7 +301,7 @@ - MCP `update_pull_request` 包装器删掉 PR 正文的页脚块。 - 裸 REST `PATCH /pulls` 追加一个裸页脚并保留既有 session-URL 页脚,差恰 58 字节。 - 同一 MCP 包装器上有反例:把已带页脚的正文整体重送,两条页脚均逐字节存活。 -- 提出的机理是工具只为无页脚的正文合成页脚 —— ⛔ 未实测,⛔ 不把观察压成定律。 +- 送无页脚正文经 MCP 编辑回读仍无页脚(两次实测)⇒ 它不为无页脚正文合成页脚。 - 第四形:裸 REST `POST /pulls` 建 PR 时,在已带 session-URL 页脚的正文后再追加一条同形页脚。 - 该追加带前置横线、恰 90 字节,送出体是存储体的严格前缀。 - ⇒ 追加形态随通道与动作(建 / 改)变,⛔ 不由任一条推其余;写后必回读。