Skip to content

skills(pm-dispatch): the queue-entry rule names its third case — red BY DESIGN on a non-required check — and the two ceilings rise by one as ruled - #17021

Merged
os-zhuang merged 2 commits into
mainfrom
claude/issue-16516-third-case-ceiling-raise
Sep 9, 2026
Merged

skills(pm-dispatch): the queue-entry rule names its third case — red BY DESIGN on a non-required check — and the two ceilings rise by one as ruled#17021
os-zhuang merged 2 commits into
mainfrom
claude/issue-16516-third-case-ceiling-raise

Conversation

@yinlianghui

Copy link
Copy Markdown
Collaborator

Fixes #16516

Governed surface (.claude/** plus the ratchet map) ⇒ draft PR, maintainer merge — not flipped ready, not queued, no auto-merge. #16502 remains open: it is blocked on this landing plus the repository setting D, and it is not addressed here.

This is the skill half the card still owed after PR #16831 landed the gate half. It lands the queue-entry rule's third case exactly as ruled — option A on the ceiling question (director record 5583981065, decision batch #91, 2026-09-08): the ready text at 115 / 112 / 116 B, all three conjunctive conditions intact, the two ceilings raised by one, 「队列是唯一被认可的落地路径」 untouched.

What changed — 4 files, +39 / −4, on head 49e0fa05 (merged origin/main 92949593, #16915 included)

1. .claude/skills/pm-dispatch/SKILL.md — the 〈复核〉 queue-entry block (lines 630–634 on this head)

The two-case premise line is compressed in place to carry the third case's head, and one new line states the three conditions. Bytes are Buffer.byteLength(line, 'utf8'); the cap is 120.

line before after
premise (in place) 「- 非必查门的红要么是真缺陷要么是坏门,两者都归 PM 入队前处置。」 88 B 「- 非必查红是真缺陷或坏门,归 PM 入队前处置;第三种按设计而红,三条全立才可带红入队:」 115 B
conditions (NEW) 「- 源码自述 pushed 分支上按设计而红、不跑 merge_group、PR 评论记明门与因,缺一即否。」 112 B

The three conjunctive conditions of the #16502 ruling map one-to-one: (a) the check's own source names the red as by-design on a pushed branch → 源码自述 pushed 分支上按设计而红; (b) the check does not run on merge_group → 不跑 merge_group; (c) the PR comment records which check and why → PR 评论记明门与因. 「缺一即否」 / 「三条全立」 is triage's 「⛔ 少一个条件都不行」. Byte-identical and untouched: 「- 路径面干净的才转 ready → 入队;队列是唯一被认可的落地路径,⛔ 永不队列外合并。」 and 「- 入队资格 = PR 上每一个 check 全绿,⛔ 不是 required 子集;required 集是队列强制的地板。」.

2. .claude/skills/pm-dispatch/references/core-rules.md — the twin line (SKILL.md:44 「一条规则在本文与核心条款一处改动,另一处同 PR 同改」)

One NEW line directly under 「- 入队资格是每一个检查全绿 ⛔ 不是必查子集;…」: 「- 唯一例外:源码自述 pushed 上按设计而红、不跑 merge_group、评论记明门与因,三条全立。」 116 B. Option C (SKILL.md alone) was refused by the ruling; this is the twin it requires.

3. .claude/skills/pm-dispatch/references/review-checklist.md:43 — the restatement points at the third case, in place

The previous flight noted (not filed) that this line and true-green.md:3 restate the all-green rule without the third case; this PR is the carrier the note named. Line 43 stated the rule as a rule, so it is rewritten in place — line count unchanged (77 / 77), no ceiling touched: 「- 两 job 只是 required 地板,入队资格另要求全部 check 全绿;真绿跑法见 true-green.md。」 108 B → 「- 两 job 只是 required 地板,入队另要求全 check 绿(第三种情形见 SKILL.md);跑法见 true-green.md。」 119 B. true-green.md:3 is left as is: it is already a pointer to the SKILL.md clause (「见 SKILL.md 〈复核〉的入队资格条款…」), so a reader lands on the third case there.

4. scripts/pm/check-skill-line-ratchet.mjs — the two ceiling rows, 811 → 812 and 150 → 151

Each row carries the ruling record in the map's own precedent form for an ORDINARY ruled raise under the header's maintainer exit (the platform-readings.md 324→358 / 358→397 rows; the state-machine.md 43→44 row the ruling itself names as precedent). Not a ruledRaises record: those exist only on a CROSS_FILE_MOVES destination, and neither SKILL.md nor core-rules.md is one (the only declared destination is platform-readings.md), so the map-wide move-total verdict is unaffected — it sums declared participants only. No other row moves; both rows read 「Landed count, headroom 0」 on this head.

The rulings this raise rests on (the ratchet header requires them quoted in the raising PR)

Maintainer ruling on #16502 (decision batch #73, 2026-09-07, options C + D, maintainer 「同意」), as the card's director record states it: "C: a PR may enter the queue carrying a red on a non-required gate when that gate's own text says the red is expected on a pushed branch and is remedied at merge time … The existing rule's premise — 'a red on a non-required gate is either a real defect or a broken gate' — has a third case, red by design, and the rule must name it rather than leave every future instance to a decision box." The admissibility conditions as the card states them: "a red on a non-required check is admissible only when (a) the check's own source names the red as by-design on a pushed branch, (b) the check does not run on merge_group, and (c) the PR comment records which check and why. Anything else stays a defect or a broken gate. ⛔ Keep 「队列是唯一被认可的落地路径」 untouched — option A (manual merge) was refused."

Ceiling ruling, director seat record 5583981065 (decision batch #91, 2026-09-08, maintainer via the standing delegation 「继续决策」, adopting the skills seat's recommendation A), verbatim:

Ruled. Ruled content is not growth: the ratchet's own maintainer exit exists for exactly this, and the precedent (state-machine.md 43→44) is on the map. Land the ready text (115 / 112 / 116 B lines) with all three conjunctive conditions intact. ⛔ B refused (collapsing an unrelated rule to a pointer is an unmeasured weakening of something else); ⛔ C refused (SKILL.md:44 同 PR 同改 is not waived); ⛔ D refused by triage already. 「队列是唯一被认可的落地路径」 stays untouched.

Why a raise and not an in-place payment — measured in the previous flight's dev report (5582599379) and re-read on this tree: the conditions need ≥107 B against 8 spare bytes on the 112 B rule line; the tightest self-contained one-line form is 137 B; of 601 adjacent bullet pairs in SKILL.md and 121 in core-rules.md, zero merge under 120 B. Re-wrap is not currency, and deleting a ruled clause was refused (B).

Verification (all on head 49e0fa05 unless stated)

Ratchet gate, node scripts/pm/check-skill-line-ratchet.mjs → exit 0, its own lines:

✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/SKILL.md is 812 lines (ceiling 812; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/core-rules.md is 151 lines (ceiling 151; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/review-checklist.md is 77 lines (ceiling 77; headroom 0).
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/true-green.md is 32 lines (ceiling 32; headroom 0).
✓ check-skill-line-ratchet: declared cross-file moves: 1, total ceilings down 9 lines.

--self-test → exit 0, 「✓ check-skill-line-ratchet self-test: 157 cases pass.」 Every edited line is under the 120-byte cap (115 / 112 / 116 / 119 measured above; the gate's length rule is green on all four files).

Reverse verification of the raise (one-off, trap-guarded, from the committed state; no test file left behind): with the two map rows reverted on disk to 811 / 150 — proven on disk by anchor counts (811-row 1, 812-row 0; 150-row 1, 151-row 0) and git diff --stat HEAD = 2 insertions / 2 deletions — the gate reads exit 1 with exactly two ✗ lines: 「SKILL.md is 812 lines; the ratchet ceiling is 811」 and 「core-rules.md is 151 lines; the ratchet ceiling is 150」. Restore via git checkout HEAD -- path, proven by git diff HEAD empty, porcelain empty, and git hash-object = the HEAD blob e8bce47c1f0cb3f87c68aea4db27e8573845493a. Direction: red as expected; the raise is exactly the two lines the ruling sized.

Gate union — derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack from the real changeset: 39 commands (the dispatch's 38 plus pnpm check:required-contexts, newly derived). All 39 run on 49e0fa05 with each exit captured before any pipe: 39 / 39 exit 0; node scripts/pm/dispatch-gates.mjs --ran … on 49e0fa05 → exit 0, 「✓ dispatch-gates --ran: 39 derived famil(ies) accounted for — 39 run, 0 NOT-MEASURED.」 Ratchet-relevant lines: 「✓ check-skill-id-lint: 26 file(s) clean (pattern /#[0-9]{3,}/g).」 · 「✓ check-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 files」 · 「✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces …」 · 「check-nul-bytes: OK (scanned 8417 text file(s) … no raw ASCII control bytes).」 · 「OK check-ratchet-remedy-authority: 228 scripts swept … 15 mark the expanding remedy ⛔ MAINTAINER-ONLY …」. pnpm check:pm-dispatch-gates runs past the 600 s foreground cap, so it was started detached and awaited in the foreground with tail --pid; exit file 0, its own line 「✓ dispatch-gates self-test: 1561 cases pass.」 (02:21–02:32Z on 49e0fa05; the same line and exit on the pre-merge head 2443306f). pnpm --filter @objectstack/lint run check:doc-formula-expressions ran after building the @objectstack/lint upstream closure under os-verify-lock.sh (VERDICT command-exit 0, 224 s held) — the only build in this PR, taken as that gate's prerequisite; no package is touched, so no package test or typecheck is owed.

Governed test: node scripts/pm/check-governed-merges.mjs --test … on the four paths → exit 3, the three .claude/** paths named as governed. skip-changeset: nothing published moves — .claude/** and scripts/pm/** are outside every package's files[].

验收备注

  • noted, not filed: references/true-green.md:3 keeps its wording — it is already a pointer to the SKILL.md clause, not a restatement of the rule; 承接者:无.
  • noted, not filed: .claude/agents/os-dev.md carries the seat-side default 「删不出等量内容 ⇒ 报 blocked,⛔ 不抬 ceiling」; this PR's raise is the maintainer's own ruling through the ratchet's maintainer exit, which is the case that default defers to (the previous flight reported and stopped exactly as it says); no text change owed; 承接者:无.
  • Sibling landing: skills(pm-dispatch): clause-② cards build at the default tier and are gated by the contract review at CONTRACT_REVIEW_TIER (#16905) #16915 was described to this flight as a waiting draft; it was ready, queued and merged (92949593) while this branch was open. Merged into this branch cleanly (its SKILL.md and core-rules.md edits are disjoint from these lines; core-rules.md:124 sits directly above the new line 126 and merged without conflict). Another actor's state, not touched.

维护者速读(草稿)

改了什么:PM 技能的入队规则补上了第三种情形 —— 非必查门「按设计而红」:该门源码自述 pushed 分支上按设计而红、不跑 merge_group、PR 评论记明是哪道门与为什么,三条全立才可带红入队;核心条款孪生行同改;复核清单里那句「全部 check 全绿」改成指向第三种情形。为了装下这两行,行数棘轮的两个上限各抬 1(SKILL.md 811→812、core-rules.md 150→151),上限行旁边记着这次裁决。

为什么改:#16502 的裁决(C + D,您已「同意」)要求规则点名这种情形,否则每次 trailer 类的红都要再开一次决策箱;而两个文件实测无法原地容纳(余量 8 / 6 字节,三个条件至少 107 字节,722 对相邻行无一可折并),您在决裁批 #91 选了 A:已裁内容不是增长,走棘轮自己的维护者出口抬 1 行。本 PR 只做这件事。

风险与代价(含回滚):入队规则从「全绿」放宽为「全绿,或三条全立的按设计红」,放宽面被三个合取条件锁死,「队列是唯一被认可的落地路径」一个字未动;棘轮上限净 +2 行,余量仍为 0。回滚 = revert 这一个 PR(四个文件同回)。⚠️ 设置 D(squash_merge_commit_messagePR_BODY)与本 PR 无关、本 PR 不依赖它;它仍是 #16502 关卡的另一半。

席位意见:(留空)

你要做的:人工合并本 PR(受管面);合并后 #16502 只剩设置 D 一项阻塞。

🤖 Generated with Claude Code

Generated by Claude Code


Generated by Claude Code

…BY DESIGN on a non-required check — and the two ceilings rise by one as ruled

SKILL.md line 633 is compressed in place to carry the case's head and a new
line states the three conjunctive conditions; core-rules.md gains the twin
line; review-checklist.md's restatement points at the third case in place.
The ratchet map raises SKILL.md 811 -> 812 and core-rules.md 150 -> 151 under
its own maintainer exit, each row quoting the ruling.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HxLw5aKDPR5RJgyUR7Exkd

Copy link
Copy Markdown
Collaborator Author

维护者速读 — PR #17021(#16516,skills 席终稿,2026-09-09T02:38Z)

改了什么 — PM 技能的入队规则补上第三种情形:非必查门「按设计而红」—— 该门源码自述 pushed 分支上按设计而红、不跑 merge_group、PR 评论记明是哪道门与为什么,三条全立才可带红入队(SKILL.md 原「两种情形」那行原地压缩 + 新增一行);核心条款孪生行同改(新增一行);复核清单那句「全部 check 全绿」改成指向第三种情形(原地)。为装下这两行,行数棘轮的两个上限各抬 1(SKILL.md 811→812、core-rules.md 150→151),上限行旁边逐字记着你的裁决。

为什么改 — 你在 #16502 裁了 C + D:规则要点名这种情形,否则每次 trailer 类的红都要再开一次决策箱。两个文件实测装不下(余量 8 / 6 字节,三个条件至少 107 字节,722 对相邻行无一可折并),你在决裁批 #91 选了 A:已裁内容不是增长,走棘轮自己的维护者出口抬 1 行。

风险与代价(含回滚) — 入队规则从「全绿」放宽到「全绿,或三条全立的按设计红」;放宽面被三个合取条件锁死,「队列是唯一被认可的落地路径」一字未动。棘轮上限净 +2 行,余量仍为 0。回滚 = revert 本 PR(四文件同回)。设置 D 与本 PR 无关、本 PR 不依赖它;它仍是 #16502 关卡的另一半。

席位意见 — 接受。本席在拉下来的分支头上复跑:棘轮 exit 0(812/812、151/151、77/77、32/32),id-lint 26 文件干净,四轴框架两份同构,控制字节 0;改动行字节 115 / 112 / 116 / 119;「队列是唯一被认可的落地路径」在头上 grep 1 命中;上限记录形态与 state-machine 43→44 先例同形。CI 02:35Z 无红(4 项在跑)。PR #16915 在本 PR 运行中已合并并干净地合进了本分支。

你要做的 — 合并;或由 os-zhuang / hotlong 批准,本席随即入队。看两处:① 新增两行是否逐字对应 #16502 裁决的 (a)(b)(c);② 认可用棘轮的维护者出口抬这 2 行。


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review September 9, 2026 03:34
@os-zhuang
os-zhuang enabled auto-merge September 9, 2026 03:35
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 9, 2026
Merged via the queue into main with commit 3c27a43 Sep 9, 2026
40 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-16516-third-case-ceiling-raise branch September 9, 2026 04:09
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 needs-user-decision size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants