diff --git a/.claude/skills/pm-dispatch/references/platform-readings.md b/.claude/skills/pm-dispatch/references/platform-readings.md index 2b5af1e11b2..b60ca41820b 100644 --- a/.claude/skills/pm-dispatch/references/platform-readings.md +++ b/.claude/skills/pm-dispatch/references/platform-readings.md @@ -247,6 +247,7 @@ - `list_issues` 永不返回 assignees:`fields` 枚举无此成员,不传也没有。 - 已认领卡与空闲卡响应逐字节相同,清单只是候选名单 ⇒ 认领前必须过完整 `issue_read`。 - `comments` 计数会多读:实测 1 而列表与 timeline 双 0 ⇒ 线程空否读那两条,⛔ 不读计数。 +- `comments` 与枚举不等是瞬态旗:计数收敛后记录已失而差值归零 ⇒ ⛔ 不作唯一防线。 - 可指派性是仓+账号属性且会话中可变:`GET /repos/{o}/{r}/assignees/USER` 204/404,指派后回读。 - MCP `issue_read` 的 body 实体转义是纯读侧伪影,撇号与引号与尖括号成数字实体,comments 原样。 - 存储体是明文,先解码实体再写回往返安全;腐蚀 body 的恰是把转义读数原样回写。 @@ -340,16 +341,18 @@ - 写侧 · PR 正文:尾部横线与其后的署名页脚一并被吃,而写调用照报成功。 - 去掉横线只写页脚则原样存活;评论不受影响,两种拼法都活。 - ⇒ 失效既依拼写又依载体:评论里验过页脚对 PR 正文什么都没证明。 -- ⇒ PR 正文页脚不带前置横线,且写后回读正文 —— 那是唯一检测手段;评论两形皆可。 +- ⇒ 处方按动作分裂:建侧送全块(横线加页脚),改侧不送页脚;⛔ 无一形两动作通吃。 - MCP `update_pull_request` 包装器删掉 PR 正文的页脚块;该通道锁 1 已拒,读作历史。 -- 裸 REST `PATCH /pulls` 追加一个裸页脚并保留既有 session-URL 页脚,差恰 58 字节。 +- 改侧 · 裸 REST `PATCH /pulls` 恒追加一条裸页脚并保留既有页脚,差恰 58 字节,与尾部无关。 +- 尾部已是 `---` 加页脚块也照追加,重送复现 ⇒ 建侧的不追加判据 ⛔ 不外推到改侧。 - 同路送无页脚正文存回恰一条(平台裸形)⇒ 该格处方是不送页脚,⛔ 不是不重送正文。 - 页脚两拼写:裸版与 session-URL 版都要剥,漏剥的卡在正文中段,而 58 字节差照常。 - ⇒ 代价是归属:裸形无 session id,按此剥净的 PR 正文不载明哪个会话写的;另置见 AGENTS.md。 - 第四形:建 PR 两通道同判 —— 送出体尾部不是 `---` 加页脚块时,追加一条同形页脚。 -- 该追加带前置横线、恰 90 字节,送出体是存储体的严格前缀。 +- 该追加是横线加一条 session-URL 形页脚,送出体是存储体的严格前缀;字节数非常量(90/91)。 - 尾部已是该块则一字不追加,两通道各实测两向 ⇒ 建侧通道不是变量,判据是送出体尾部。 -- ⛔ 无受控对照(同通道只差该块两送)⇒ 是拟合不是定论,⛔ 不外推到别的动作。 +- 受控对照已补齐:同通道同动作只差该块两送,尾部为无横线页脚时照追加成两条。 +- ⛔ 该对照只在裸 REST 建侧成立,MCP 建侧同一输入未测 ⇒ ⛔ 不外推到该通道。 - 调用不带 `body` 参数则页脚状态不动:`draft` 或 `title` 单字段更新既不删也不合成。 - 正文把 harness 两行块叠在页脚之上,存回是三条署名块;单块形态才复现成一条。 - ⇒ 形态随动作与送出体尾部变,改侧还随通道变;⛔ 不由任一条推其余,写后必回读。 diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index ccd21fa35c8..d79bbd0e5ff 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -1011,7 +1011,47 @@ export const CEILINGS = new Map([ // contended it is, the detached prescription unchanged. // Nothing else was paid in place: 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', 466], + // Raised 466 → 469 by the EIGHTEENTH 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. Its carrier card + // named a MEASURABLE unknown — the missing half of a controlled contrast this + // map itself declares absent — and the probe was the raising PR's own body: + // composed to end in the signature line with NO rule line above it, sent once + // through a bare `POST /pulls`, then read back (11,689 bytes sent and one + // signature line, 11,780 stored and two, the send a strict PREFIX of the + // store). Spent at ONE line per deduplicated reading: on the PATCH channel the + // append is UNCONDITIONAL, so a sent tail that IS the rule-plus-signature + // block — the very shape the create side leaves alone — is appended to + // anyway, reproduced on a second send, and the create-side criterion does not + // carry to it (+1); a thread's count-versus-enumeration discrepancy is a + // TRANSIENT flag, because the count converges on the enumeration and after it + // converges the records are gone and the difference is zero, so that + // discriminant cannot be the only defence (+1); and the controlled contrast + // now holds only on the bare-REST create channel, the MCP create channel's + // same input being unmeasured, so the conclusion is not carried there (+1) = + // +3 exactly. Candidates 5 / landed 3 / already present 1 / refused 1 — the + // already-present one is that channel's operational cost, carried by + // 「⇒ 该格处方是不送页脚」 and by the attribution row beside it; the refusal is a + // residual row whose first clause restated its neighbour's own conclusion + // 「判据是送出体尾部」 and whose second clause named the comment surface and + // the patch cell's other input as uncontrolled when both are in fact measured. + // Absence was measured per row with a lit control: `收敛` reads 0 in this file + // against `计数` at 9, `瞬态` hits only the `unstable` and PR-files rows, and + // `updated_at` reads 0. + // + // THREE corrections are paid in place and buy nothing — a rewrite is not a + // raise. The prescription row 「PR 正文页脚不带前置横线」, whose spelling is + // precisely what TRIGGERS the create-side append, is split per action. The + // PATCH row is re-stated as a RULE instead of one of two rows of inputs. And + // the append-size row's 「恰 90 字节」 becomes 「字节数非常量(90/91)」: + // this increment's send measured 91 bytes on a body with no trailing newline, + // the appended line being the session-URL spelling, which the row now NAMES + // instead of leaving it to be inferred from a constant that is not one. ⛔ No + // cause is asserted for the spread — one reading each, and no controlled + // contrast on the trailing newline or on session-id length. + // Nothing else was paid in place: 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', 469], // 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 @@ -1736,6 +1776,23 @@ export const CROSS_FILE_MOVES = new Map([ date: '2026-09-15', delta: 1, }, + { + // The EIGHTEENTH 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 +3 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-18', + delta: 3, + }, ], sources: [ ['.claude/skills/pm-dispatch/references/lanes/cli.md', 35],