Skip to content

skills(pm): land the ruled REST-channel prescriptions and closed-inclusive dedup (ceiling 87 → 93) - #14236

Merged
os-zhuang merged 3 commits into
mainfrom
claude/issue-13900-rest-channel-prescriptions
Sep 2, 2026
Merged

skills(pm): land the ruled REST-channel prescriptions and closed-inclusive dedup (ceiling 87 → 93)#14236
os-zhuang merged 3 commits into
mainfrom
claude/issue-13900-rest-channel-prescriptions

Conversation

@os-justin

Copy link
Copy Markdown
Collaborator

Fixes #13900
Fixes #13965

Two maintainer-ruled cards, one governed-face PR (director batch 22, 2026-09-01, maintainer 「同意」), because the raised ceiling is meant to be spent once: 「提额预算一次用足」. Each card keeps its own closure criterion and its own commit.

What landed

Commit af0a8e5 — the #13900 half. On .claude/skills/pm-dispatch/references/rest-channel.md's list-cards row, the two prescriptions in the faithful form the previous dev flight measured: both refusals (⛔ do not follow the issues-list Link: rel="next"; ⛔ an enumeration whose total was never cross-checked is not a reading), the &page=N-until-a-short-page termination condition, the open_issues_count cross-check with the open-PR subtraction, the cause-unknown boundary, and the note that a keyword positive control is structurally blind to this class. Paid in place per ruling C: the red-window restatement is retired, and the pointer the ruling permits is folded into the 不可迁移 heading at zero line cost, so the red-window rule now has exactly one home. Ceiling row raised 87 → 93 in scripts/pm/check-skill-line-ratchet.mjs, with both rulings quoted verbatim beside it.

Commit b7c2e84 — the #13965 half. The dedup prescription itself now states that dedup must include closed cards, with the recency rationale (a card is at its most duplicable right after it closes) and both measured directions from 2026-08-31. Open-scoped dedup becomes an exception that has to be declared rather than the default. The state and label listing reads keep state=open untouched — 批 13 is not reopened, and the prescription says why: that convention governs state reads, and dedup is not a state read.

The rulings this PR executes — verbatim, untranslated

Ruling on #13900 (comment 5494348033, 2026-09-01T13:02:13Z), the legitimacy of the ceiling raise:

B 获授权:rest-channel.md 天花板 87 → ≤93 行,提额 PR 引用本裁决评论(棘轮自己的合法出口);两条处方按 dev 已测的忠实版落(两个拒绝 + &page=N 短页终止条件 + open_issues_count 减开放 PR 交叉核对 + 成因未知边界 + 关键词对照结构性盲区注记)

C 同批:退役 L58 对红窗常设规则的复述 —— 内容归属裁定:红窗规则由 platform-readings.md 配额段独家持有,rest-channel.md 只留指路

#13965 的查重处方修订同一 PR 落地(同批裁决,见该卡)—— 提额预算一次用足

D(23 字节残句)维持排除;⛔ 「已修」不得写成「已解释」—— 成因未知句必须保留。

Ruling on #13965 (comment 5494345834, 2026-09-01T13:02:02Z):

采第三形:把「查重必须含 closed(带时近说明)」写进查重处方本身 —— 零新增配额、零新机制;开域查重从默认降为需要说明的例外

(a) 近期闭卡补扫 / (b) state=all 时近界均不加

#13 不重开:状态读的 state=open 约定维持原样

Both excluded options stayed excluded: D (the 23-byte fragment) is not in this diff, and the cause-unknown sentence is present — the landed text says the prescription removes the dependency on the header, and makes no claim about whether the truncation is GitHub's own cursor or the egress proxy rewriting Link. Nothing here reads 「已修」 as 「已解释」.

Line budget — measured with the gate's own wrapLine, pinned at the landed count

lines
rest-channel.md before 87
retired (red-window restatement + its adjacent blank) −2
added — the two enumeration-completeness prescriptions +5
added — the closed-inclusive dedup obligation +3
landed 93
authorized ceiling ≤93

Net growth +6, exactly the authorized budget, spent once across both cards. The ceiling is pinned at 93 = the landed count, headroom 0, same convention as every neighbouring row — not at the authorization's upper bound. Every added line was produced by the gate's own wrapLine, so the file is at its canonical packing and no line exceeds the 120-byte budget. No re-wrap funding was used or attempted (筹行 is banned, and the file measures zero reclaimable lines in any case); the ruled raise plus the ruled retirement is the whole funding. The heading pointer cost zero lines: it fits inside the existing heading at 116 bytes.

Nothing else in the ceilings map moved — the diff touches exactly the rest-channel.md row and its comment.

Gates

Union derived by node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands after the final commit, at head ce400df — 20 families, 18 matched by path and 2 by change KIND (this diff edits a gate script). Every exit code captured by redirect before any pipe.

Green (exit 0): check:pm-skill-ratchet · check:pm-skill-id-lint · check:agent-test-spelling · check:bash32-floor · check:cli-command-ids · check:cross-package-test-inputs · check:doc-authoring · pnpm --filter @objectstack/lint run check:doc-formula-expressions · check:entry-guard · check:parse-guard · check:pm-governed-merges · check:pnpm-filter-targets · check:skill-frame-sync · check:watch-hint-literal · check:pm-dispatch-gates · scripts/check-ci-filter-parity.mjs · scripts/check-cross-package-test-inputs.mjs · scripts/check-shard-attestation.mjs · scripts/pm/bare-root-worklist.mjs --self-test · plus check:nul-bytes (not derived; any edit owes it) and the repo-wide pnpm lint, both exit 0 at this head.

NOT MEASURED: node scripts/check-test-completeness.mjs exits 3 with no argument — it needs a saved turbo run test log, which the local family invocation has none of. Its own words: "Nothing was measured … ⛔ It is NOT a finding." It runs in CI.

The ratchet's own verdict line at this head, quoted rather than inferred from an exit code:

✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/rest-channel.md is 93 lines (ceiling 93; headroom 0).

origin/main was merged into the branch before this run (it had moved two commits, neither touching either file), so the union above was derived and run on the tree that is at ce400df, not on a stale one.

Governed face

.claude/** — draft PR, human merge by GOVERNED_APPROVERS, no auto-merge, not queued. skip-changeset applies: the diff is .claude/** plus scripts/pm/** and publishes nothing from any package. The published skills/ directory is untouched, so the published-skill line and token readings are not owed here.


Generated by Claude Code

…heck

The list-cards row prescribed an endpoint but asserted nothing about the
completeness of what it returns. Measured 2026-08-31/09-01 in two repos, a
walk that follows `Link: rel="next"` reports itself exhausted at 102 items
while the page-number walk on the identical query returns 287 / 448 and
matches `open_issues_count`. The failure is silent and toward the dangerous
side, and a keyword positive control is structurally blind to it: a known-hit
card sitting in the first page answers correctly over a truncated corpus.

Lands both refusals (do not follow the cursor; an enumeration whose total was
never cross-checked is not a reading), the `&page=N` short-page termination
condition, the `open_issues_count`-minus-open-PRs cross-check, the
cause-unknown boundary (GitHub's cursor vs the egress proxy rewriting the
header — the prescription removes the dependency, it does not explain it),
and the keyword-control blind-spot note.

Paid in place: the red-window restatement is retired and its pointer folded
into the section heading at zero line cost, so the red-window rule now has
exactly one home in platform-readings.md's quota section. The ceiling moves
87 -> 93 on the maintainer ruling quoted verbatim beside the row.
…sed cards

Dedup asks whether a subject has been carded before, and that answer lives
disproportionately in closed cards, so an open-scoped scan is blind by
construction rather than by malfunction. Measured 2026-08-31 in both
directions on one day: an open-scoped dedup missed a same-subject card that
had been ruled and closed six hours earlier and a duplicate was filed and
dispatched; a dedup that included closed cards hit a same-shape closed card
and no duplicate was opened.

The obligation lands in the prescription text itself -- zero new quota and no
new mechanism -- so open-scoped dedup becomes an exception that has to be
declared rather than the default. The state and label listing reads keep
`state=open` untouched: that convention governs state reads, where a closed
card is archive, and dedup is not a state read.
@os-zhuang
os-zhuang marked this pull request as ready for review September 2, 2026 01:20
@os-zhuang
os-zhuang enabled auto-merge September 2, 2026 01:20
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 2, 2026
Merged via the queue into main with commit 546886f Sep 2, 2026
34 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-13900-rest-channel-prescriptions branch September 2, 2026 02:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants