Repository navigation
Commit 0790d0a
chore(pm-dispatch): ADR cards dispatch at the contract-review tier, effort floor xhigh (#25780)
<!-- claude-projects-attribution: {"github_login":"os-project-manager"}
-->
_Requested by **Leehom** · [project
thread](https://claude.ai/code/project/chan_01TenzsRopZj4jMbvjX8uz1X?thread=cmsg_01TenzsRopZj4jMbvjX8uz1X5YusjSEHT8KRnVbiKjJ22B)_
Fixes #25729
Clause-②: no
Metadata-protocol: none
## What changes
The order quoted in the card body, verbatim (田騏, 2026-10-25T01:40:25Z):
「adr 这种任务都需要 fable extra,重新处理并立skills 卡片」.
1. **Tier row** — `MANDATORY_TIER_GLOB_ROWS`
(`scripts/pm/dispatch-gates.data.mjs`) gains `docs/adr/**` →
`CONTRACT_REVIEW_TIER`, a `why:` quoting the order, and `oneLineExit:
false` (「都需要」 closes the one-line exit by path, the same shape as the
`skills/**` row). The table docblock's provenance sentence and its
one-line-exit paragraph name the new row.
2. **Effort floor** — carried in skill text, not by a printed line: the
clause-① line of `references/execution-duties.md` (dispatch section,
where tier and effort are chosen) now reads `凡改协议语义面或 docs/adr/**
的卡一律契约复审档;后者 effort 下限 xhigh`. A floor: difficulty may raise it, never
lower it.
3. **Policy text** — the same clause-① line is the predicate the table
copies, so the table stays a copy; the no-one-line-exemption line beside
it now names `docs/adr/**` beside `skills/**`.
4. **Reason wording in `tierLines`** (`scripts/pm/dispatch-gates.mjs`) —
the refusal of the one-line exit hard-coded "(the published catalog,
2026-09-10 ruling)" as the reason for EVERY `oneLineExit: false` glob,
which would have printed the catalog's ruling for an ADR card. The
existing line now points at the row's own `why`, already printed on the
hit line above it. The comment above it is updated to match.
5. **Self-test** (`scripts/pm/dispatch-gates.self-test.mjs`) — the pin
"every entry except `skills/**` keeps `oneLineExit` undefined" is
widened to the two barred globs; new cases: the `docs/adr/**` row's
shape, an ADR file mandated by that row alone, `docs/NORTH-STAR.md` and
a `docs/adr-notes.md` prefix sibling NOT mandated, and the ADR rendering
refusing the exit by name without borrowing the catalog's reason.
`node scripts/pm/dispatch-gates.mjs --tier
docs/adr/0028-metadata-naming-and-namespace-isolation.md` now answers
`Model tier — MANDATORY: … ⇢ 'docs/adr/**'` with the one-line exit
marked NOT available (on `origin/main` `f0cf3383` it answered "no
path-derived mandate").
## Which side of the instrument freeze
`references/instrument-discipline.md` freezes `dispatch-gates.mjs`: no
new gate, derivation line, ratchet, `--tier` mandated tier or constant.
- Item 1 is a data row in the existing table in
`dispatch-gates.data.mjs`, mandating the EXISTING
`CONTRACT_REVIEW_TIER`; no new constant, no new tier, no new printed
line. Whether a new path row counts as a new "`--tier` 强制档" under that
wording is flagged for the reviewer below; the freeze also admits
additions that quote the maintainer verbatim on the card, which the card
body does.
- Item 2 deliberately takes the skill-text carrier, so no effort line is
added to `--tier`.
- Item 4 edits an existing line's wording in place (no line added): it
is the freeze's own exception, a derivation that would otherwise print a
wrong reason.
## Line budget
- `references/execution-duties.md`: 188 → 188 lines (ceiling 188). Both
edits are in-place line rewrites, each ≤120 bytes (116 B and 110 B).
Paid by deletion, not re-wrap: the line naming `skills/**` dropped the
descriptors 「发布的」 and 「整根」 (the glob `skills/**` already spells the
whole root; the publish reason `随 npx skills add 发运` stays on the line
and in the `skills/**` row's `why`).
- `SKILL.md`: untouched (319/319). The claim template's `effort: …按卡难度定`
slot is not edited; the floor lives where effort is chosen.
## Gates (local, at `76ffcc7`)
Derived with `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack`: 39 commands, all run, all exit 0; `--ran`
reconciliation: `39 derived famil(ies) accounted for — 39 run, 0
NOT-MEASURED`. Includes `pnpm check:pm-dispatch-gates` (fast tier, 1917
cases pass), `check:pm-skill-ratchet`, `check:pm-skill-id-lint`,
`check:skill-frame-sync`, `check:pm-governed-merges`,
`check:doc-authoring`, `check:nul-bytes`.
`check:doc-formula-expressions` first answered exit 3 (prerequisite:
`@objectstack/lint` unbuilt), re-run after building it: exit 0.
Both-tier self-test result: see the report comment on the card. No
changeset: the diff is `.claude/**` + `scripts/pm/**`, which publish
nothing (`skip-changeset`).
## 维护者速读(草稿)
- **改了什么:** 凡是改 `docs/adr/**`(写 ADR)的卡,派发时一律用最高档模型(契约复审档),effort 至少
`xhigh`,且不再有"一行级小改可降档"的例外。派发工具 `--tier` 对 ADR 路径会直接印出"强制档"。
- **为什么改:** 执行田騏的指令「adr 这种任务都需要 fable extra」。ADR
是后续实现卡的依据,写错要付两次代价(维护者审一次,每张据此拆出的实现卡再付一次);此前 ADR 卡按默认档派发,工具无法提示。
- **风险与代价(含回滚):** ADR 卡的派发成本上升(最高档 + xhigh)。不新增 CI 门禁、不拒任何 PR。回滚 = 撤回本
PR 一次提交。
- **席位意见:**
- **你要做的:** 本 PR 触及 `.claude/**`(受管面 Tier S),需契约复审档复核 PASS
在案后由席位落地;如认为调整派发档位规则需要您本人点头,请在此答复。
## Acceptance notes
- Open for the reviewer: does a new path row in
`MANDATORY_TIER_GLOB_ROWS` count as a new "`--tier` 强制档" under
`instrument-discipline.md`'s freeze? The freeze admits additions that
quote the maintainer verbatim on the card; whether 田騏's order is that
word is triage's / the director seat's call, as the card's Boundary
section says.
- `max` stays 「凭维护者点名」 (the effort line right below clause ①); the ADR
floor only raises the minimum to `xhigh`, it does not open `max` without
that word.
- #25765 (review depth for spec/skills/ADR) is out of scope here and
remains open; re-dispatching already-merged ADR cards is out of scope.
Implemented in the card thread, session
`session_01X6Y7QshYEp9SD3ruEazFRS`; claim 6396126096.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01X6Y7QshYEp9SD3ruEazFRS)_
Co-authored-by: Claude <noreply@anthropic.com>1 parent afe6ab9 commit 0790d0a
4 files changed
Lines changed: 33 additions & 11 deletions
File tree
- .claude/skills/pm-dispatch/references
- scripts/pm
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
93 | 93 | | |
94 | 94 | | |
95 | 95 | | |
96 | | - | |
| 96 | + | |
97 | 97 | | |
98 | 98 | | |
99 | | - | |
| 99 | + | |
100 | 100 | | |
101 | 101 | | |
102 | 102 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1098 | 1098 | | |
1099 | 1099 | | |
1100 | 1100 | | |
1101 | | - | |
1102 | | - | |
| 1101 | + | |
| 1102 | + | |
| 1103 | + | |
1103 | 1104 | | |
1104 | 1105 | | |
1105 | 1106 | | |
| |||
1160 | 1161 | | |
1161 | 1162 | | |
1162 | 1163 | | |
1163 | | - | |
1164 | | - | |
| 1164 | + | |
| 1165 | + | |
| 1166 | + | |
1165 | 1167 | | |
1166 | 1168 | | |
1167 | 1169 | | |
| |||
1189 | 1191 | | |
1190 | 1192 | | |
1191 | 1193 | | |
| 1194 | + | |
| 1195 | + | |
| 1196 | + | |
| 1197 | + | |
| 1198 | + | |
| 1199 | + | |
| 1200 | + | |
| 1201 | + | |
| 1202 | + | |
1192 | 1203 | | |
1193 | 1204 | | |
1194 | 1205 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12115 | 12115 | | |
12116 | 12116 | | |
12117 | 12117 | | |
12118 | | - | |
12119 | | - | |
12120 | | - | |
| 12118 | + | |
| 12119 | + | |
| 12120 | + | |
| 12121 | + | |
| 12122 | + | |
12121 | 12123 | | |
12122 | 12124 | | |
12123 | 12125 | | |
12124 | 12126 | | |
12125 | 12127 | | |
12126 | 12128 | | |
12127 | 12129 | | |
12128 | | - | |
| 12130 | + | |
12129 | 12131 | | |
12130 | 12132 | | |
12131 | 12133 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9999 | 9999 | | |
10000 | 10000 | | |
10001 | 10001 | | |
10002 | | - | |
| 10002 | + | |
| 10003 | + | |
| 10004 | + | |
| 10005 | + | |
| 10006 | + | |
| 10007 | + | |
| 10008 | + | |
| 10009 | + | |
| 10010 | + | |
| 10011 | + | |
10003 | 10012 | | |
10004 | 10013 | | |
10005 | 10014 | | |
| |||
0 commit comments