skills(pm-dispatch): charter references — clause-② applicability, the shape-1 red exception, the two-layer landing, the three-class blocker rule, the director batch (#17942 chain, second half) - #18038
Conversation
… red with the same name and failure signature is not counted Member 17934 of the charter chain (head 17942), references half. The ruling, option 1, verbatim (maintainer 「以上接受你的建议。」 to the seat's text): **1(荐)**:加一条例外——某个红若在该 PR 的 merge-base 提交上**同名、同失败签名**地红 ⇒ 不计入「全绿」;主干红仍必须立单止血(不变)。判据机读:API 能读 base 提交上同名 check 的结论,不靠席位口头判断。 contract-review.md 60 → 60. Added on the ③ line: the exception clause (merge-base 上同名同失败签名的红不计); one new line states the signature — same failing step and same first error line, read from the base commit's check runs by the API, never a seat's word — and the unchanged stanching duty (主干红止血立单不变). Paid inside the file: the two 父会话 lines (逐字采纳/整体作废 with its three void causes, and ⛔ 不改写、删节、润色) folded into one line — they are one rule (adopt verbatim or void whole) and no clause is lost. Every edited line ≤ 120 bytes. Claude-Session: https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8 Co-authored-by: Claude <noreply@anthropic.com>
…lity per lane, once Member 17933 of the charter chain (head 17942), references half. The misreading the card carries, verbatim (the maintainer, in a dispatch round): 「不是说你的 ui 车道不需要契约复审了吗?为什么还有 `needs:contract-review`」. lanes/ui.md :38 already states the answer for objectui (landed in the rules-layer PR); this commit makes contract-review.md carry the per-lane statement it points at, so a lane file pointing here finds the rule and not a pointer back. contract-review.md 60 → 60, four lines rewritten in place, no line added: - 复核归属与资格 :27 → 「逐车道:spec 席达档审契约增量;余席默认档自审加门禁、挂标;豁免仅独立性件与保险丝」 (the three-paragraph synthesis the card asked for, on one line). - :12 drops 「达档只在 spec 席」 — with the per-lane line and the independence piece open to a claimed card's cross-lane face, the fragment is no longer true; the rest of the line is unchanged. - 落地前检 ① 「(spec 席达档)」 → 「(档位按逐车道)」 for the same reason. - 降档保险丝 :60 closes the derivation the card names: 「复核正为补偿低档派发而存在」 → 「复核 ⛔ 不随派发档位免除」 (a non-low-tier dispatch does not waive the review; every lane hangs the label). Every edited line ≤ 120 bytes. Claude-Session: https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8 Co-authored-by: Claude <noreply@anthropic.com>
…r waits for the maintainer's word, references-only lands through the queue Member 17950 of the charter chain (head 17942), references half; the guard's tier is its own card. The ruling, verbatim — the boundary put to the maintainer: > **规则层(你确认)**:所有 SKILL.md 级的规则文本——发布的 `skills/**`(两个仓)、`.claude/skills/*/SKILL.md`(含 pm-dispatch 本体和内部 playbook)、`core-rules.md`、`.claude/agents/**`、hooks、settings、`AGENTS.md`、`CLAUDE.md`、ADR。 > **事实层(席内契约复审档复核后入队)**:只有 `.claude/skills/pm-dispatch/references/**`——平台读数表、runbook、契约复核细则、车道文件、状态机细则。 Maintainer: 「我点头」 contract-review.md 60 → 60. Added under 落地前检③: 「规则层等维护者的字;受管路径全在 `.claude/skills/pm-dispatch/references/` 者达档过本三条入队」 — the path spelled without the `**` glob, the tier's own review being the ① PASS at the served tier the fuse verifies. Paid inside the file: the 载体纪律 line 「受管面人工合并 ⛔ 不替代复核,两道保障叠加」 deleted — its rule survives in SKILL.md 〈复核〉 ① (复核结论照常写在 issue 上;技能面 hunk 须由契约复审档的席复核) and in AGENTS.md Prime Directive 14 (a human merge is the review record, not a relaxation). Every edited line ≤ 120 bytes. Claude-Session: https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8 Co-authored-by: Claude <noreply@anthropic.com>
…ost-dispatch cross-lane face; the runbook carries the three-class detail Chain head 17942, references half. Rulings, verbatim: - director record: to decision batch #131 presented as `1A(+三类表)·2(1)·3A·4B`: 「同意」 「同意」 - maintainer 「以上接受你的建议。」 to the seat's text: **A(荐)**:认领席跟到 MERGED。具体动作:标签不换、assignee 不清;认领席起一个隔离的 fable 复核子代理审契约(就是你对 17718 那句授权的通用化),复核记录写明 `Implemented-by:` 分支、`Reviewed-by:` 席位会话;受管面照旧留 draft 给你。spec 席仍是**新** spec 卡的唯一入口(分诊路由不变),只是不再收回已交付的活。 验收**必需**的衍生工作 → 立成父单的 sub-issue,认领席自动拥有,同席做到 MERGED,优先级继承父单。… **阻塞项**(`Blocked-by:` 指向的卡):无人认领 → 被阻塞的席位直接认领做掉;已被别席在飞 → 等,但那张卡在对方车道排到最前(`pm:blocking` 机制已有)。… **顺带发现**(与验收无关)→ 独立卡回池子,不并,防范围蔓延。边界不变:一卡一 PR;spec 新工作入口归 spec 席。 - ruling ③ (maintainer 「同意」), point 2: 2. **唯一例外:在飞卡的衍生子卡**(今早 Q2 第一类)。拥有它的席位带父卡的域和优先级直接立卡并派发,不等分诊;分诊的小时 sweep 会事后扫到它,查到重复按 `duplicate` 关。Q2 其余三类不变。 contract-review.md 60 → 60, two lines rewritten in place: - 复核归属 :26 gains 「借复核不移卡,新 spec 工作恒归 spec 席」 — the imported review moves no card and is not the intake for new spec work. - 独立性件 :34 → 「独立性件:契约真分叉、dev 挂旗或派发后的跨车道面(含 spec)⇒ 起隔离的达档复核子代理」 — the spec-seat-only prefix goes, the post-dispatch cross-lane face becomes the third trigger; the Implemented-by / Reviewed-by lines below it already carry the record. dispatch-runbook.md 241 → 241: 〈跨车道简单阻塞项直接接手〉 (heading + four lines) rewritten as 〈在飞卡衍生与阻塞项三类细则〉 (heading + four lines). Out: the S-level shape (等一周与做十分钟) and the 「`packages/spec` 恒归 spec 座位,本条不豁免」 line — both lifted by the ruling; the rules-layer PR already deleted SKILL.md's pointer to the old section, so nothing describes it any more. In, as detail under the three-class rule SKILL.md now states: the derived sub-issue's labels, keywords and parent checklist line; the unclaimed blocker's one-card scope (only the `Blocked-by:` target, return when done — the two clauses that survived the old section) and its contract face going through the independence piece, `packages/spec` included; the in-flight blocker's waiter line and p0/p1 propagation along the chain. Every edited line ≤ 120 bytes. Claude-Session: https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8 Co-authored-by: Claude <noreply@anthropic.com>
…arrying an in-seat ACCEPT as one decision batch — mechanics in director.md and decision-analysis.md Member 17951 of the charter chain (head 17942), references half. Provenance, verbatim: Maintainer: 「③ 受管面手合本身也是一条队列。能否简化我的审核步骤,比如我召唤项目总监时可以批量决定?」 SKILL.md 〈升级与决策〉 already states the rule (every summon presents the governed drafts carrying an in-seat ACCEPT as ONE batch of ≤5 rows; the approval and the merge stay the maintainer's click). lanes/director.md 72 → 72. Added under 职责二 (three lines): the enumeration (both repos, `is:pr is:open is:draft label:needs-user-decision`, cross-checked against the awaiting-a-human-merge lists, the difference named); the presentation (those with an in-seat ACCEPT as one batch of ≤5 rows, row form in decision-analysis.md; a PR missing one of its four pieces is listed with the gap, not presented); the close (the maintainer's one-line answer recorded verbatim on each PR, missing review requests made, then stop — the approval and the merge are the maintainer's clicks). Paid inside the file: 「唯一裁决者 … 维护者在哪个仓工作就在哪个仓召唤」 deleted — both halves survive in SKILL.md 〈升级与决策〉 (项目总监席:维护者在所在仓召唤 / 总监席是唯一裁决者); 「机读保险丝照旧管 spec 席条款②复核与 skills 席 … 本席不在其内」 deleted — survives in contract-review.md 降档保险丝 (保险丝只管 spec 席条款②复核与 skills 席 / 总监席裁决 ⛔ 不受本丝); 「容器 403 归因逐条走 MCP 补齐」 folded into the check-governed-merges line it qualifies. In the same file, 职责一 「受管面照旧 draft-only 加人工合并」 now points at the two-layer landing in contract-review.md 落地前检③ — the old wording contradicted the tiering landed in the rules-layer PR (same defect class as this chain, mechanical, this file is on the claim, same gate family). decision-analysis.md 50 → 50. Added under 常设决裁批流程: the governed-draft batch is the one exception to the prose-per-card duty — one row per PR (改了什么/为什么/席位意见/一个动作), the 速读 living on the PR. Paid inside the file: 「重分析轮同纪律;适用面 = …」 and 「⛔ 不及结果陈述:轮次报告的表格照旧」 folded into one line — one rule (the applicability of the batch discipline and its one exclusion). Every edited line ≤ 120 bytes. Claude-Session: https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8 Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewHead: ① derived judgments — every changed rule read against its ruling and against the rules-layer text PR #18018 landed (
Density payments, each checked to survive elsewhere: 「受管面人工合并 ⛔ 不替代复核」 → SKILL.md 〈复核〉 ① (复核结论照常写在 issue 上) and PD #14 「a human merge IS the review record」; 「达档只在 spec 席」 → the per-lane line; 「父会话两个合法动作」 + 「⛔ 永不改写润色」 → one line; 「复核正为补偿低档派发而存在」 → 「复核 ⛔ 不随派发档位免除」 (same rule, shorter); Seat measurements on the head tree ( ② semver: nothing publishes; ③ boundary flags: Implemented-by: Verdict: PASS — the references layer of the five rulings, each verbatim in effect, each paid inside its file. Landing: under the tiering landed by PR #18018 this is the 事实层 and lands after this review through the queue — but the merge-group guard still demands an authorized approval until #18020 (PR #18036, in flight) lands, so the four-piece is applied as well: draft stays, Generated by Claude Code |
维护者速读(终稿)改了什么 —— 章程链的下半场:四个 references 文件( 为什么 —— 上半场(PR #18018)落了规则,这些文件是各席实际照着做的机制页,不改就是两套说法。 风险与代价 —— 纯文本,revert 即回滚。要说的一点:这个 PR 本身就是「 未含 —— #18037( 批准即由本席按裁决 C 落地(四个 check 还在跑,绿了才落)。要不要批? Generated by Claude Code |
|
Ruling C landing step — skills seat (session Generated by Claude Code |
…he pre-ruling landing (objectstack-ai#18148) Fixes objectstack-ai#18083 `scripts/pm/check-governed-queue-guard.mjs` decides on an authorized APPROVED review and has since the 2026-09-04 predicate landed. What had not moved was the text a seat is told to consult: the docblock called a draft awaiting the maintainer's own merge the regime's terminal state, and the printed remedy's preferred option told a seat to take the PR out of the queue "and leave the merge to the maintainer". Since the charter chain landed (PR objectstack-ai#18018 `9489e2c0`, PR objectstack-ai#18038 `c185d087`, PR objectstack-ai#18051 `137eb00e`) the rule is ruling C — issue objectstack-ai#17971, maintainer 2026-09-13, verbatim and untranslated: > C. approve 后不管后续改动都由席位落地: So the narration under-permitted: it told a seat not to do the thing the rule now says it should do once an authorized approval is on record. ## What moved Wording only. ⛔ No decision branch changed — `entrySatisfied`, the approval reduction, the tier split and every exit code are untouched. Anchored by content, not by line number. 1. **Docblock, the "why the PR leg must not redden" paragraph.** The healthy resting state is now a draft *waiting for an authorized approval*, in the landed rule's own words from `.claude/skills/pm-dispatch/references/landing-operations.md`: 「四件套留 draft 等人批,⛔ 不翻正式不入队;获授权批准后认领席落地。」 2. **Docblock, a new paragraph for what happens after the approval** — ruling C, quoted verbatim, plus `SKILL.md`'s operational half: 「席位落地 = 过落地前检、清标、ready、auto-merge,踢出/变基同法。」 The seat's ready → enqueue is now stated as the correct next act there rather than a violation. 3. **Docblock, the "this guard cannot stop a direct merge" paragraph.** The direct merge is now the OTHER landing rather than the only one — `references/core-rules.md`: 「受管面由维护者人合或授权批准后席位落地」. The objectstack-ai#11387 measurement it cites is kept verbatim as history. 4. **The `pull_request` leg's EARLY WARNING rendering.** The ⛔ list (flip ready / enqueue / arm auto-merge) is now explicitly conditional — "while no authorized APPROVED review is on record", with AGENTS.md Prime Directive objectstack-ai#14's own "lift only for that approval" — and a new ✅ line says what a seat DOES do after the approval. 5. **The `merge_group` refusal remedy.** Steps 1 → 2 are now an order rather than a menu: out of the queue first, then the authorized approval, and the CLAIMING SEAT lands it from there. The unapproved direct merge (人工直合) is kept as the landing that PR still has. 6. **Two internal comments** that restated the same pre-ruling shape: the tier-default asymmetry cost (was "costs one hand merge") and the exit-code precedence note. The references tier is untouched and still says the in-seat review of record lands it: remedy option 3 renders byte-for-byte as before, and both of its pins (offered on a references-only refusal, withheld on a rules-layer one) still pass. ## Acceptance readings Taken on `a2e4cd7d9`, in the worktree, against merge base `a90a9f267`. **The two pre-ruling phrases, in the narration and the printed text: N → 0.** | reading | before | after | |---|---|---| | `git grep -c -E 'leave the merge to the maintainer\|human merge IS the review record'` | 2 | 2 | | … of those, hits in narration or printed remedy | 2 | **0** | | … of those, hits inside the self-test pin that FORBIDS them | 0 | 2 | Both remaining hits are the new negative assertion itself — a comment and the regex literal in `⛔ a-refusal-never-tells-a-seat-to-leave-the-merge-to-the-maintainer-nor-calls-that-merge-the-record`. A pin has to name what it forbids; neither is text the guard ever prints. **The landed phrase: 0 → 5** (`git grep -c 'CLAIMING SEAT lands\|claiming seat lands'`). **Every hit of the pre-ruling wording enumerated** (`git grep -n -E 'hand merge|human merge|leave the merge|人工合'`), 6 before → 4 after, and each remaining one accounted for: - `:44` 「人工合并即人工审核」 (docblock) — **moved**. - `:52` "the human merge IS the review record" (docblock) — **moved**. - `:536` "costs one hand merge" (tier-default comment) — **moved**, now "costs one authorized approval". - `:1171` 「人工合并即人工审核」 (EARLY WARNING rendering) — **moved**. - `:1242` "leave the merge to the maintainer. A human merge" (remedy) — **moved**. - `:2010` (was `:1983`) the `objectstack-ai#9319` replay fixture's name, quoting PR objectstack-ai#9238's own body: "a .claude/skills PR whose own body said 'awaiting a human merge'" — **stays**. It is a historical measurement naming what that PR said in 2026; rewriting it would falsify the fixture. - `:2429`, `:2436`, `:2468` — **new**, the three negative pins (two English phrases, one 人工合并即人工审核). **Self-test:** `node scripts/pm/check-governed-queue-guard.mjs --self-test` :: exit 0, **233 cases before → 238 after** (5 added, none removed, no battery floor lowered). **Diff surface:** `git diff --stat a90a9f2` names exactly one file, `scripts/pm/check-governed-queue-guard.mjs`, 104 insertions / 32 deletions. `origin/main` advanced under this worktree during the run (`a90a9f267` → `739ab526d`, a shared-ref hazard AGENTS.md names), so the anchor above is the merge base, not the moving ref. **Governed?** No — `node scripts/pm/check-governed-merges.mjs --test scripts/pm/check-governed-queue-guard.mjs` :: exit 0, "NOT governed — ordinary queue landing applies". This PR is opened as a draft and the seat lands it; nothing here flips ready or arms anything on its own. ## Reverse verification — the new pins can actually fail One-shot, from the committed state, with a `trap … EXIT INT TERM` restoring absolute paths. Predicted direction: **turns red**. - HEAD blob `f7938efe94a20f34a3c1e6f07e2aaca393f16a47`. - Mutation: the remedy's step-2 line rewritten back to the pre-ruling wording. On-disk observation, anchored on both texts: landed anchor 1 → **0**, injected stale phrase 0 → **1**; blob `87b912dbc8acaf5af5d02fb86cc06eb2bcffd986` ≠ HEAD blob, so it reached disk. - Mutated leg: `--self-test` :: **exit 1**, `✗ 2 of 238 case(s) failed` — exactly `a-refusal-orders-the-remedy-DRAFT-then-the-authorized-APPROVAL-then-the-CLAIMING-SEAT-lands-it` and `⛔ a-refusal-never-tells-a-seat-to-leave-the-merge-to-the-maintainer-nor-calls-that-merge-the-record`. - Restore leg: `git checkout HEAD -- FILE` → blob back to `f7938efe…` (byte-identical), `git diff HEAD` empty, `git status --porcelain` empty, anchor restored 1, injected 0. - Restored leg: `--self-test` :: exit 0, 238 cases pass. ## Gates Derived with `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths, three-dot against merge base `a90a9f267`) — **33 commands, all run in the foreground, every exit code captured before any pipe, all `exit 0`.** Reconciled: ``` node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran RAN_FILE Run reconciliation — 33 derived, 33 run, 0 NOT-MEASURED, 0 UNRUN. ✓ 33 derived famil(ies) accounted for — a DERIVED zero — all 33 recorded an exit code and none of them is 3. ``` Including `node scripts/pm/check-governed-queue-guard.mjs --self-test` :: exit 0 and `pnpm check:nul-bytes` :: exit 0. `pnpm check:pm-governed-merges` :: exit 0 was run too, though the derivation does **not** place it for this path — it is a `--self-test`-only checker-health family here, so its green grades that checker's fixtures, not this diff. Control characters: `grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'` over the changed file — no hits. No changeset: `scripts/pm/**` ships in no package's `files[]`, so this publishes nothing — the `skip-changeset` label carries it. ## Acceptance notes Two observations outside this card's one-file surface, noted and not filed (this seat's write budget for the round is the branch push, this PR, the label and one report comment): - `scripts/pm/check-governed-merges.mjs` :140 and `scripts/check-required-contexts.mjs` :288 both still say "a human merge IS the review record" for a governed PR. Neither is wrong — it is one of the two terminals the charter names 「终局两条:人工直合即审核记录;授权批准 ⇒ 席位落地。」 — but neither mentions the second one. That is an omission rather than a contradiction, so it is not the class this card is. Issue objectstack-ai#18083 fences the first file off from this PR by name. - `.claude/hooks/guard-governed-enqueue.sh` :548 was checked and is already ruling-C shaped (its steps read draft → wait for the approval → "Then enqueue"), so it needed nothing. _Generated by [Claude Code](https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8)_ --- _Generated by [Claude Code](https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8)_ Co-authored-by: Claude <noreply@anthropic.com>
Fixes #17942
Fixes #17950
Fixes #17933
Fixes #17934
Fixes #17951
Dev session
session_01DAcomhvR9kKizeYgg89Vo8on branchclaude/issue-17942-charter-references(worktreeobjectstack-issue-17942-refs). The REFERENCES half of the charter-revision family whose rules-layer half landed as PR #18018 (9489e2c0): four files under.claude/skills/pm-dispatch/references/, one commit per member card, every ruling quoted verbatim in its commit message. Governed path — the 事实层 under the landed tiering: draft, in-seat contract-tier review; ⛔ the dev never flips ready, queues or arms it.Rulings landed (verbatim in each commit; one line each here)
ae17066f) — 「1(荐):加一条例外——某个红若在该 PR 的 merge-base 提交上同名、同失败签名地红 ⇒ 不计入「全绿」;主干红仍必须立单止血(不变)。」 → contract-review.md 落地前检③ gains the exception plus the signature line (same failing step, same first error line, read from the base commit's check runs by the API, never a seat's word).lanes/ui.md指向条款②的适用面却不陈述它 —— 维护者据此读成「本车道无需契约复核」 #17933 (a390e114) — the misreading on the card, 「不是说你的 ui 车道不需要契约复审了吗?为什么还有needs:contract-review」 → contract-review.md states the per-lane applicability once (spec 席达档审契约增量;余席默认档自审加门禁、挂标;豁免仅独立性件与保险丝) and closes the 「复核正为补偿低档派发而存在」 derivation (复核 ⛔ 不随派发档位免除)..claude/skills/pm-dispatch/references/**lands through the queue after in-seat contract-tier review (maintainer ruling 2026-09-13) #17950 (c837c7c5) — 「我点头」 → 落地前检③ carries the two-layer landing: 规则层等维护者的字;受管路径全在.claude/skills/pm-dispatch/references/者达档过本三条入队.31249ef1) — 5651976160 「同意」 · 5652079343 「以上接受你的建议。」 · 5652544529 ③ 「同意」 → 独立性件 covers a claimed card's post-dispatch cross-lane face (含 spec); 借复核不移卡,新 spec 工作恒归 spec 席; dispatch-runbook.md 〈跨车道简单阻塞项直接接手〉 rewritten as 〈在飞卡衍生与阻塞项三类细则〉 — the S-level shape and the spec-not-exempt line are gone, nothing describes the old rule.f0e533fc) — 「③ 受管面手合本身也是一条队列。能否简化我的审核步骤,比如我召唤项目总监时可以批量决定?」 → director.md 职责二: enumerate, present ≤5 rows, record the answer and stop; decision-analysis.md: the row form (改了什么/为什么/席位意见/一个动作), the one exception to 六项.Acceptance greps (
git grep -c -Fat BASEa0dd872c→ HEADf0e533fc; every control still hits 1 → 1).claude/skills/pm-dispatch/references/0→1 · 「跨车道面」 0→1 · 「借复核」 0→1draft-only1→0 · 「达档只在 spec 席」 1→0 · 「复核正为补偿低档派发」 1→0check-clause2-carriersdraft-only1→0pm:awaiting-maintaineros-decision-facetsLine budgets (net 0 per file, paid by density inside the same file; each payment and where its rule survives is named in the commit)
contract-review.md 60 → 60 · dispatch-runbook.md 241 → 241 · lanes/director.md 72 → 72 · decision-analysis.md 50 → 50 (
check:pm-skill-ratchet: all four at headroom 0).git diff a0dd872c..f0e533fc | grep '^+' | LC_ALL=C awk 'length-1>120'prints nothing; the whole-fileawk 'length>120'is empty on all four before and after. No**glob in prose; no issue number in operational text.Deviations from the dispatch, stated
draft-only1→0 row.lanes/ui.md指向条款②的适用面却不陈述它 —— 维护者据此读成「本车道无需契约复核」 #17933's per-lane line — with the independence piece open to any claimed card's cross-lane face, the fragment stopped being true.search_issues(one call).Gates (
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, no paths, atf0e533fc; all run in the foreground, exit codes captured before any pipe;--ran: 「14 derived, 14 run, 0 NOT-MEASURED, 0 UNRUN」)check:pm-skill-ratchet✓ ·check:pm-skill-id-lint✓ ·check:skill-frame-sync✓ ·check:nul-bytes✓ ·check:refd-timer-probe✓ ·check:doc-authoring✓ ·check:pm-governed-merges✓ (self-test, 317 assertions) ·check:agent-test-spelling✓ ·check:driver-memory-census✓ ·check:watch-hint-literal✓ ·check-closing-keyword-parity(+ self-test) ✓ ·check-comment-mask-corpus✓ ·@objectstack/lint check:doc-formula-expressions✓ (first run exit 3 PREREQUISITE NOT MET — formula/lint unbuilt; built under the verify lock, 3m35s shared-box, then ✓). Beyond the derivation:check:pm-governed-prose✓ (its two regions are untouched). Pre-pushcheck:commit-card-trailers✓ over the five commits. No package touched ⇒ no build/test closure owed. Changeset:.claude/**publishes nothing ⇒skip-changesetlabel.未含
references/-only governed PR — #17950's tier is declared, not enforced #18020, in flight): until it lands, the merge-group leg still refuses areferences/-only governed PR without an authorized approval — so this PR carries the four-piece as well and lands under ruling C on whichever comes first; nothing in the text claims the guard enforces the tier today.landing-operations.md:27–:28 (every governed hit ⇒ 人工合并道) andlanes/ui.md:22 (凡触 spec 一律转) still carry pre-ruling wording — outside this claim's file surface; filed as bare card pm-dispatch: two references lines still carry pre-ruling text after the charter chain — landing-operations.md sends every governed hit to the human-merge lane; lanes/ui.md :22 restates the retired 凡触 spec 转席 rule #18037 with dedupe keywords. pm-dispatch: three rules-layer lines outside the charter-revision PR still carry pre-ruling text (os-dev.md 先搜再立, SKILL.md state-table rows, lanes/ui.md :25 + objectui AGENTS §9) #18019 covers ui.md :25, os-dev.md 先搜再立 and the SKILL.md rows.维护者速读(草稿)
改了什么:把本周裁决在 PM 章程「事实层」(pm-dispatch 的 references 目录)落地:落地前检③加「主干上同名同失败签名的红不计入全绿」例外,并写明受管面两层落地(规则层等你的字,references 目录经席内契约复审档复核后入队);契约复核细则逐车道写清谁复核、怎么复核、豁免只有两件(独立性件、降档保险丝),并写明认领席派发后碰到的跨车道面(含 spec)借隔离复核、卡不换席;runbook 的「简单阻塞项直接接手」改写为衍生子卡 / 无主阻塞项 / 在飞阻塞项三类细则;总监席章程与决策写法加上「带席内 ACCEPT 的受管草稿每场呈一批 ≤5 行」的动作。四个文件行数全部不变,每处新增都在同文件删重付账。
为什么改:规则层已在 PR #18018 落地,这些是它点名「另起 references PR」的对应细则;每条裁决原文逐字引在各 commit。
风险与代价(含回滚):不发布任何包、无 changeset;纯 references 文本,回滚 = revert 本 PR。付账删掉的四条(受管面人合不替代复核、总监席唯一裁决者与召唤仓、总监席不受保险丝、容器 403 走 MCP)各在 SKILL.md 或 contract-review.md 有存活处,commit 里逐条点名。
席位意见:(席位填)
你要做的:队列守卫的分层(#18020)落地前,这张 references PR 仍要你的一次批准;落地后此类 PR 不再找你。
一句问:director.md 职责一那句「受管面照旧 draft-only 加人工合并」随本 PR 改为指向两层落地,同意吗(是/否)?
Generated by Claude Code