Repository navigation
Commit 6bf0ff5
docs(pm-dispatch): revoke every autonomous-adjudication channel — a seat analyses and recommends, every needs_decision goes to the maintainer's ruling batch (#25348)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} -->
_Requested by **Elon** · [project
thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DKgg3KvTdrTtgi5LFfUa7Ss)_
Fixes #25344
Clause-②: no
Metadata-protocol: none
## 维护者速读(草稿)
- **改了什么**:把 pm-dispatch 技能里所有「Claude
可以自己裁」的通道全部撤掉——项目内裁决线程、「有把握自己决定」常设令、分诊代裁车道与置信门四条、`auto-adjudicated`
标记、总监席「一类自裁」免呈、PM 对 dev `needs_decision` 的直接答复。改后一句话:席位只分析与推荐,每个
`needs_decision` 都并入决裁批次,由您人工裁。
- **为什么改**:您 2026-10-23 的原话:「我记得有一个skills 允许自主决裁,撤销这个决定。必须人工决裁。」
- **风险与代价(含回滚)**:决裁批次会多出以前「有把握就自裁」的那部分卡,批次变长;除此之外无行为面变化,纯文本改动,一次 revert
可回。
- **席位意见**:(席位复核后填)
- **你要做的(一个动作)**:批 #3 您已「同意」,三项都已写入;席位复审 PASS 后,一句「可以落地」。
## What changed
Every channel in `.claude/skills/pm-dispatch/**` that let a seat, a
ruling thread or the director seat rule in the maintainer's place is
removed, and the text that cited it is re-pointed. A seat analyses,
recommends and files; the maintainer rules.
| File | Before | After |
|:--|:--|:--|
| `references/lanes/director.md` | 项目内代裁通道: a card thread's
`needs_decision` ⇒ the coordinator opens a ruling thread that rules for
the director seat; the standing order 「对于自己有把握决定的问题,自己决定」; 「有把握」= the
four-condition confidence gate; the `needs_decision fork` record form
and the coordinator's 追认表 | `needs_decision` ⇒ the seat writes the
four-axis analysis and a recommendation and the card joins the ruling
batch the maintainer rules by hand; the standing order is recorded as
revoked; no ruling thread, no delegated ruling, no confidence gate |
| `references/lanes/director.md` 职责二 | 一类自裁按批过 / 全立者录裁转工作态、只入追认表,不呈批 /
消费面对齐协议 ⇒ 一类自裁 / 协议有误即裁改动 | every card is presented; the seat records
only the maintainer's word; protocol alignment and protocol errors are
recommended and presented, never self-ruled |
| `references/lanes/director.md` L16 | 未回字 = 停,唯一例外是项目内代裁通道 | no
exception |
| `references/triage-duties.md` | 代裁车道 (refactors and bug fixes),
代裁人工地板, 置信门四条, 代裁动作 + `auto-adjudicated`, 一类自裁门 (three criteria, summary
table for 追认) | rulings belong to the maintainer; triage analyses,
recommends and files into `needs-user-decision`; the 人工地板 list itself
stays, re-homed as 「人工地板(恒呈维护者)」 so its six pointers and 例外一/例外二 keep
their anchor (contract-review F1 at head 337ba76); the 机械边界测试 is kept
only as the clause-② criterion (`execution-duties.md` points at it); the
round report carries a 呈裁清单 instead of a 代裁清单; the 回翻条款 is kept |
| `references/dispatch-runbook.md` L146 | 终报 `needs_decision` ⇒ 席位交
coordinator 开 `CONTRACT_REVIEW_TIER` 裁决线程 | 终报 `needs_decision` ⇒
四维分析与推荐并入决裁批次呈维护者裁;⛔ 无裁决线程 |
| `SKILL.md` 红线 L30 / state table L106 | 唯一例外是已裁的代裁通道 / 除代裁通道外永不代答 | ⛔
无代裁通道;席位只分析与推荐 / 永不代答,只由人工裁 |
| `SKILL.md` 升级与决策 L215, L219, L220, L234, L264, L267, L276 | PM
裁量含「裁定」; dev's `needs_decision` in the non-escalation class answered by
the PM; the premise-bound ruling tier is the PM's; 代裁 inputs/faces;
总监席是唯一裁决者 | PM discretion is dispatch and ordering; every dev
`needs_decision` goes to the human with the PM's analysis and
recommendation (including "looks like a non-escalation class"); the
premise-bound ruling is also the human's; the four facets are the input
to the human ruling; the director seat is the only presenting seat |
| `references/seat-lifecycle.md` L69, `references/contract-review.md`
L35, `references/execution-duties.md` L103 | cite the 代裁清单 / 代裁 boundary
test | cite the 呈裁清单 / the triage boundary test |
| `scripts/pm/check-skill-line-ratchet.mjs` | ceilings `director.md` 72,
`triage-duties.md` 120 | `director.md` lowered to 70; `triage-duties.md`
back at 120 after the batch-#3 text (landed counts, headroom 0); no
other row moves |
Already forbidding self-ruling and untouched: `lanes/skills.md` L21,
`lanes/hotcrm.md` L51/L53, `lanes/services.md` L12. No script reads
`auto-adjudicated` or the revoked vocabulary (`git grep` over
`scripts/`, `.github/`), so the change is text-only.
## 批 #3 已裁 (maintainer 「同意」 = 1.1 A · 1.2 A · 2 A, 2026-10-23)
The two implementation-level self-choice lines first left for the
maintainer's word, plus the report-only valve and the human floor, are
now written as ruled (third commit):
1. **1.1 A — keep with a guard.** A dev's implementation choices stay
its own and are recorded in `open_questions`; touching product-visible
behaviour or a contract is a fork, never a choice (`dispatch-runbook.md`
L115). The PM's non-escalation classes carry the same guard (`SKILL.md`
〈升级与决策〉).
2. **1.2 A — keep the valve, three hard conditions.** A gate red twice
in an hour on untouched packages may be flipped to report-only by any
seat — only report-only (never a deleted gate or a skipped test), the
item goes to the decision digest for the next batch in the same stroke
with both red runs, and it flips back if the maintainer disagrees
(`triage-duties.md` 例外二).
3. **2 A — the human floor, widened and judgeable.** Beside the restored
list: releases and anything public, external commitments, a card's fate
(not planned, downgrade, withdrawal, halving), rules and process,
defaults and factory shape, identity and tenancy model, cross-lane
conflicts. Two criteria, any one of which presents the item: seven risk
tests (security/permission/identity/tenancy boundary; irreversible
stored data; contract or ADR change; outward-visible action; gate
weakening or any exemption; contrary to a ruling or a new standing
order; silent on a wrong pick) and four workload tests (a size/l option
or ≥2 packages; chosen plan ≥2× the cheapest viable; a new permanent
maintenance surface; ≥3 serial cards or a slot held over a working day).
The never-presented list and its four-gate boundary (no product-visible
change, no contract change, revertible, gate-backed) close it; every
presented card names the criterion it hits. `SKILL.md` gains the one
pointer line that binds every seat to it.
Line budget: `triage-duties.md` lands at 120, its ceiling on `main` (−13
revocation, +13 ruling); `SKILL.md` lands at its 319 ceiling (the
pointer line spends the last line of headroom); no ceiling is raised.
## Serial constraints
Open PRs on the same tree, checked before the first push: #25247
(`SKILL.md` 〈域车道〉 lane table + lane files), #25254
(`platform-readings.md` L403), #25255 (new `coordinator.md`, `SKILL.md`
入口与角色 row and the deletion of the 项目总监席 line at L274,
`dispatch-runbook.md` cap line, ratchet rows beside
`seat-lifecycle.md`). This PR touches none of those regions, but two
hunks sit within three lines of #25255's (`SKILL.md` L276 and the
ratchet's `triage-duties.md` row), so whichever lands second takes a
trivial re-merge and re-measures `check:pm-skill-ratchet`. #25255's item
5 still points at the ruling thread this PR removes; its author
re-points it after this lands.
## Verification
- `pnpm check:pm-skill-ratchet` ✓ (SKILL.md 319/319; director.md 70/70;
triage-duties.md 120/120; every changed line ≤120 bytes)
- `pnpm check:pm-skill-id-lint` ✓ · `pnpm check:skill-frame-sync` ✓ ·
`pnpm check:skill-frame-freshness` ✓
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` on the actual changed paths: 44 commands,
run with exit codes recorded and reconciled with `--ran` — see the
verification comment on this PR.
- `git grep -n -E '代裁|自裁|auto-adjudicated|裁决线程|有把握' -- .claude/skills` →
only negations (⛔ 无代裁 …) and the three lane charters that already
forbade it.
Governed surface `.claude/**` (Tier S): draft, awaiting the seat's
`CONTRACT_REVIEW_TIER` review and the maintainer's word; ⛔ not to be
flipped ready, queued or armed by this thread. `skip-changeset`: no
published package is touched.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01MJceC3xyxUtL12bEdf7QBC
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent fc5e70e commit 6bf0ff5
8 files changed
Lines changed: 52 additions & 45 deletions
File tree
- .claude/skills/pm-dispatch
- references
- lanes
- scripts/pm
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
30 | | - | |
| 30 | + | |
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| |||
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
106 | | - | |
| 106 | + | |
107 | 107 | | |
108 | 108 | | |
109 | 109 | | |
| |||
212 | 212 | | |
213 | 213 | | |
214 | 214 | | |
215 | | - | |
216 | | - | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
217 | 218 | | |
218 | 219 | | |
219 | | - | |
220 | | - | |
| 220 | + | |
| 221 | + | |
221 | 222 | | |
222 | 223 | | |
223 | 224 | | |
| |||
231 | 232 | | |
232 | 233 | | |
233 | 234 | | |
234 | | - | |
| 235 | + | |
235 | 236 | | |
236 | 237 | | |
237 | 238 | | |
| |||
261 | 262 | | |
262 | 263 | | |
263 | 264 | | |
264 | | - | |
| 265 | + | |
265 | 266 | | |
266 | 267 | | |
267 | | - | |
| 268 | + | |
268 | 269 | | |
269 | 270 | | |
270 | 271 | | |
| |||
273 | 274 | | |
274 | 275 | | |
275 | 276 | | |
276 | | - | |
| 277 | + | |
277 | 278 | | |
278 | 279 | | |
279 | 280 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
35 | | - | |
| 35 | + | |
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
60 | | - | |
| 60 | + | |
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
| |||
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
77 | | - | |
| 77 | + | |
78 | 78 | | |
79 | 79 | | |
80 | 80 | | |
| |||
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
115 | | - | |
| 115 | + | |
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
| |||
143 | 143 | | |
144 | 144 | | |
145 | 145 | | |
146 | | - | |
| 146 | + | |
147 | 147 | | |
148 | 148 | | |
149 | 149 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
100 | 100 | | |
101 | 101 | | |
102 | 102 | | |
103 | | - | |
| 103 | + | |
104 | 104 | | |
105 | 105 | | |
106 | 106 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
| 21 | + | |
| 22 | + | |
25 | 23 | | |
26 | 24 | | |
27 | 25 | | |
| |||
47 | 45 | | |
48 | 46 | | |
49 | 47 | | |
50 | | - | |
| 48 | + | |
51 | 49 | | |
52 | | - | |
| 50 | + | |
53 | 51 | | |
54 | 52 | | |
55 | 53 | | |
56 | 54 | | |
57 | 55 | | |
58 | 56 | | |
59 | | - | |
60 | | - | |
| 57 | + | |
| 58 | + | |
61 | 59 | | |
62 | 60 | | |
63 | 61 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
69 | | - | |
| 69 | + | |
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
| |||
0 commit comments