Repository navigation
Commit 3e8e2b0
Fixes #19496
Clause-②: no
**Tier H — the maintainer merges this by hand.** The diff touches
`AGENTS.md` and `.claude/**`, so one Tier H path makes the whole PR Tier
H: no seat flips it ready, queues it, or arms auto-merge, and no agent
account approves it.
Authorization, verbatim and untranslated — maintainer, 2026-09-21
(ruling #208 on #19491):
> 「19491 接受你的建议,并立刻派发处理相关任务。」
## What lands — five charter edits, text only
Nothing under `scripts/`, `.github/` or `packages/` is touched. The C5
code demotion, the patrol schedule and the CI self-test scoping are
their own cards.
**R1 — a non-zero `--pair` blocks landing only on rows that answer a
definite question.** `SKILL.md` 〈入队与落地〉 and
`references/contract-review.md` 落地前检三条:
```text
- `Clause-②: yes` 认领同笔卡上挂标;开 PR 跑 `--pair N`:只确定性行红才挡请审,C5 只印读数。
- 0 = 确定性行全清;4 = 任一不成立,只确定性行红才挡落地;3 = 环境答不了 ⛔ 不作干净。
- 确定性行 = 记录在案、`Served-tier:`、双载体一致、认领形;C5 放宽 tell 只报告,归复核裁。
```
`AGENTS.md` Prime Directive #14 is where the conjunct lives — `git grep
-n -- '--pair' AGENTS.md .claude` is the census (1 hit in `AGENTS.md`, 5
in `.claude`). Tier S now reads `reads 0 on its definite rows (⛔ never
C5) and every check is green`; the paragraph was re-wrapped from that
sentence onward and `AGENTS.md` stays at 1109 lines.
**R2 — the rule line**, next to the tooling rules ruling #202 B landed,
in 〈分诊座位职责〉's filing classes:
```text
- 只报告的仪器,报错不配 dev:猜意图的只印读数,误报席位一句推翻,⛔ 不立卡不派 dev。
```
**R3 (charter half) — the patrol anchor stops being a precondition.**
The two 〈执行座位职责〉 lines are deleted; one line replaces them, mirrored in
`references/core-rules.md`:
```text
SKILL.md - 半状态巡查按需跑(分诊席每日对账可调),H 行是读数不是前提;⛔ 不因锚行停派发。
core-rules.md - 半状态巡查按需跑,其 H 行是读数不是前提,⛔ 不因锚行停派发。
```
**R5 — at-tier review: scope and shape**, in
`references/contract-review.md` 〈复核归属与资格〉:
```text
- 复核面 = 出货给用户或 agent 的:`content/docs/**`、`apps/docs/**`、CHANGELOG/`.changeset` 散文。
- 同含已发布 schema 与 governed 规则文本;三面皆不碰 ⇒ CI 加席位自读,⛔ 不起第二个 agent。
- 复核形状:只读 diff 与卡片,check 结论取 head 的 check-runs,⛔ 永不本地重跑派生门禁族。
```
`Served-tier:` and the record shape are unchanged.
`check-clause2-carriers --template` prints nothing that contradicts the
shape: its ③ is the record's boundary-flag heading and it prescribes no
local gate run, so no script edit was needed (checked; reported below as
a reading, not a finding).
**R6 — 〈仪器纪律〉** is a new reference,
`references/instrument-discipline.md` (11 lines), with exactly one
pointer line in SKILL.md 〈平台读数纪律〉, placed one line below the
advisory-red rule:
```text
- 仪器纪律(硬门禁面、只报告面、新增授权、工具位)见 `references/instrument-discipline.md`。
```
The section itself:
```text
- 硬门禁只答有确定答案的问题:受管登记表、队列守卫、CI 测试、复核记录在不在。
- 判意图的仪器(放宽 tell、半状态巡查)只印读数 ⛔ 不挡落地,误报由席位一句话推翻。
- 放宽 tell(C5)由 `scripts/pm/check-widening-tells.mjs` 印 file:line,归达档复核裁。
- 只报告的仪器不配 dev:⛔ 不立卡、不派 dev、不开 PR;它的在途工作只有删除。
- 新增门禁、巡查行或棘轮须在卡上引维护者原话,⛔ 无原话不新增;首行四件恒硬。
- 工具位只有一个,先花在删除上;`dispatch-gates.mjs` 冻结,只在它喂的 workflow 坏了时碰。
- 出处:维护者 2026-09-21 逐字「19491 接受你的建议,并立刻派发处理相关任务。」
```
**Why a new file rather than `landing-operations.md`.** Every file an
at-tier reader already opens for landing or gates stands at its ceiling
with zero headroom — `landing-operations.md` 69/69, `true-green.md`
32/32, `review-checklist.md` 77/77 — and the section costs 11 lines, so
hosting it in one of them means deleting live rules, which this card
forbids. The pointer instead sits where the reader deciding what a gate
reading means already is: 〈平台读数纪律〉, right after the two lines on a gate
job's conclusion and an advisory red. The new file carries no `CEILINGS`
row, because that row is an edit under `scripts/**` (out of scope here)
and R6's own rule says a new ratchet needs the maintainer's sentence on
its own card — reported below.
## The line ratchet — no ceiling raised, every added line paid in place
`pnpm check:pm-skill-ratchet` exit 0. Per-file counts on head
`fec2177089`, after merging `origin/main`:
| file | lines | ceiling | headroom | net this PR |
|:--|--:|--:|--:|--:|
| `.claude/skills/pm-dispatch/SKILL.md` | 819 | 819 | 0 | 0 |
| `.claude/skills/pm-dispatch/references/contract-review.md` | 60 | 60 |
0 | 0 |
| `.claude/skills/pm-dispatch/references/core-rules.md` | 151 | 151 | 0
| 0 |
| `AGENTS.md` | 1109 | 1109 | 0 | 0 |
| `.claude/skills/pm-dispatch/references/instrument-discipline.md` | 11
| none | — | new file |
What paid for the added lines — de-duplication only, no rule deleted,
each surviving carrier named:
- SKILL.md 〈复核〉's two 受管面两层 lines became one. The Tier H enumeration it
dropped is the 〈复核〉 line three above it (governed 面统一定义), and 四件套 is
stated at 路径面命中规则层 ⇒ ACCEPT 换终局四件套.
- contract-review.md's 双载体同笔挂 line is stated in SKILL.md 〈入队与落地〉
(`needs:contract-review`(恒英文)由席位同笔挂:PR 一现即挂 PR;报告先到则先挂卡); its unique
tail, ACCEPT 补齐 PR 侧, rides the next line.
- contract-review.md's two `Implemented-by:` / `Reviewed-by:` spelling
lines became one pointer at `--template`, which prints both fields
verbatim — and the record-shape line three above already cites that
template.
- contract-review.md's standalone Tier H/S landing line left; the tier
outcome now rides the 落地前检三条 line itself, so
`references/lanes/director.md`'s pointer at this block still resolves,
and SKILL.md 〈复核〉 carries the full two-tier rule.
- `AGENTS.md`: 43 added bytes absorbed into the paragraph's own slack by
re-wrapping from the edited sentence onward; no line was bought.
## Collision — both charter PRs merge clean
- **PR #19462** (`claude/issue-19457-charter-product-only-queue`, head
`36ab00aa`) **merged into `main` during this round.** `git merge-tree
--write-tree 36ab00a HEAD` was exit 0 with zero conflict markers before
that, and this branch then merged `origin/main` (`48c39e00`) with no
conflict. Its `tooling` label rules, its two gate-false-positive lines
and its ratchet bump (SKILL.md 813 → 819) are all present on this head.
- **PR #19488** (`claude/issue-19483-feature-axis-charter`): the card
named head `420bd091`; the branch tip is now `16418377`. `git merge-tree
--write-tree 1641837 fec2177` → **exit 0**, tree
`02a7323a2d779974bd035082ad954eaf4cd15a21`, zero conflict markers. Every
line that PR touches is untouched here.
## Acceptance
| grep | result |
|:--|:--|
| `git grep -n '0 才请审' .claude` | 0 hits (exit 1) |
| control `git grep -n -- '--pair' .claude` | 5 hits (os-dev.md 1,
SKILL.md 1, contract-review.md 2, platform-readings.md 1) |
| `git grep -n '锚行未处置' .claude` | 0 hits (exit 1) |
| control `git grep -n '半状态' .claude` | 24 hits across 8 files |
| `git grep -n 'C5' …/references/contract-review.md` | 1 hit, naming it
只报告 |
## Gates
Derived on this diff with `node scripts/pm/dispatch-gates.mjs --commands
--repo objectstack-ai/objectstack` — 23 commands; the derivation also
names 11 wide-population, 53 artifact-roster, 14 pending-changeset and 2
CI-valued families as outside that list, so this is not a complete
account of CI. Every exit code was captured **before** any pipe (`cmd >
log 2>&1; e=$?`). Reconciled with `--ran`: **23 derived, 23 run, 0
NOT-MEASURED, 0 UNRUN.**
```text
node scripts/check-closing-keyword-parity.mjs :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0
node scripts/check-comment-mask-corpus.mjs :: exit 0
node scripts/pm/check-governed-queue-guard.mjs --self-test :: exit 0
node scripts/pm/check-harness-current.mjs --self-test :: exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0
pnpm check:agent-test-spelling :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:doc-authoring :: exit 0
pnpm check:docs-audit-scope :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:gitlink-declared :: exit 0
pnpm check:nul-bytes :: exit 0
pnpm check:pm-expected-skips :: exit 0
pnpm check:pm-governed-merges :: exit 0
pnpm check:pm-governed-prose :: exit 0
pnpm check:pm-half-states :: exit 0
pnpm check:pm-skill-id-lint :: exit 0
pnpm check:pm-skill-ratchet :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:required-contexts :: exit 0
pnpm check:skill-frame-sync :: exit 0
pnpm check:watch-hint-literal :: exit 0
```
Three more, run because this card names them:
```text
pnpm check:pm-widening-tells :: exit 0 (self-test only — 525 cases; checker health, not a verdict on this diff)
node scripts/pm/check-widening-tells.mjs --declaration no --diff pr.diff :: exit 0 (a real verdict: no tell)
pnpm check:pm-label-desc-cap :: exit 0
pnpm check:pm-settings-deny-roster :: exit 0 (its roster lives under .claude, which this diff is in)
```
Two gates first answered `exit 3` (PREREQUISITE NOT MET) in a fresh
worktree and were re-run after `pnpm install`, and
`check:doc-formula-expressions` after `pnpm exec turbo run build
--filter=@objectstack/formula --filter=@objectstack/lint` under the
shared verify lock (VERDICT command-exit 0). Those 3s are recorded as
what they are — nothing measured, not a finding.
`skip-changeset` applies: the diff is `.claude/**` plus `AGENTS.md`,
nothing under `packages/**`, and no published `files[]` content moves.
## Acceptance notes — out of scope, not filed by the dev
- SKILL.md 〈状态模型〉 still says 派发与折叠检查时读半状态巡查锚的 H17 触发文件索引. With the
patrol's schedule retired on its own card, that index can go stale; this
card's R3 scope was the two 〈执行座位职责〉 lines only. Dedupe words: 半状态巡查锚,
H17, 触发文件索引, 折叠检查.
- `references/instrument-discipline.md` carries no `CEILINGS` row, so it
is the one un-ratcheted file on the pm-dispatch surface. Adding the row
is an edit under `scripts/**`, and by R6's own rule a new ratchet needs
the maintainer's sentence on its card. Dedupe words: CEILINGS,
instrument-discipline, ratchet row, un-ratcheted reference.
- `check-clause2-carriers --template` prints no line contradicting R5's
shape (checked; no script edit).
## 维护者速读(草稿)
**改了什么** — 把「仪器」这件事写成纪律:`--pair`
这类硬门禁只在能给出确定答案的行上挡落地(复核记录在不在、档位行在不在、两个标签载体一不一致、认领形对不对);猜意图的那一行(C5 放宽
tell)从此只印读数,由达档复核的人判。半状态巡查从「每轮派发的前置条件」降为「按需跑的读数」。达档复核的范围收到「会出货给用户或 agent
的东西」,形状收到「读 diff 加读 CI 的 check-runs」,不再本地重跑门禁。新增一页〈仪器纪律〉,把这几条连同「只报告的仪器不配
dev」「新增门禁要维护者一句话」「工具位先花在删除上」写在一起。
**为什么改** — 裁决 #208 的实测:工具链自己占了三到四成的合并量、每个 PR 三分之二的 CI 关键路径;把 #19314
挡住的那道门,本体只是两句章程话,不是 CI 门禁。一次达档复核 24 万 token、29 分钟,其中最大一块是在本地重跑 CI 已经跑过的
37 个门禁族。这三件都不是删代码能解决的,是纪律写错了地方。
**风险与代价(含回滚)** — 代价是硬门变软:C5 不再挡人,漏网要靠复核的人看见。回滚是一次
revert,因为全是文本。棘轮一行没抬,新增的行全部用去重付账,幸存载体逐条点名在上面;唯一的新面是那一页新文件,它暂时没有棘轮行。
**席位意见** —
**你要做的** — 读这五处改动,同意就人工合并(Tier H,队列与 auto-merge 都不适用)。
## Round 2 (seat's note)
Head `96774e44ef`. The at-tier review (5755678024, FAIL) named three
items; all fixed in one push: R5's obligation now keys on the **face**,
not the lane (`references/contract-review.md` 〈复核归属与资格(按面)〉 lines 24–27,
SKILL.md line 647, plus the two lane-keyed twins at SKILL.md 533 and
core-rules.md 113 — 「三面」 is now 「五面」 and the published schema names its
path `packages/spec/src/**` non-test); `origin/main` (`ea64bbc6e8`)
merged with the SKILL.md 180/181 conflict resolved keep-both;
`instrument-discipline.md` cites ruling 208 / card 19491 / comment
5755284987 with bare ids (the `#` spelling is what
`check:pm-skill-id-lint` refuses). Ratchet: SKILL.md 815/819,
contract-review.md 60/60, core-rules.md 151/151, AGENTS.md 1109/1109.
CI: this head has zero GitHub-Actions runs — a `.claude/**` plus
`AGENTS.md` diff matches no PR-level workflow paths; the merge queue's
`merge_group` run supplies the required contexts, so the empty check
list is the known shape and not a stall.
---
_Generated by [Claude
Code](https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE)_
---
_Generated by [Claude Code](https://claude.ai/code)_
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 88920d1 commit 3e8e2b0
5 files changed
Lines changed: 37 additions & 25 deletions
File tree
- .claude/skills/pm-dispatch
- references
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
178 | 178 | | |
179 | 179 | | |
180 | 180 | | |
| 181 | + | |
181 | 182 | | |
182 | 183 | | |
183 | 184 | | |
| |||
353 | 354 | | |
354 | 355 | | |
355 | 356 | | |
| 357 | + | |
356 | 358 | | |
357 | 359 | | |
358 | 360 | | |
| |||
427 | 429 | | |
428 | 430 | | |
429 | 431 | | |
430 | | - | |
431 | | - | |
| 432 | + | |
432 | 433 | | |
433 | 434 | | |
434 | 435 | | |
| |||
529 | 530 | | |
530 | 531 | | |
531 | 532 | | |
532 | | - | |
| 533 | + | |
533 | 534 | | |
534 | 535 | | |
535 | 536 | | |
| |||
629 | 630 | | |
630 | 631 | | |
631 | 632 | | |
632 | | - | |
633 | | - | |
| 633 | + | |
634 | 634 | | |
635 | 635 | | |
636 | 636 | | |
| |||
645 | 645 | | |
646 | 646 | | |
647 | 647 | | |
648 | | - | |
| 648 | + | |
649 | 649 | | |
650 | 650 | | |
651 | 651 | | |
652 | 652 | | |
653 | 653 | | |
654 | | - | |
| 654 | + | |
655 | 655 | | |
656 | 656 | | |
657 | 657 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
16 | | - | |
| 15 | + | |
17 | 16 | | |
18 | 17 | | |
19 | 18 | | |
20 | 19 | | |
21 | 20 | | |
22 | 21 | | |
23 | | - | |
| 22 | + | |
24 | 23 | | |
25 | | - | |
26 | | - | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
27 | 28 | | |
28 | 29 | | |
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
| 33 | + | |
32 | 34 | | |
33 | 35 | | |
34 | 36 | | |
35 | | - | |
36 | | - | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
40 | | - | |
| 41 | + | |
41 | 42 | | |
42 | | - | |
43 | | - | |
| 43 | + | |
| 44 | + | |
44 | 45 | | |
45 | 46 | | |
46 | | - | |
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
99 | 99 | | |
100 | 100 | | |
101 | 101 | | |
102 | | - | |
| 102 | + | |
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
| |||
110 | 110 | | |
111 | 111 | | |
112 | 112 | | |
113 | | - | |
| 113 | + | |
114 | 114 | | |
115 | 115 | | |
116 | 116 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
276 | 276 | | |
277 | 277 | | |
278 | 278 | | |
279 | | - | |
280 | | - | |
281 | | - | |
282 | | - | |
283 | | - | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
284 | 284 | | |
285 | 285 | | |
286 | 286 | | |
| |||
0 commit comments