Repository navigation
Commit 80b2da2
docs(pm-skill): platform-readings diet — delete the readings a scripts/pm tool now holds (tool first, text second) (#22684)
Fixes #22452
Clause-②: no
W1 of the skills-lane diet program; the program anchor #22060 remains
open for its later work items. Tool first, text second: every reading in
`.claude/skills/pm-dispatch/references/platform-readings.md` that a
`scripts/pm` tool now holds is deleted whole, each one named below with
the tool and the self-test case that pins it. Nothing else in the file
moves, no other reference file is edited, and no tool's judgement
changes. The file's `CEILINGS` row in
`scripts/pm/check-skill-line-ratchet.mjs` is lowered to the landed
count.
## The table: reading, the tool that holds it, action
Line numbers are the file at `origin/main` `243dd3c62`.
| reading (first words, base line) | held by: tool, self-test battery
and case | action |
|---|---|---|
| L91 「落地相邻的写侧一则:GitHub 标签描述上限 100 字符…」 |
`scripts/pm/check-label-desc-cap.mjs` (`pnpm check:pm-label-desc-cap`,
required in `lint.yml`): battery `check-label-desc-cap self-test`, cases
`exactly 100 characters passes` and `101 characters fails` | deleted |
| L104 「官方指引:变更类请求间停 ~1 秒,mutation 按 5 倍计…」 |
`scripts/pm/write-pace.mjs` rule ① (`DEFAULT_MIN_GAP_MS` 3 s, above the
~1 s the text prescribed) and rule ⑤: batteries `rule ①: the remainder
is slept, and the pause is said out loud` and `rule ⑤: batch mode — the
gap rises for an announced batch, and the estimate is printed` | deleted
|
| L105 「批量重分诊这类把写挤在同一秒的扫动…」 | `scripts/pm/write-pace.mjs` rules ① and ④:
batteries `rule ①: the remainder is slept, and the pause is said out
loud` and `rule ④: the lease — one write in flight, fleet-wide, measured
on real processes` | deleted |
| L107 「`write-pace` 把一次 dispatch 记作那一笔写(40/时不变)…」 |
`scripts/pm/write-pace.mjs` battery `rule ②: the 41st is REFUSED, with a
prescription`; `scripts/pm/fleet-write/dispatch.mjs` battery `the
wiring: the POST is paced and on the roster, the reads are not, the
token never reaches the log`; `scripts/pm/close-cards.mjs` battery `the
relay pack: ONE card, ONE dispatch — comment → labels_remove →
issue_patch — ONE write on the throttle` (the text's 「每步一次 dispatch」 was
already stale against it) | deleted |
| L122 「判别式:该 415 的 `documentation_url` 指 Claude Code 不指 GitHub…」 |
`scripts/pm/write-pace.mjs` `isProxyRefusal`: battery `rule ③: what
writes a stop marker, how long it lasts, what it refuses`, case `⭐ the
egress PROXY's 403 is recognised by its body (measured shape): the
message naming the proxy, or a documentation_url that is not GitHub's`;
`scripts/pm/label-write.mjs` battery `the classifier: a 404 that is
success, and a 403 that must not fall back`, case `⭐ a 403 whose body is
the egress PROXY's (measured shape) is the ROUTE — prerequisite — ⛔
never a rate limit, whatever the header says` | deleted |
| L232 「摘标签也没有加法端点:`finding` 定级这类只能整组写…」 | `scripts/pm/label-write.mjs`
removes by directed `DELETE /issues/{n}/labels/{name}`: battery `the
arithmetic: union, difference, and the two idempotent no-ops`, case
`…one directed DELETE per removal actually present`; battery `the
classifier: a 404 that is success, and a 403 that must not fall back`,
case `a 404 on a DIRECTED DELETE is the label already being gone`; relay
`scripts/pm/fleet-write/execute.mjs` battery `the idempotent removal: a
404 on a directed label DELETE is success` (the text's claim was stale
against both) | deleted |
| L359 「平台在尾部 `---` 前后正反两向归一空行:比对正文只按首个差异偏移…」 |
`scripts/pm/post-stamped.mjs` exact-bytes classifier: battery `the
re-anchored footer: a newline the platform MOVED is not a byte lost`,
case `⛔ …so "equal length" is NOT the test and never became one`;
battery `the collapsed blank: the footer block's own separator is not a
content byte`; every relay body op is read back through that classifier
(`scripts/pm/fleet-write/dispatch.mjs` battery `the verdict:
post-stamped's own classifier, imported — …`) | deleted |
| L360 「送全块即触发该归一 ⇒ `post-stamped` 的 `body` 档把这点空白判 `mutated`…」 |
`scripts/pm/post-stamped.mjs` battery `the collapsed blank: the footer
block's own separator is not a content byte`, cases `…and it LANDED:
exit 0, ⛔ not the 4 this exact shape answered on every one of them` and
`…named by its OWN word, ⛔ never the re-anchor's, which says nothing was
lost` (the tool no longer judges this `mutated`; the text was stale) |
deleted |
| L419 「内联双引号 JSON 建卡:标题反引号标识符被 shell 以 root 展开…」 |
`scripts/pm/issue-create.mjs` battery `the arguments: files not argv for
prose, exactly one title source, a repo shape`, case `⛔ a --title
carrying a backtick or a dollar sign is refused — the shell already had
its turn` | deleted |
Nine bullets, each deleted whole; no fragment of a bullet was cut and
nothing was re-wrapped.
## The rule, stated once
Head line 3 is replaced in place (one line for one line, 118 bytes,
under the ratchet's 120-byte line rule): 「见
reading-discipline.md;工具先行、文本其次:读数先落工具或自测行,工具守不住的才留本表。」 `git grep -n
'工具先行'` over `.claude/`, `AGENTS.md` and `CLAUDE.md` answers 1 hit, this
line; `tool first` and `text second` answer 0.
## Line budget
| surface | before (`243dd3c62`) | after (`e74ef6211`) |
|---|---|---|
| `platform-readings.md` | 469 lines, 48,048 bytes | 460 lines, 47,068
bytes |
| whole `references/` tree (31 files, `lanes/` included) | 2,301 lines |
2,292 lines |
| its `CEILINGS` row | 469 | 460 (headroom 0) |
The file's `MAX_TABLE_ROW_BYTES` pin stays 0 (it carries no table row).
## Zero checks
`git grep -n -F PHRASE -- .claude/skills/pm-dispatch/` at `e74ef6211`,
one distinctive phrase per deleted reading:
| phrase | hits |
|---|---|
| 「标签描述上限 100 字符」 | 0 |
| 「mutation 按 5 倍计」 | 0 |
| 「批量重分诊这类把写挤在同一秒」 | 0 |
| 「把一次 dispatch 记作那一笔写」 | 0 |
| 「指 Claude Code 不指 GitHub」 | 0 |
| 「摘标签也没有加法端点」 | 0 |
| 「前后正反两向归一空行」 | 0 |
| 「净零字节良性告警」 | 0 |
| 「标题反引号标识符被 shell 以 root 展开」 | 0 |
| positive control, a kept reading: 「上限 90 s / 5 min 不动」 | 1 |
## Gates, all run at `e74ef6211` after the final commit
- `pnpm check:pm-skill-ratchet` exit 0: `✓ check-skill-line-ratchet
self-test: 157 cases pass.`, `… platform-readings.md is 460 lines
(ceiling 460; headroom 0).`, `cross-file move into …
platform-readings.md: +2 (314→460, less 144 lines of ordinary ruled
raise) against a net source decrease of 20`.
- `pnpm check:pm-skill-id-lint` exit 0: `✓ check-skill-id-lint: 34
file(s) clean`.
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` (no paths, change set from the merge base)
derived 39 families; all 39 ran with exit 0, and `--ran` answers `39
derived, 39 run, 0 NOT-MEASURED, 0 UNRUN`.
`check:doc-formula-expressions` first answered PREREQUISITE NOT MET
(exit 3, `@objectstack/formula` and `@objectstack/lint` unbuilt), then
exit 0 after building those two. `pnpm check:pm-dispatch-gates` (fast
tier) exit 0: `1825 cases pass; 6 slow section(s) deferred`.
- Outside the derived set, run because they read the edited ratchet or
were named in the dispatch: `pnpm check:pm-governed-prose`, `pnpm
check:merged-result`, `node scripts/check-published-list-mirrors.mjs`,
`node scripts/check-skills-token-ratchet.mjs`, all exit 0.
## Acceptance notes
- The dispatch expected the stamp contract, relative comment ids, the
AND-label listing, the title byte cap, the ONE-OF guard, the four-step
label write, the no-run UNCONFIRMED rule and the H rows in this file.
Measured at `243dd3c62`, none of them is stated here, except the MCP
list-union reading (L269 to L275), which is an MCP channel measurement
and stays. So the diet is nine lines, not a section rewrite.
- Kept on purpose, with the reason each stays (doubt keeps a reading):
- L106, the relay timings: the `fleet-write/dispatch.mjs` header says
neither ceiling is a measured start latency yet, so this file holds the
only record of the probe.
- L228 to L230, the MCP `issue_write` whole-set hazards: the
`label-write.mjs` header cites them as its measured basis.
- L231, the 403-session additive reading: `label-write.mjs` sends a
proxy-shaped 403 to PREREQUISITE with no fallback, so it does not hold
the reading as written.
- L340 to L358, the PR-body footer cells: `AGENTS.md` points here, and
`PR_CREATE_FOOTER_TAIL` in `fleet-write/dispatch.mjs` cites the fourth
shape.
- L361, the report parse rule: H52 parses the balanced object, which is
not the last-right-brace rule the text states.
- L363 to L367, the clause-② and `Claim:` marker readings: no self-test
pins the tolerated prefixes, and `post-stamped.mjs` passes a bolded
claim line unjudged.
- L412 to L418, the issue footer and PATCH cells: the `post-stamped.mjs`
header cites them as the governed fact table.
- L420, the heredoc expansion: the hazard happens while writing the
file, before any tool reads it.
- L429 and L430, the shallow `check-governed-merges` refusal: the tool
holds the refusal, but L430 is an instruction no tool holds.
- Latent ratchet trap for the next diet: the `CROSS_FILE_MOVES` entry
for this file records 144 lines of ordinary ruled raises above its `was`
of 314. Any ceiling of 457 or less reds `crossFileMoveVerdict` as an
over-claim until a `ruledRaises` record is retired. Measured with the
exported function on the live map: 460 and 458 green, 457 and 440 red.
This PR lowers by 9 and stays clear. A deeper diet must retire records
in the same edit, and that is a change to `CROSS_FILE_MOVES`, not to a
`CEILINGS` row.
- Drift noticed, not filed (prose only, no reader acts on it): the
`post-stamped.mjs` header cites this file as `:410` and `:411`, but
those readings sat at L414 and L415 before this PR and sit at L406 and
L407 after it. L429 prescribes `git fetch --shallow-since=`, while
`check-governed-merges` prints `fetch --unshallow` and `git-history.mjs`
records that `--shallow-since` can shorten history. `rest-channel.md`
keeps its own request-body prescription (never inline double-quoted
strings), which is related to the deleted L419 but is not the same
reading. Carrier: none.
## 维护者速读(草稿)
- **改了什么**:PM 技能的平台读数表删掉 9 条已由 `scripts/pm`
工具自动把关的条目(写入节流、中继计数、代理拒绝判别、按名摘标签、页脚回读、标签描述长度、标题反引号),并在表头写明「工具先行、文本其次」;该文件行数上限
469 → 460。
- **为什么改**:这张表每个席位每次运行都要整读;工具已经拦住的事再写一遍只是重复花阅读成本,且其中 4
条已与工具实际行为不符,留着反而误导。
- **风险与代价(含回滚)**:只删文字、不改任何工具判定;每条删除都对应一个具名自测用例。回滚 = 还原本 PR 这一个提交(两文件)。
- **席位意见**:
- **你要做的**:扫一眼上方「The table」的 9 行,对哪条删除有异议就在本 PR 评论点名行号;无异议则不必动手,本 PR 属
Tier S,由技能席位达档复核后经队列落地。
---
_Generated by [Claude
Code](https://claude.ai/code/session_01RdnZdPZH9ByduzPRWuH9tN)_
Co-authored-by: Claude <noreply@anthropic.com>1 parent d973c34 commit 80b2da2
2 files changed
Lines changed: 4 additions & 11 deletions
File tree
- .claude/skills/pm-dispatch/references
- scripts/pm
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
88 | 88 | | |
89 | 89 | | |
90 | 90 | | |
91 | | - | |
92 | 91 | | |
93 | 92 | | |
94 | 93 | | |
| |||
101 | 100 | | |
102 | 101 | | |
103 | 102 | | |
104 | | - | |
105 | | - | |
106 | 103 | | |
107 | | - | |
108 | 104 | | |
109 | 105 | | |
110 | 106 | | |
| |||
119 | 115 | | |
120 | 116 | | |
121 | 117 | | |
122 | | - | |
123 | 118 | | |
124 | 119 | | |
125 | 120 | | |
| |||
229 | 224 | | |
230 | 225 | | |
231 | 226 | | |
232 | | - | |
233 | 227 | | |
234 | 228 | | |
235 | 229 | | |
| |||
356 | 350 | | |
357 | 351 | | |
358 | 352 | | |
359 | | - | |
360 | | - | |
361 | 353 | | |
362 | 354 | | |
363 | 355 | | |
| |||
416 | 408 | | |
417 | 409 | | |
418 | 410 | | |
419 | | - | |
420 | 411 | | |
421 | 412 | | |
422 | 413 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1107 | 1107 | | |
1108 | 1108 | | |
1109 | 1109 | | |
1110 | | - | |
| 1110 | + | |
| 1111 | + | |
| 1112 | + | |
1111 | 1113 | | |
1112 | 1114 | | |
1113 | 1115 | | |
| |||
0 commit comments