Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .claude/skills/pm-dispatch/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -629,7 +629,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
- skills 席自审按契约复审档、清单不减,然后直接落地(ready → 入队),⛔ 不推维护者。
- 路径面干净的才转 ready → 入队;队列是唯一被认可的落地路径,⛔ 永不队列外合并。
- 入队资格 = PR 上每一个 check 全绿,⛔ 不是 required 子集;required 集是队列强制的地板。
- 非必查门的红要么是真缺陷要么是坏门,两者都归 PM 入队前处置。
- 非必查红是真缺陷或坏门,归 PM 入队前处置;第三种按设计而红,三条全立才可带红入队:
- 源码自述 pushed 分支上按设计而红、不跑 `merge_group`、PR 评论记明门与因,缺一即否。
- 本段只适用本循环派发的 dev PR;PM 自己的工具 PR 留维护者。

### 入队与落地
Expand Down
1 change: 1 addition & 0 deletions .claude/skills/pm-dispatch/references/core-rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@
- 验收后先取 PR 路径面,一条命中受管面即分叉,⛔ 不翻正式、不入队、不挂自动合并。
- 受管面 PR 留 draft 并向两个授权批准账户请审;无达档复核 PASS 的契约卡 ⛔ 禁止入队。
- 入队资格是每一个检查全绿 ⛔ 不是必查子集;碰生成物的 PR 入队前先同步再重生成。
- 唯一例外:源码自述 pushed 上按设计而红、不跑 `merge_group`、评论记明门与因,三条全立。
- 跟到合并为止并每轮读队列成员资格与 `origin/main`;踢出按签名台账四分支处置。
- 合并即发布的仓无验证层不合并,落地判据是已发布且探测通过 ⛔ 不是 MERGED。
- 每轮打中文轮次报告,含判决表、升级项、代裁清单、等人合项、受管合并审计与五指标。
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/pm-dispatch/references/review-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
- CI 收敛读数只属于复核侧:dev 的契约是草稿 PR 时点交报,gate `in_progress` 是诚实读数。
- 翻 ready、挂 auto-merge 或入队前,亲核 Lint & Repo Gates 与 TypeScript Type Check 两个 job。
- 两个 job 的 `conclusion` 都须为 `success`,门禁族跑在其内;⛔ 不因报告写了本地绿跳过。
- 两 job 只是 required 地板,入队资格另要求全部 check 全绿;真绿跑法见 `true-green.md`。
- 两 job 只是 required 地板,入队另要求全 check 绿(第三种情形见 SKILL.md);跑法见 `true-green.md`。
- 收敛期转红走补丁轮续派原 dev,⛔ 不作 REWORK 的理由;重量级卡可在派发令写本单等 CI。
- 每个门禁读数先钉到 PR 当前 head:比对 run `head_sha` 与 `head.sha`,不一致的双向都不入账。
- ⛔ 非当前 head 上的 `cancelled` 零动作、永不重跑:新推送自带全套 run。
Expand Down
37 changes: 35 additions & 2 deletions scripts/pm/check-skill-line-ratchet.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,32 @@ export const CEILINGS = new Map([
// narratives, incident post-mortems and rationale tails leave the corpus; one
// rule per ≤120-byte line, 红线 first, templates last). Landed count, headroom
// 0, same convention (lowering is always legitimate).
['.claude/skills/pm-dispatch/SKILL.md', 811],
// Raised 811 → 812 by the queue-entry third-case ruling — an ORDINARY raise
// under this map's own maintainer exit, ⛔ not a cross-file move. Maintainer,
// live PM chat with the director seat, 2026-09-08, decision batch #91, under
// the standing delegation 「继续决策」, adopting option A of the skills seat's
// recommendation; the director record's own words (#16516):
// 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.
// The content is the #16502 ruling (decision batch #73, 2026-09-07, maintainer
// 「同意」 on options C + D): a red on a NON-required check admits a PR to the
// queue 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 — three conjunctive conditions, none
// droppable. ONE line, and it could not be paid in place — measured, not
// assumed: 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; and of the file's
// 601 adjacent bullet pairs ZERO merge under the 120-byte cap (smallest 121 B,
// and that one splices two rules). So the two-case premise line is compressed
// in place (88 → 115 B) to carry the case's head and the conditions land as one
// 112 B line; re-wrap funding is refused per the 2026-08-17 rule, and deleting
// a ruled clause is refused on the state-machine precedent. Landed count,
// headroom 0, same convention.
['.claude/skills/pm-dispatch/SKILL.md', 812],
// Raised 223 → 244 by the triage reading-cost card (maintainer ruling
// 2026-08-20, quoted in the raising PR): three mandated conventions land in
// the runbook's triage sections. Landed count, headroom 0, same convention.
Expand Down Expand Up @@ -744,7 +769,15 @@ export const CEILINGS = new Map([
// instead of the corpus. Set at the landed line count (headroom 0, same
// convention as every entry above); it is a NEW file, so this is an added row
// and no other row moves.
['.claude/skills/pm-dispatch/references/core-rules.md', 150],
// Raised 150 → 151 by the same queue-entry third-case ruling (decision batch
// #91, 2026-09-08, option A — quoted in full at the SKILL.md entry above): the
// twin line that SKILL.md:44 orders (一条规则在本文与核心条款一处改动,另一处同
// PR 同改), one 116 B line stating the sole exception with all three conditions.
// Could not be paid in place: the rule line holds 114 B of 120, and of this
// file's 121 adjacent bullet pairs ZERO merge under the cap (smallest 156 B).
// Landing it in SKILL.md alone was option C, refused by the ruling: the twin
// obligation is not waived. Landed count, headroom 0, same convention.
['.claude/skills/pm-dispatch/references/core-rules.md', 151],
// The app-vs-platform boundary — the deciding question (could this be written
// from the metadata alone, with no knowledge of this company?), the publication
// test (one consumer is a use, two is a contract) and the two anti-patterns.
Expand Down
Loading