skills(pm-dispatch): an out-of-tier seat hands a skills-face hunk's review to the skills seat - #17806
Merged
Merged
Conversation
…eview to the skills seat The governed ACCEPT fork's rule ① required the reviewing seat of a `skills/**`-touching PR to run at the contract-review tier, while the tiering ruling reserves that tier away from every non-skills lane — an unsatisfiable conjunction for any lane that reaches `skills/**` incidentally (the repair-don't-file rule produces exactly that). Rule ① now says: the skills-face hunk must be reviewed by a seat AT the contract-review tier, and a seat outside that tier hands that hunk's review to the skills seat first (before the four-piece terminal fires). The conclusion still goes on the issue; the lane's own review of the code half stands. One line replaced in place (96 B -> 119 B, under the 120-byte line cap); line count unchanged at 812/812; no reference twin. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MCLBsUgfykL74aU716rzVK
Contributor
Author
维护者速读(终稿)改了什么 — PM 派发技能 SKILL.md 受管 ACCEPT 分叉的第 ① 条,一行原地替换:「技能面 PR 的复核席须跑在契约复审档位」→「技能面 hunk 须由契约复审档的席复核,档外席先交 skills 席」(96 → 119 字节,上限 120;812/812 行不变,四轴块 md5 不变)。含义:碰到 为什么改 — 两条现行规则曾构成无法同时满足的合取:分叉要求「须跑在契约复审档位」,而分档裁决(#17285)把该档只留给 skills 席、spec 席的 clause-② 复核与总监席; 风险与代价(含回滚) — 每次偶然碰到 skills 面的修补多一跳跨席评论(几行 hunk 一次复核),不是新卡;16 条派生门禁全绿,受管判定 GOVERNED 是预期。回滚 = revert 本 PR。 席位意见 — 席内按契约复审档复核通过(本席即该档),建议合并。 你要做的 — 受管面:请人工合并 PR #17806(本席不翻 ready、不入队、不挂 auto-merge)。 Generated by Claude Code |
This was referenced Sep 12, 2026
os-zhuang
approved these changes
Sep 12, 2026
os-zhuang
marked this pull request as ready for review
September 12, 2026 09:39
os-zhuang
enabled auto-merge
September 12, 2026 09:39
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #17490
What changed
One line of
.claude/skills/pm-dispatch/SKILL.md(the governed ACCEPT fork, rule ①) is replaced in place. Nothing else moves: same line count, the four-axis frame block untouched, no reference twin, the tiering ruling's own text untouched.a77b4e92e, identical on the dispatch tip6682c5d8)- ① 复核结论照常写在 issue 上;技能面 PR 的复核席须跑在契约复审档位。- ① 复核结论照常写在 issue 上;技能面 PR 须由契约复审档的席复核,档外席交 skills 席。- ① 复核结论照常写在 issue 上;技能面 hunk 须由契约复审档的席复核,档外席先交 skills 席。Line cap is 120 bytes (
scripts/pm/check-skill-line-ratchet.mjs, "Why 120 bytes"); 119 is under it. File stays 812 lines, ceiling 812, headroom 0 — no line added, no rule deleted, no re-wrap, no density payment.The three ruled elements, mapped to the words
The ruled direction is option 3 on the card (5624178855): the seat that cannot run the tier hands the
skills/**hunk's review to the skills seat, which records it on the card before the four-piece terminal fires; the lane's own review of the code half stands.复核结论照常写在 issue 上— unchanged from the old lineskills/**hunk runs at the contract-review tier技能面 hunk 须由契约复审档的席复核— the skills-face hunk must be reviewed by a seat AT the contract-review tier档外席先交 skills 席— an out-of-tier seat hands it to the skills seat firstTwo wording changes against the graded 114 B candidate, both inside the ruled direction and inside the cap:
PR→hunk(+2 B). The ruling hands over the hunk's review and keeps the lane's review of the code half; withPRthe sentence read as handing the whole PR review across seats, which contradicts that second clause.hunkis already vocabulary in this skill (references/dispatch-runbook.mdlines 101 and 151). For a PR that is entirelyskills/**, hunk = PR, so nothing narrows.交→先交(+3 B). The ruling says the handed-off review is recorded on the card before the four-piece fires;先carries that ordering, closing the failure mode where a seat fires the four-piece and hands off afterwards, leaving the PR at the maintainer with no at-tier read.Kept from the candidate:
技能面(the term the old line and line 600's触 skills/** 的 PRpairing already use),契约复审档,skills 席.core-rules twin check
git grep -n '契约复审档位' origin/main -- .claude/skills/pm-dispatch/references/core-rules.md⇒ exit 1 (no hit). A wider probegit grep -n '复核席\|技能面 PR' origin/main -- .claude/skills/pm-dispatch/references/core-rules.md⇒ exit 1 (no hit). The only tier sentence in core-rules (line 112,语义面卡恒契约复审档施工,契约卡达档复核归 spec 席) is about the build tier and the spec seat's clause-② review, not the governed fork's rule ① — not a twin.references/core-rules.mdis untouched.The phrase
契约复审档位also appears inreferences/contract-review.mdline 57 (产出裁决的每轮都须读到契约复审档位) — that is the contract-review reading's own tier requirement, a different rule; untouched.Premise check (all three PM readings held)
6682c5d8and on the actual basea77b4e92e(origin/main moved by one commit between dispatch and branch cut — PR skills(pm-dispatch): a mid-task narrowing names its replacement owner and the moment #17794, which touches onlyreferences/dispatch-runbook.md;git diff --stat 6682c5d8 HEAD -- SKILL.mdis empty) is the 96 B sentence above, 97 B with its newline. Ratchet verdict on the base:SKILL.md is 812 lines (ceiling 812; headroom 0). No open PR touches SKILL.md or core-rules.md: the 30 most recently updated open PRs (newest at 06:19Z, i.e. none after the PM's 06:29Z reading) were listed via REST; the two pm/ci PRs in that list (fix(pm): a key-INITIAL clause-② line that QUOTES the spelling is not a declaration #17799, ci: a PR may close a card only while that card claims its head branch #17801) were file-listed and touchscripts/pm/check-clause2-carriers.mjsand workflow/script files only.os migrate meta --from Nlists the conversions its tombstones prescribe, and an empty range stops reading as success #17462); that card was read only, not touched.node scripts/pm/dispatch-gates.mjs --tier .claude/skills/pm-dispatch/SKILL.mdprintsModel tier — MANDATORY: claude-fable-5-1. This PR was authored at that tier (claude-fable-5-1).Governed verdict
node scripts/pm/check-governed-merges.mjs --test .claude/skills/pm-dispatch/SKILL.md⇒ exit 3:governed-surface predicate: 1 of 1 path(s) hit the register (5 surfaces, repo-agnostic)./⛔ GOVERNED — a human merge is the review record for this PR. ⇒ draft at the human terminal; no ready flip, no queue, no auto-merge from any seat.skip-changesetapplied additively (.claude/**publishes nothing).Verification (final commit
8b7dae6c0)Gate set derived, not recalled:
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(change set derived three-dot from the merge basea77b4e92e, 1 path) ⇒ 16 commands. All 16 run on8b7dae6c0with exit captured before any pipe (cmd > log 2>&1; ex=$?), all exit 0; reconciliationnode scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran FILE⇒Run reconciliation — 16 derived, 16 run, 0 NOT-MEASURED, 0 UNRUN.The same 16 ran once before the commit on the identical bytes; the command list was byte-identical pre/post commit.Verdict lines as printed by the gates on
8b7dae6c0:✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/SKILL.md is 812 lines (ceiling 812; headroom 0).✓ check-skill-id-lint: 27 file(s) clean (pattern /#[0-9]{3,}/g).✓ check-skill-frame-sync: the one declared copy of the decision frame is internally coherent (.claude/skills/pm-dispatch/SKILL.md; no second copy to compare — …)— plus the direct proof the block did not move:sed -n 734,755p SKILL.md | md5sum⇒3327d02c56f8a0eca88569dad2270f32before and after the edit (the dispatch's expected hash).✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces (…) and claim no others.check-nul-bytes: OK (scanned 8456 text file(s) … no raw ASCII control bytes).— plus the manual control-byte self-scan on SKILL.md (grep -naPover the C0/DEL range) ⇒ no hits.pnpm check:pm-governed-merges,check-governed-queue-guard --self-test,check-closing-keyword-parity(+--self-test),check-comment-mask-corpus,check:agent-test-spelling,check:doc-authoring,check:driver-memory-census,check:refd-timer-probe,check:watch-hint-literal— each printed its own ✓/OK line, exit 0.pnpm --filter @objectstack/lint run check:doc-formula-expressions: first run exit 3PREREQUISITE NOT MET(@objectstack/formula/@objectstack/lintnot built — NOT MEASURED, not a finding). Built both under the shared verify lock (os-verify-lock.sh,VERDICT command-exit 0, held 182 s), re-run ⇒✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 438 files / 1374 TS blocks judged clean, exit 0; included in the post-commit union above.On-disk proof of the edit:
grep -cFof the old line 1 → 0 and of the new line 0 → 1;git show HEAD:…SKILL.md | sed -n 610pprints the new line. No repo-widepnpm lintrun locally (CI-owned); no package build/test owed — the diff touches no package (no ① closure, no ②).Not measured locally: CI convergence (owned by the review side).
Acceptance notes
references/contract-review.mdline 57 uses the spelling契约复审档位for the contract-review reading's own tier, while SKILL.md line 610 now spells the same tier契约复审档(as lines 505–527 do). Both spellings already coexisted on the tip; no gate reads either. Carrier: whoever next edits contract-review.md; none queued.维护者速读(草稿)
改了什么:
.claude/skills/pm-dispatch/SKILL.md第 610 行(治理面 ACCEPT 分叉的规则①)原地换了一句话,96 字节变 119 字节,行数 812 不变。旧句要求「技能面 PR 的复核席须跑在契约复审档位」;新句改为「技能面 hunk 须由契约复审档的席复核,档外席先交 skills 席」。为什么改:旧规则①与分档裁决(契约复审档只留给 skills 席、spec 席的条款②复核与维护者召集的 director)构成一对谁都满足不了的矛盾:一个
domain:cli席复核一张顺手修了skills/**里一行的 PR,被要求跑一个它被禁止跑的档位。这不是边角:「已发布的说法本轮变假就地修、不立卡」这条规则天然会让普通车道的 PR 顺带碰到skills/**。一张 p1(PR #17462)已经撞上。方向由 skills 席自分诊定为选项 3(5624178855,轮次报告否决窗已过):档外席把skills/**那一块的复核交给 skills 席,skills 席在四件套之前记到卡上;代码那一半仍由本车道自己复核。风险与代价(含回滚):每次顺带的 skills 修补多一次跨席交接 —— 几行 hunk、一条评论,不是一张卡。文字层面只动这一行,分档裁决原文、四轴框架块、#17134 的标签都没碰;
references/core-rules.md无孪生句(已 grep 核实),未动。回滚 = revert 这一个 commit,不牵连任何生成物。席位意见:(留空,席位定稿时填)
你要做的:读第 610 行这一句,认可则人工直合;不认可则在此 PR 评论里写下你要的措辞,由 skills 席改。
Generated by Claude Code