Repository navigation
pm-dispatch: governed is an approval tier, the lane follows the subject — rule text to skills, workflow wiring to devx - #27082
Conversation
Letter B of the lane/tier ruling, applied in place to the 域车道 table and the 路径分叉 governed-set definition of .claude/skills/pm-dispatch/SKILL.md: - domain:skills row: "governed 面全量" becomes the rule-text list (AGENTS.md, CLAUDE.md, .claude/**, skills/**, docs/adr/**, docs/NORTH-STAR.md); the rest of the row is unchanged. - domain:devx row: .github/workflows/** (wiring, CI performance) is the lane's own; the anchor-rule clause keeps packages/lint and scripts (gate class) going to spec, the destination spelled bare like the cell's existing "归 skills" to stay under the 341-byte row pin. - 路径分叉 L183: the governed set is kept verbatim as the approval set and now says so in one clause, "(定 Tier,非车道)"; the gloss "(全量)" and the word "统一定义" paid for it at the 120-byte line cap. 319/319 lines before and after; no new line, no re-wrap. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QSeKYmhU5KEj1nukYhp1Tg
…ne-by-subject-governed-is-tier
Contract reviewServed-tier: Read at 2026-10-28T04:54Z by the ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Implemented-by: VERDICT: PASS |
Contract reviewServed-tier: Read at 2026-10-28T04:56Z by the ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Implemented-by: VERDICT: PASS |
维护者速读 — 席位终稿 · PR #27082 · head
|
Fixes #26997
Clause-②: no
Metadata-protocol: none
Ruling-ref: 6458715764
维护者速读
.claude/skills/pm-dispatch/SKILL.md域车道表两行 + 〈路径分叉〉一行,全部就地改、不加行(319/319)。domain:skills行从「governed 面全量」改为规则文本清单(AGENTS.md、CLAUDE.md、.claude/**、skills/**、docs/adr/**、docs/NORTH-STAR.md);domain:devx行把.github/workflows/**(接线、CI 性能)收归本域;〈路径分叉〉的 governed 面定义保持原集合,加一句「定 Tier,非车道」。.claude/skills/pm-dispatch/SKILL.mdL161(devx 行:工作流改归本域;spec 目的地按同格的「归 skills」拼法改拼作 barespec,是裁决点名的信心缺口,见 Acceptance notes)→ L183(governed 面定义:去掉「统一定义」与(全量)两处注解换一句「定 Tier,非车道」)→ L162(skills 行:规则文本清单)。pnpm check:pm-skill-ratchet && pnpm check:pm-governed-prose—— 预期SKILL.md is 319 lines (ceiling 319)、widest table row is 341 bytes (pin 341)、name all 13 registered governed surfaces … and claim no others。.claude/**是 Tier S,席位做契约复核(达档)后落地;裁决已在案(ruling record 6458715764)。What changes
One file, three lines, in place; the line count stays 319 / 319 and the widest table row stays 341 / 341 (L160, not touched).
domain:devxrowdomain:skillsrowAGENTS.md+CLAUDE.mdlineL161 before:
L161 after:
L162 before:
L162 after:
L183 before:
L183 after:
L184 (unchanged, 120 / 120 bytes):
What each edit does, against the ruling (letter B, ruling record 6458715764):
domain:skillsrow (L162) — "governed 面全量(含本文件;统一定义见「governed 面统一定义」行)" becomes the rule-text list in the ruling's order:AGENTS.md+CLAUDE.md+.claude/**(含本文件)+skills/**+docs/adr/**+docs/NORTH-STAR.md..github/workflows/**is deliberately absent from it. The rest of the row (non-gatescripts/pm/**; CODEOWNERS + the governed-subject gate/audit) is byte-identical.domain:devxrow (L161) — the "三者…归domain:spec" clause loses its.github/workflows(接线) member, and.github/workflows/**(接线、CI 性能) joins the row's own surface list (after.githooks, beforedocker/README.md), so the workflows are the lane's own with CI performance named as the ruling names it. The gates-by-SUBJECT clause ("门禁按 SUBJECT:governed 面归 skills,代码/文档质量归本域") is unchanged. The count word 三者 is dropped rather than rewritten as 两者: with two members it carried no information, and the row pin had no room for it.AGENTS.md+CLAUDE.mdon L184 (L184 unchanged); L183 now says in one clause what the set is for: "(定 Tier,非车道)" — it sets the approval tier, not the lane. Tier H for workflows is therefore carried here (path → Tier) rather than restated in the devx row, which had no bytes left for "(仍 Tier H)".The anchor rule's destination for
packages/lintandscripts(门禁类) is unchanged in substance — they still go to spec by the anchor rule — but its spelling moved from`domain:spec`to barespec, the same bare form the cell already uses for "归 skills". This is the ruling's named confidence gap being touched for a byte reason only: the 341-byte table-row pin (L160 sits at 341, headroom 0) left the row 7 bytes short with the literal label kept, and the only other way to fit was to drop "CI 性能", which the ruling names explicitly. No restatement of the scripts→spec rule is made or implied.Two glosses left L183 to pay for the clause at the 120-byte line cap: the word 统一定义 (the phrase 「governed 面统一定义」 was referenced only by L162, which this PR rewrites;
git grepfinds no script or reference pinning it) and(全量)after.claude/**(the glob is the whole tree by construction, and L204 — "受管面两层:Tier S =.claude/**全树" — keeps the whole-tree emphasis in words). The PM's suggested spelling for the clause (「governed 面只定批准档(Tier),⛔ 不定车道;车道按主题见域车道表」, appended to L184) measures 202 bytes on L184 and 159 on L183; L184 is at 120 / 120 with no gloss to remove, so the clause lands on L183 in the shortest spelling that still names both halves (Tier, not lane).origin/mainwas merged before opening (merge commit on top of the edit;origin/mainhad moved by one unrelated dogfood-test commit,5cba8fc2). At the moment of opening it had moved two commits further (cd609a49: an ADR status batch and a ui change), neither touching this file or any ratcheted file, so the branch is left at its merge point rather than re-merged. PR #26749, which edits thedomain:cloudrow of the same table, had not landed at the time of opening (state open,mergeable_state: blocked); its row is four lines below this PR's rows and the regions are disjoint.Tests
No package is touched, so no build closure (①) and no package test/typecheck (②) is owed; the diff is
.claude/**only, which publishes nothing (skip-changesetdeclared on the create). No tested behaviour changed, so no ablation.Readings taken on the final head
0b1ae9b8(edit commitdd558521, merged withorigin/main5cba8fc2). Every exit code was captured before any pipe (cmd > LOG 2>&1; EXIT=$?).Ratchet and governed-prose verdict lines
Per-line byte measurement (python, utf-8)
Acceptance notes
Lines that still tie a lane to governed-ness and are not edited here (the ruling names only L161 / L162 / L183–L184; listed for the seat to file or rule consistent):
domain:uirow: 「…协议恒归domain:spec,受管面归domain:skills;详见references/lanes/ui.md」 — under letter B,ui/.github/workflows/**is workflow wiring inside ui's governed set, and this row still routes every ui governed path to skills.references/cross-repo-coordination.mdL11: 「objectui 仓已并入本仓ui/:UI 卡住本仓,ui/**代码归domain:ui,受管面归domain:skills。」 — the same tie as the ui row, for the same path family..claude/**全树,余皆 Tier H 等人批;…」 — approval axis only; consistent with B and now the home of the whole-tree emphasis that(全量)used to carry on L183.references/lanes/devx.mdL7: 「边界:守护 skills 的门禁脚本在scripts/下时归本席,判据是被改文件的路径。」 — a by-PATH rule for gate scripts that guard skills, while SKILL.md L161 (unchanged clause) and L162 route gates by SUBJECT (governed-surface gates → skills). Pre-existing tension outside this card's question; the ruling says gates stay by SUBJECT as today.references/lanes/director.mdL86: 「改 skill、指令或治理文本归 skills 席」 — rule text → skills; consistent with B.Mechanism hypotheses from the dispatch, as measured: ① held (rule-text list fits the row at 329 bytes). ② held in substance; the count word is dropped, not rewritten, and the spec label's spelling had to move to bare
specto fit the 341-byte pin (named above as the confidence gap). ③ falsified on placement: L184 is at 120 / 120 and cannot take a clause; the clause lands on L183 after two glosses leave it. ④ the list above. ⑤ held:check:pm-governed-prosestays green (the register and PD 14 are untouched; the five globs on L183 are intact and no new**-shaped span was added);check:pm-skill-id-lint,check:skill-frame-sync,check:skill-frame-freshnessall green.Verification
Local gate subset (derived with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, no paths, from the worktree after the final commit: 20 commands — 12 matched by path, 8 declared whole-tree), each exit captured before any pipe;--ranreconciliation:20 derived, 20 run, 0 NOT-MEASURED, 0 UNRUN, withpnpm check:pm-settings-deny-rosterandpnpm check:skill-frame-freshnessrecorded as outside the derivation.Exit codes
CI-measured only (matched by path, no local invocation):
node scripts/pm/check-governed-queue-guard.mjsand its--toolchain-neededform (governed-surface-guard.yml) — read from the PR'sGoverned Surface Queue Guardcheck-run; a draft Tier S PR with no contract-review record is expected to be held by it until the seat's record exists. Every other family CI runs on this PR (Lint & Repo Gatesand the rest of the required set) is read from the PR's check-runs by the seat, not re-run here.Generated by Claude Code