Repository navigation
Commit 55dca46
docs(pm-dispatch): docs-only ADR cards dispatch at CONTRACT_REVIEW_TIER + xhigh by standing order (#29850)
<!-- claude-projects-attribution: {"github_login":"os-support-ai"} -->
_Requested by **Yibo Wang** · [project
thread](https://claude.ai/code/project/chan_01BVUyyPie8gHwoPM18iABwB?thread=cmsg_01BVUyyPie8gHwoPM18iABwB2vEgYu9RMV3usWrzEnJjcx)_
Fixes #29741
Clause-②: no
Metadata-protocol: none
**Rules text only.** Two lines of
`.claude/skills/pm-dispatch/references/execution-duties.md` 〈派发〉 are
rewritten in place; nothing published moves (`skip-changeset`).
## 维护者速读
- **改了什么**:派发规则里写死「ADR 修订卡(修订说明、措辞修正、`Amended by` 条目)走契约复审档、effort
`xhigh`,凭常设令,不再逐卡问;新裁决除外」;effort 表把 ADR 列进 `xhigh` 档,`max` 仍凭点名。
- **为什么改**:原文只定了档位和 effort 下限,席位读成每张 ADR 卡都要问一次维护者;你 2026-11-03
已定为常设令,规则文本要跟上,后续 ADR 卡不再绕一趟决裁线程。
- **风险与回滚**:只动两行规则文字,无代码无发布面;回滚即还原本 PR。改法上「其它 ADR 卡」的 `xhigh` 地板由 effort
表接住,没有降档。
- **先看**:`execution-duties.md` 第 101 行(条款①)与第 122 行(effort 表),diff
只有这两行。
- **两分钟验证**:`pnpm check:pm-skill-ratchet && pnpm
check:pm-skill-id-lint`,预期两条都 ✓(文件仍 188 行,第 101 行 119 字节、第 122 行 120
字节)。
- **需要你做的**:无,席位落地(Tier S,`.claude/**` 内)。
## What changes
One file, two lines, net zero lines. The file sits at its 188-line
ratchet ceiling, so each rewritten line had to carry the new rule inside
the 120-byte line cap on its own; no other line was re-wrapped to buy
room.
```diff
@@ line 101 (116 B → 119 B) @@
-- 强制条款①:凡改协议语义面或 `docs/adr/**` 的卡一律契约复审档;后者 effort 下限 `xhigh`。
+- 强制条款①:改协议语义面或 `docs/adr/**` 即契约复审档;ADR 修订常设令 `xhigh`,新裁决除外。
@@ line 122 (120 B → 120 B) @@
-- S 机械 `medium`;M `high`(默认);L/XL/`security`/p1/契约复核/四轴分析 `xhigh`;`max` 凭点名或常设令。
+- S 机械 `medium`;M `high`(默认);L/XL/security/p1/契约复核/四轴分析/ADR `xhigh`;`max` 凭点名/常设令。
```
What each line now says:
- **Line 101 (条款①).** The tier half is unchanged in meaning (protocol
semantic face or `docs/adr/**` ⇒ CONTRACT_REVIEW_TIER; 「凡…的卡一律」
shortened to 「…即」). The effort half is the standing order: an ADR
revision card (ADR 修订: an amendment note, a wording fix, an `Amended by`
entry) takes effort `xhigh` by 常设令, so the seat does not ask per card
(neither a chat question nor a decision card); 新裁决除外 keeps a card that
needs a new ruling, a superseding ADR included, outside the order.
- **Line 122 (effort table).** `ADR` joins the `xhigh` list, so the
`xhigh` floor that line 101 used to state for every `docs/adr/**` card
(mixed ADR + code, a superseding ADR, a card that needs a new decision)
still holds there, and the existing tail `max` 凭点名 keeps `max` on an ADR
card a named per-card word. To fit `/ADR` inside 120 bytes: `security`
lost its backticks (its neighbour `p1` never had them) and 「凭点名或常设令」
became 「凭点名/常设令」 (the same separator the list already uses).
Outside the order, nothing moves: a card that needs a new decision still
goes to a decision thread, a superseding ADR or an ADR + code diff keeps
the existing routes (CONTRACT_REVIEW_TIER, `xhigh` from the effort
table, split per the existing rules). The words ADR 修订 and 新裁决除外 carry
that boundary (patch round 1, after the at-tier review's should-fix: the
first wording 纯文档 ADR … 免逐卡问 left a superseding ADR inside the order by
its wording).
Provenance (maintainer, date) is deliberately not in the rule text:
`check-skill-id-lint`'s header says the scanned corpus carries rules
only and provenance lives in the PR that landed it, which is this one
(Warren, 2026-11-03T03:05Z, option A 「fable + xhigh,立为常设令」, then
「这个应该立卡更新 skills」). The claim template's `reason:` clause already names
常设档位令; after this lands a seat cites this card's number there.
## Why
The text fixed the tier and an effort floor but not the effort itself,
and named a 常设令 only as a way to reach `max`. A seat dispatching a
one-paragraph ADR edit read that as a per-card maintainer call and
waited on a decision thread for an answer the rule already implied. The
standing order removes that round trip; this PR records it where seats
read.
## Tests
None owed: prose in a `.claude/**` reference file, no code or test
moved. The two skill gates that judge this file are in the Verification
section.
## Acceptance notes
- **Mirror check (the card's last bullet), re-measured on 42ff86f.**
`grep -n 维护者` near 档/effort/模型 in `SKILL.md` and `dispatch-runbook.md`:
SKILL.md line 311 (claim template `reason:` already names 常设档位令) and
line 275 (director tier, unrelated); dispatch-runbook.md line 137 says
「档位与 effort 席位自推导 ⛔ 不等维护者原话」. Neither repeats a per-card ask, so no
mirror edit; the order file predicted the same.
- **Wording choices a reviewer may want to push back on:** 「强制条款①」 kept
verbatim (the anchor other lines cite as 条款①/条款②); 「ADR 修订」 stands for
the card's amendment class; 常设令 already means no per-card ask, so 「免逐卡问」
gave way to 「新裁决除外」.
- **Attribution thread link.** The order file spells the skills-lane
thread in the attribution line; this body carries this card thread's
link because the session's own attribution rule names it. Same project,
same requester.
- Out-of-scope findings: none.
## Verification
- `pnpm check:pm-skill-ratchet` on 3c7c757 and 6462193: ✓
(execution-duties.md 188 lines at ceiling 188; line-byte check clean).
- `pnpm check:pm-skill-id-lint` on 3c7c757 and 6462193: ✓ 109 file(s)
clean.
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derived 17 commands for the one changed path
(merge base 42ff86f); each run serially, exit codes captured before
any pipe, then `--ran`: 17 derived, 17 run, 0 NOT-MEASURED, exit 0
(`check:doc-formula-expressions` first exited 3 on a missing
`@objectstack/lint` dist; after `turbo run build
--filter=@objectstack/formula --filter=@objectstack/lint` it exited 0).
All on 3c7c757; `origin/main` then moved (c5ddbea, no pm-dispatch or
gate-script file touched) and was merged as 6462193, where `--commands`
derives the same 17 and `check:pm-skill-ratchet` +
`check:pm-skill-id-lint` re-ran ✓.
- Patch round 1 (bd51c88, line 101 only): `pnpm check:pm-skill-ratchet`
exit 0, `pnpm check:pm-skill-id-lint` exit 0.
- CI check-runs: in_progress at PR open; the seat reads them at ACCEPT.
## Human Minimum
Each item is one rule from
[CONTRIBUTING.md › Human
Minimum](https://github.com/objectstack-ai/objectstack/blob/main/CONTRIBUTING.md#human-minimum),
which links the AGENTS.md text that states it.
- [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic.
(not touched)
- [x] 2. Every name I added uses the casing for its kind. (no names
added)
- [x] 3. No formatter ran; `pnpm lint` is CI's run (repo-level scan).
- [x] 4. One issue, one branch off an up-to-date `main`, one pull
request.
- [x] 5. A change that publishes carries a changeset, and both
declaration lines are filled in here and in the changeset. (`.claude/**`
is not published: `skip-changeset`)
- [x] 6. `packages/spec` touched: its generated artifacts are
regenerated and committed. (not touched)
- [x] 7. No hand edits to `content/docs/references/`,
`packages/*/CHANGELOG.md` or `content/docs/releases/`.
- [x] 8. Title, body and comments are in English. (the 维护者速读 block and
the rule text itself are Chinese by the dispatch contract)
- [x] The *Before Submitting* list in CONTRIBUTING.md is done.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01WGufzir9DwLT7sHJkBootW)_
<!-- signed: domain:skills#3 · os-support-ai ·
session_01WGufzhd2Ad9ANGTyAMW7pH -->
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 118bee4 commit 55dca46
1 file changed
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
101 | | - | |
| 101 | + | |
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
| |||
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
122 | | - | |
| 122 | + | |
123 | 123 | | |
124 | 124 | | |
125 | 125 | | |
| |||
0 commit comments