docs(pm-skill): the eighth readings increment — 17 landed lines, five in-place corrections, ceiling 402 → 419 - #17084
Conversation
… in-place corrections, ceiling 402 → 419 The carrier card invited riders as comments, so the candidate set was 25 readings — four in the body and 21 across eleven rider comments. Deduplicated against the ledger: 20 landed (17 new lines plus five corrections paid in place), three already present, two refused. The footer family is the reason this increment is not a list. Five riders and both body readings describe one cell and disagree as long as the CHANNEL is read as the variable; sorted by what the SENT body ended with they stop disagreeing, so the create-side row's bare-REST-only attribution is corrected in place and the discriminator lands as its own line. One observation stays outside the fit — the MCP update wrapper's strip, whose input shape was never recorded — and lands as exactly that rather than being smoothed over. No controlled pair has been sent, so the line says fit, not finding. Four other rows are corrected in place for the same shape of defect: text whose correct reading lives in its paragraph and not in its own words. The `--pair` row is the dangerous one — lifted out of its paragraph it reads as "always exits 0 in-container", which would have a seat discount a real exit-4 refusal as a container artifact. Three readings taken in other containers were re-measured here rather than relayed: the public issues query page does serve SSR anchors and does AND its `label:` filters (10 anchors, number-for-number equal to the REST result, with the one-label page truncating 100 to 12); the PR page carries raw comment markdown in `clipboard-copy` value attributes while the issue page carries none; and `api.github.com` answers 200 here where it answered 403 there. The ceiling row moves to the landed count under the standing one-file exception, recorded as a `ruledRaises` record quoting it verbatim and untranslated, with delta 17. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HxLw5aKDPR5RJgyUR7Exkd
维护者速读 — PR #17084(#16779,skills 席终稿,2026-09-09T07:18Z)改了什么 — 平台读数账本 为什么改 — 这些读数是各席位一天里实测踩到的平台行为(合并队列窗口有界、squash 重写署名 trailer、搜索零命中按词形分叉、网页可达性按 URL 形状分叉、公开查询页有 SSR 锚点且 风险与代价(含回滚) — 纯账本文本,不改任何处方性规则(拒收了一条「未复测即须复测」的规则提案,因为卡面说明只记读数);回滚 = revert 本 PR,上限回 402。代价:+17 行,按常设例外免决策卡。 席位意见 — 接受。本席在分支头上复核:棘轮 419/419、自测 157 通过;22 行全部 ≤120 字节、无日期、无卡号(id-lint 干净);frame-sync 绿;受管判定 exit 3;去重表 18 行每行带阳性对照; 你要做的 — 合并;或由 os-zhuang / hotlong 批准,本席随即入队。看一处即可:页脚真值表那一段(账本 :321–:328)是否与你自己的经验一致。 Generated by Claude Code |
Fixes #16779
Governed surface (
.claude/**) — draft only. No seat flips this ready, enqueues it, or arms auto-merge (Prime Directive #14); a human merge is the review record.The eighth
platform-readings.mdincrement. The carrier card invited riders as comments, so the candidate set is 25 readings — 4 in the body, 21 across its eleven rider comments. Deduplicated against the file: 20 landed (17 new lines plus 5 corrections paid in place), 3 already present, 2 refused. Ceiling402 → 419, taken under the STANDING one-file exception rather than a decision card, recorded as aruledRaisesrecord quoting the exception verbatim.1. The footer family, folded into one truth table before any line was written
Five riders and both body readings land in one cell, and they disagree as long as the channel is read as the variable. Sorted by what the SENT body ended with, they stop disagreeing:
POST /pulls:311, re-confirmed by one rider)create_pull_requestcreate_pull_requestPOST /pullsPOST /pullsupdate_pull_requestbodyin the callupdate_pull_requesttitle+draft, no bodyupdate_pull_request:309)update_pull_request:310)update_pull_request:307)PATCH /pulls:308)PATCH /issues/comments/{id}:315)⇒ On create the channel is not the variable — the sent body's tail is. That is what the ledger's create row got wrong by attributing the append to bare REST only, and what rider A's framing got wrong by widening the attribution instead of replacing it. One row is outside the fit —
:307, the strip — and its input shape was never recorded, so it lands as exactly that: the one observation the discriminator does not explain, handled at worst case. ⛔ No controlled pair exists (two bodies differing only in the rule-line block, same channel, same session), so this is written as a fit, not as a finding, and the standing 写后必回读 is untouched.Two first-hand corroborations taken in this container while writing the increment, on the two PRs the body reading names: the stored body of the PR created with the block form carries exactly one footer (
_Generated by …/session_…_, one occurrence, zeroGenerated withblocks); the PR whose body was later edited footerless carries zero — the title-only update neither stripped nor synthesised anything.2. In-place corrections (line-neutral, they buy nothing)
:311:313:109:167total_count: 0」 → 「限定符形亦可回 …」repo:qualifier + hyphenated slug returned the full result set in the same sequence:1633. What was re-measured in this container rather than relayed
label:filters really AND.…/issues?q=is:issue+is:open+label:"pm:queue"+label:"domain:skills"→ HTTP 200, 10 distincthref="/objectstack-ai/objectstack/issues/N"anchors; RESTGET /issues?state=open&labels=pm:queue,domain:skills&per_page=100→ the same 10 numbers. Positive control that the anchors are not page chrome: the one-label page returns a different set, and all four numbers present only in the two-label page carry both labels on an API read.:164's 「⛔ 永不拿渲染列表定规模」 is left standing.github.com→ 200, twoclipboard-copyvalue=carriers holding the PR body (15,452 chars) and a comment verbatim. The same extraction over this card's own issue page yields zero comment carriers — its nineclipboard-copyhits are code-block copy buttons.api.github.comanswers 200 here with noAuthorizationheader at all, while the rider's container got 403 with the proxy's own body on the same path. Reachability forks per session and per URL shape; neither reading generalises, which is what the new line says.4. Dedup — every landed reading grepped against the ledger at
origin/mainTwo zero-hit greps per reading (one Chinese term, one English/identifier term) plus a positive control that hits, all run against
git show HEAD:.claude/skills/pm-dispatch/references/platform-readings.md(402 lines):尾部已是0create_pull_request0POST /pulls2既不删也不合成0no body0update_pull_request3受控对照0controlled pair0实测10唯一不合0strip0update_pull_request3三条署名块0attribution block0署名页脚3PATCHis idempotent评论 PATCH0comments/{id}0评论创建两通道1PATCHnormalises to one归一到末尾0one footer0PATCH /issues/{n}1满窗0merge_group run0merge_group5merge载体一致0auto_merge_enabled0merge_method2作者身份改拼0Claude-Session0squash3网页档0/actions/**040320权限分类器0permission classifier040320原始 markdown0clipboard-copy0payload5盲态0value 属性0issue 页1逐号相等0SSR 锚点0SSR1带引号短语0camelCase0search_issues3请审人0head: owner0list_pull_requests3--pairexits 4 on a real failure真缺声明0exit 40check-clause2-carriers.mjs1Already present — not rewritten (the grep HITS, and that is the verdict):
REST 可达性是会话属性1 ·core 上限 150001auto_mergereads null after a successful enable ⇒ read the timelineauto_merge字段…不稳定 1 ·timeline 入队事件1removed_from_merge_queueon a clean landing is not an eviction后 ~1 秒内跟1 (removed_from_merge_queue2)list_issuesdoes not AND itslabelsarray数组是并集1Refused, with the reason:
allow_auto_merge/allow_squash_merge/ …)allow_merge_commitalready appears where it changes a reading, and provenance-style records were removed from this corpus by the rules-only rewrite:109re-measurement read as falsifying the row5. Line budget
402 → 419(+17 new lines, 5 corrections in place, ⛔ no re-wrap counted as payment — the fourth increment measured zero line-neutral folds in this file and re-wrap funding is refused in any case).Per-line bytes of everything added or rewritten (cap 120):
The
ruledRaisesrecord added toscripts/pm/check-skill-line-ratchet.mjsquotes the standing exception verbatim and untranslated, in the shape the previous seven records use, withdelta: 17.6. Gates
Derived, not recalled:
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackwith no paths (it takes its own change set from the merge base) → 38 commands. All 38 run, exit code captured before any pipe.pnpm check:pm-skill-ratchet→ 0 (the ceiling row equals the landed count; its own 157-case self-test passes)pnpm check:pm-skill-id-lint→ 0 ·pnpm check:skill-frame-sync→ 0 ·pnpm check:doc-authoring→ 0 ·pnpm check:nul-bytes→ 0 ·pnpm check:pm-governed-merges→ 0pnpm check:ratchet-remedy-authority→ 0 ·pnpm check:required-contexts→ 0 · the remaining 29 → 0pnpm --filter @objectstack/lint run check:doc-formula-expressionsfirst returned exit 3, PREREQUISITE NOT MET (unbuilt workspace packages — NOT a finding and not a measurement). Built@objectstack/formula+@objectstack/lintthrough the shared verify lock and re-ran → 0.node scripts/pm/check-governed-merges.mjs --teston the two changed paths → exit 3,.claude/**×1: "GOVERNED — a human merge is the review record for this PR", one hit governs the whole PR.skip-changeset: nothing published moves —.claude/**andscripts/pm/**are both on the fast track.维护者速读(草稿)
改了什么 — 平台读数账本
platform-readings.md的第八次增量:落 17 行新读数、原地改 5 行(不是新增),行数 402 → 419;棘轮脚本里该文件的上限行同步抬到 419,并按常设例外记一条ruledRaises(逐字引 SKILL.md 那句,不翻译)。候选 25 条(卡正文 4 条 + 11 条 rider 评论),去重后 20 落地 / 3 已有 / 2 拒收。为什么改 — 这张卡是本轮读数的载体卡,十一条 rider 评论各带自己的 n。它们里最要紧的一组彼此矛盾:署名页脚到底会不会被平台追加,同一条通道有人测到追加、有人测到不追加。把它们按「送出体尾部长什么样」排成一张真值表,矛盾就消失了 —— 判据是你送出去的正文结尾,不是你走 MCP 还是裸 REST。账本原来那行把追加归因给「裸 REST 建 PR」,是错的归因,这次原地改掉。另外四条原地改的行,都是同一形状:话本身没错,但脱离上下文读会把人引到危险方向(尤其
--pair那行,会让人把一次真实的拒绝当成容器假象)。风险与代价(含回滚) — 只动两个文件,都是 agent 自己读的规则/事实,不进产物、不影响任何发布包(所以
skip-changeset)。风险面是「写错事实比不写更糟」:因此每条落地行都做了中英各一次零命中 grep 加一个必中的阳性对照,三条命令与计数在正文第 4 节;三条来自别人容器的读数,我在本容器里重测了(搜索页锚点、PR 页评论载体、api 主机可达性),重测结果与相邻行一起写进去。回滚 = revert 这一个提交,账本回到 402 行、上限行回到 402,无生成物、无下游依赖。席位意见 — (留空,待席位复核填写)
你要做的 — 这是受管面(
.claude/**),按 Prime Directive #14 只能由您手工合并:任何 agent 都不会把它转 ready、不会入队、不会挂 auto-merge。您需要看的是三样:① 第 1 节那张真值表的结论您认不认(「建 PR 侧通道不是变量」);② 第 2 节五条原地改的前后对照,尤其:109和:167—— 它们弱化了两句原来说得很硬的话;③ 第 4 节的拒收四条,看有没有您认为不该拒的。认可就手工合并,不认可直接在 PR 上说撤哪一条。验收备注(范围外的观察 — noted, not filed)
POST /pulls,送出体尾部是空行 + 横线 + session-URL 页脚块,存回 15520 B 对送出 15521 B,差恰一个被剥的行尾换行,页脚一条、零追加、unified diff 只剩那一行。它与第 1 节真值表同向,⛔ 不写进本次账本 —— 本卡的候选集在派发时封口 —— 留给第九次增量。check-skill-line-ratchet/check-skill-id-lint与check-governed-merges --test并列写成「exit 3」。实测:前两者通过时是 exit 0,只有 governed-merges 的治理判定是 exit 3。按实测报告,⛔ 未改卡。needs-user-decision标签与 os-zhuang 请审。派发词的裁决区只授权 draft PR 加skip-changeset,所以这两件留给席位在 ACCEPT 时武装,dev ⛔ 未代做。Generated by Claude Code
Generated by Claude Code