Skip to content

Commit 3e8e2b0

Browse files
docs(pm-dispatch): instrument discipline — hard gates answer definite questions only; C5 and the patrol anchor stop blocking; at-tier review scoped to what ships and read from CI (#19496) (#19513)
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/SKILL.md‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
178178
- 定时器文本 ⛔ 不写结论、不含未经重读即可执行的祈使句。
179179
- 放行认门禁 job 的结论(`completed: success`),⛔ 不认聚合读数。
180180
- advisory 门禁红着进 main 是共享损伤,任何车道发现都立即止血并立单,见 landing-operations B。
181+
- 仪器纪律(硬门禁面、只报告面、新增授权、工具位)见 `references/instrument-discipline.md`。
181182
- dev 自己死了不等于维护者中止:子代理消失是正常死法,走接管(见认领节)。
182183
- 维护者中止只认原话或宿主回报 stopped by the user,⛔ 不据推断立无重启条件的门。
183184
- 共享基础设施修复入队前按症状复查 main,不按 issue 号。
@@ -353,6 +354,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
353354
- (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储的视图配置是。
354355
- 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内;记为边界,⛔ 不扩类。
355356
- (a) 须今天可达,(c) 须具名生产者;观察、休眠、零拉动 ⛔ 不立卡、不进汇总卡、无配额。
357+
- 只报告的仪器,报错不配 dev:猜意图的只印读数,误报席位一句推翻,⛔ 不立卡不派 dev。
356358
- 判「进 Acceptance notes」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。
357359
- ⛔ 说不出(`.changeset/*`、无人在改的文档页、生成物、已扫完的批次)⇒ 兜底不成立。
358360
- 仍然关,但关闭理由必须写明「承接者:无」。
@@ -427,8 +429,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
427429

428430
## 执行座位职责
429431

430-
- 每轮巡检第一判据:先读半状态巡查锚(`half-state-patrol.yml` 置顶 issue)。
431-
- 锚上点名本道卡/PR/座位贴的 H 行逐行处置,再做其余判据;锚行未处置 ⛔ 不开新派发。
432+
- 半状态巡查按需跑(分诊席每日对账可调),H 行是读数不是前提;⛔ 不因锚行停派发。
432433

433434
### 候选与批次
434435

@@ -529,7 +530,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
529530
- 机械放宽判别门禁落地前,入队前的席内契约复核是方向自述的补偿控制。
530531
- 豁免够不到的地板只有维护者裁决能设。
531532
- 席位档策略:skills 车道外的执行席与分诊席默认判断档会话。
532-
- 条款②复核按车道:spec 与 skills 席达档席内审;未达档 ⛔ 不自审,起隔离达档子代理。
533+
- 条款②自审资格按车道:spec 与 skills 席达档席内审;未达档 ⛔ 不自审,起隔离达档子代理。
533534
- 降档出口两条:额度耗尽豁免,与主动预降(余量吃紧可预先降档)。
534535
- 额度耗尽豁免仅当契约复审档实测不可用才落默认判断档,⛔ 不再往下。
535536
- 降档的档位与理由记入认领评论 Container & model 行;档位逐次派发显式传参,永不省略。
@@ -629,8 +630,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
629630
- ④ 轮次报告单列 awaiting a human merge。
630631
- 已入队才读到本条 ⇒ 转 draft 与 disable 都做;出队以阳性探针答,ref 缺席只旁证。
631632
- skills 车道自有 PR:纯代码面如 `scripts/pm/` 由本席按达档自审(清单不减)后落地。
632-
- 受管面两层:Tier H(规则层)= `AGENTS.md`+`CLAUDE.md`+`docs/adr/**`+`docs/NORTH-STAR.md`+发布 `skills/**`。
633-
- Tier S = `.claude/**` 全树;Tier H 四件套等人批;Tier S 经席内达档复核 PASS 在案后 ready → 入队。
633+
- 受管面两层:Tier S = `.claude/**` 全树,余皆 Tier H 等人批;S 经达档复核 PASS 后 ready → 入队。
634634
- 路径面干净的才转 ready → 入队;队列是唯一被认可的落地路径,⛔ 永不队列外合并。
635635
- 入队资格:每 check 绿或预期 skip,⛔ 非必查子集;名单 check-expected-skips.mjs 只判 objectstack。
636636
- 非必查红是真缺陷或坏门,归 PM 入队前处置;第三种按设计而红,三条全立才可带红入队:
@@ -645,13 +645,13 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
645645
- `--tier` 嫌疑行是提示非裁定;双肢命中任一 ⇒ 无达档条款②复核 PASS 在案 ⛔ 禁止入队。
646646
- 路径肢 = diff 触及契约面 `packages/spec/src/**`,含 error-code-ledger 与 `*.zod.ts` 契约 schema。
647647
- 声明肢 = 认领评论声明 `Clause-②: yes`,与路径无关;错误的 `no` 是可审计的假申报。
648-
- 交付后复核只 spec 与 skills 车道欠,每轮达档:席内审或起子代理;双肢命中即 spec 车道。
648+
- 交付后复核按面欠 ⛔ 不按车道(五面见 `references/contract-review.md`);双肢命中即 spec 车道。
649649
- 子代理起不来 ⇒ 复核缺席,PR 留 draft 队列外等档;唯一旁路是维护者亲审,逐次为准。
650650
- PASS ⇒ 同席剥标并引记录、ready、auto-merge;FAIL ⇒ 补丁轮;⛔ 免复核不放行。
651651
- 真正设计分叉照旧进决策箱,席内复核 ⛔ 不替代维护者裁定。
652652
- 外部评审链降为可选事后审计,非放行前提。
653653
- `needs:contract-review`(恒英文)由席位同笔挂:PR 一现即挂 PR;报告先到则先挂卡。
654-
- `Clause-②: yes` 认领同笔卡上挂标;开 PR `PM_SWEEP_REPO=仓 check-clause2-carriers --pair N` 0 才请审。
654+
- `Clause-②: yes` 认领同笔卡上挂标;开 PR 跑 `--pair N`:只确定性行红才挡请审,C5 只印读数。
655655
- 挂标后复核完成前短暂停靠;⛔ 不前瞻预挂。
656656
- 契约复核的适用面、载体纪律、资格与归属、降档保险丝见 `references/contract-review.md`。
657657
- 碰生成物的 PR 入队前先同步 + 整体重生成:四步序 `bash scripts/pm/os-regen-merge.sh`。

‎.claude/skills/pm-dispatch/references/contract-review.md‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,38 @@
1212
- 机械地板 claim 时可查树:新导出符号或已发布载荷上的新键恒 `yes`,锁达档契约复核。
1313
- conformance 类 ⛔ 不机械化:填充已声明字段、在两个已发布码之间重选输入类都需判断。
1414
- claim 拿不准 ⇒ 按 `yes` 挂标走达档契约复核;⛔ 不建全量分类学与 claim 时决策程序。
15-
- PR 与卡双载体同笔挂:PR 一存在即挂;报告先于 PR 到达则先挂卡侧,ACCEPT 时补齐 PR 侧。
16-
- 同笔在卡上记一行条款②认定;停靠只防误入队,⛔ 无等外部席位的无限期状态。
15+
- 同笔在卡上记一行条款②认定,PR 侧 ACCEPT 补齐;停靠只防误入队,⛔ 无无限期等外席态。
1716
- 前瞻的条款②事实住卡上裁决与分诊评论、`Clause-②` 申报和 `--tier` 输出。
1817
- 开着的载体恒 = 真实待审;载体不迁移:⛔ 不迁 PR review 或 Request Changes,⛔ 不为迁移留门。
1918
- FAIL 同 PASS 剥双载体:同笔留卡上交接评论(引复审、独立性对、欠改);卡态与 assignee 不动。
2019
- 重挂前先查裁决:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论;`get_reviews` 读空 ≠ 未复审。
2120
- PASS + 无标 + head 未动 = 已清标不是被剥;head 后移或无结论才重挂;清标缺引记录即半态。
2221

23-
## 复核归属与资格(按车道)
22+
## 复核归属与资格(按面)
2423

25-
- 归属派发席,交付后收集复核当轮完成;只 spec 与 skills 车道欠,新 spec 工作恒归 spec 席。
26-
- 按车道:spec 与 skills 席审契约增量;达档席内审,未达档 ⛔ 不自审,起达档子代理。
24+
- 欠不欠按面判 ⛔ 不按车道:diff 碰下列任一面即欠达档复核,交付后当轮完成。
25+
- 复核面 = 出货给用户或 agent 的五处:`content/docs/**`、`apps/docs/**`、CHANGELOG/`.changeset` 散文。
26+
- 加已发布 schema(`packages/spec/src/**` 非测试)与 governed 规则文本(统一定义见 SKILL.md)。
27+
- 五面皆不碰 ⇒ CI 加席位自读 ⛔ 不起第二个 agent;谁跑 = 派发席,达档者席内审。
2728
- 复核记录 = 一条评论落 PR 或卡,席内与子代理同形;散文、dev 自评、`os-dev-report` 恒不算。
2829
- 同形 = `## Contract review` 题头、所审 head sha 独占码段、①②③ 逐项、独立性对、PASS/FAIL。
2930
- 同形含首行 `Served-tier:`:值写常量名 `CONTRACT_REVIEW_TIER`;无此行不成裁决,模板见 `--template`。
3031
- ① derived judgments 逐项:diff 引出的接受集与公开面变化逐条点名判对错。
3132
- ② semver 定级与 changeset 声明一致;③ 边界旗:dev 挂旗与 `open_questions` 逐旗答复或升级。
33+
- 复核形状:只读 diff 与卡片,check 结论取 head 的 check-runs,⛔ 永不本地重跑派生门禁族。
3234
- 独立性件(契约真分叉、dev 挂旗)与保险丝只免席内审,不免复核:起隔离达档子代理。
3335
- 只喂卡片、既有裁决与 PR 本体,⛔ 不喂派发令与派发席自己的结论;简报写成对抗性。
3436
- 隔离复核子代理暂存全写按所审 PR 命名的 `<scratchpad>/pr-<n>/`,⛔ 不读非本轮自写的暂存。
35-
- 独立性对(机读):`Implemented-by:` 写产 diff 者身份;`mode:subagent` 记分支,`mode:remote` 记 session id。
36-
- `Reviewed-by:` 写渲染或采纳裁决的席位 session;隔离复核子代理无 session,记采纳它的席位。
37+
- 独立性对(机读):`Implemented-by:`/`Reviewed-by:` 取值见 `--template`;子代理记采纳它的席位。
3738
- 两者同 session ⇒ 报 SELF-REVIEW;只 `mode:remote` 可达,`mode:subagent` 席内审是设计;值紧跟冒号。
3839
- 清标即落地:PASS ⇒ 同席同笔剥双载体;清标同笔落 PR provenance 评论,引记录 id 与所判 head。
3940
- 轮次报告设复审清单专节,形状与代裁清单同为强制审计。
40-
- 落地前检三条:① 达档条款②复核 PASS 在案,即 PR 或卡上同形复核记录(spec、skills 每轮)。
41+
- 落地前检三条,过则 Tier S 入队、Tier H 等人批:① 达档条款②复核 PASS 在案(同形记录)。
4142
- ② 双载体已清,逐对机读 `PM_SWEEP_REPO=仓 node scripts/pm/check-clause2-carriers.mjs --pair N`。
42-
- 0 = 双肢一致、无放宽 tell、head 上有记录;4 = 任一不成立;3 = 环境答不了,⛔ 不作干净。
43-
- 放宽 tell 由 `scripts/pm/check-widening-tells.mjs` 判,`no` 撞新键/成员/导出/登记即拒,附 file:line。
43+
- 0 = 确定性行全清;4 = 任一不成立,只确定性行红才挡落地;3 = 环境答不了 ⛔ 不作干净。
44+
- 确定性行 = 记录在案、`Served-tier:`、双载体一致、认领形;C5 放宽 tell 只报告,归复核裁。
4445
- ③ PR check 全绿,⛔ 非 required 子集;例外:merge-base 同签名的红不计、按设计而红见 SKILL.md。
4546
- 签名 = 失败步 + 首错行,读 base check runs 的 API ⛔ 不凭口述;主干红止血立单不变。
46-
- Tier H(规则层)等维护者的字;受管路径全在 Tier S 面(`.claude/**`)者达档过本三条入队。
4747

4848
## 降档保险丝(机读)
4949

‎.claude/skills/pm-dispatch/references/core-rules.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999
- 代裁即换标签、贴四棱块与结论、打自动裁决标记、轮报设专节;发现契约要动则回箱。
100100
- 方向性授权覆盖整条执行链,需裁事项攒批呈报,运维细节 ⛔ 不弹给维护者。
101101
## 执行座位职责
102-
- 每轮巡检先读半状态巡查锚上点名本车道的行并逐行处置,未处置 ⛔ 不开新派发。
102+
- 半状态巡查按需跑,其 H 行是读数不是前提,⛔ 不因锚行停派发。
103103
- 候选整车道一次读全再本地求交,每张读全文与全部评论并把裁决逐字引入派发词。
104104
- 派发前做前提过时检查,动作面、卡引用面与工作项面三面都对树核验。
105105
- 同批独立性按文件面不相交判,⛔ 不按包;同区域硬串行,冲突交合并队列仲裁 ⛔ 不手排。
@@ -110,7 +110,7 @@
110110
- 认领原子对:一次标签写入完成认领与状态对调,随后留 `Claim:` 开头的评论并重读全线程。
111111
- 更早的他会话认领即让行并交出已诊断的一切;认领人不可达即接管,⛔ 不判死活。
112112
- dev 自死不等于维护者中止,需显式信号;接管一条评论四件齐,只救已 push 的分支。
113-
- 一单一次派发,档位逐卡显式传参;语义面卡恒契约复审档施工,契约复核只 spec、skills 欠。
113+
- 一单一次派发,档位逐卡显式传参;语义面卡恒契约复审档施工,契约复核按面欠不按车道。
114114
- 派发词 ⛔ 不整段粘贴 issue 正文,只带增量,并要求子代理自查正文完整性。
115115
- 派发词分三区:裁决不可重裁、机制假设须实测、建议路线可换,⛔ 不把假设写成裁决。
116116
- 标准非协商条款 ⛔ 不抄进派发词,清单、路径与行号在派发那一刻从树上取。
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# 仪器纪律
2+
3+
见 SKILL.md 〈平台读数纪律〉的指针行;本文是仪器的分界、授权与工具位次序。
4+
5+
- 硬门禁只答有确定答案的问题:受管登记表、队列守卫、CI 测试、复核记录在不在。
6+
- 判意图的仪器(放宽 tell、半状态巡查)只印读数 ⛔ 不挡落地,误报由席位一句话推翻。
7+
- 放宽 tell(C5)由 `scripts/pm/check-widening-tells.mjs` 印 file:line,归达档复核裁。
8+
- 只报告的仪器不配 dev:⛔ 不立卡、不派 dev、不开 PR;它的在途工作只有删除。
9+
- 新增门禁、巡查行或棘轮须在卡上引维护者原话,⛔ 无原话不新增;首行四件恒硬。
10+
- 工具位只有一个,先花在删除上;`dispatch-gates.mjs` 冻结,只在它喂的 workflow 坏了时碰。
11+
- 出处:维护者 2026-09-21 逐字「19491 接受你的建议,并立刻派发处理相关任务。」
12+
- 裁决记录:裁决 208,卡 19491,评论 5755284987(编号不带 # 前缀,id-lint 拒)。

‎AGENTS.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -276,11 +276,11 @@ localStorage / auth gotchas.
276276
ONE batch of at most five rows, and the click stays the maintainer's. **Tier S** (席内达档复核落地: all of
277277
`.claude/**`): those four lift once the PR thread or its card carries a `## Contract review` record for the PR's
278278
current head with `Served-tier: CONTRACT_REVIEW_TIER` and a PASS verdict, `check-clause2-carriers.mjs --pair N`
279-
reads 0 and every check is green — the owning seat then lands it through the queue; the post-merge audit is the
280-
compensating control. A PR whose only governed paths are register rows the queue leg regenerates byte-exact clears
281-
with zero approvals — an uncertified recompute, drift or a hand-authored sibling keeps it governed. ⛔ **No agent
282-
seat submits an approving review on a governed-surface PR, under any account** — an authorized account is
283-
agent-operated too; "CI is green" carries no information about a governance change.
279+
reads 0 on its definite rows (⛔ never C5) and every check is green — the owning seat then lands it through the
280+
queue; the post-merge audit is the compensating control. A PR whose only governed paths are register rows the queue
281+
leg regenerates byte-exact clears with zero approvals — an uncertified recompute, drift or a hand-authored sibling
282+
keeps it governed. ⛔ **No agent seat submits an approving review on a governed-surface PR, under any account** —
283+
an authorized account is agent-operated too; "CI is green" carries no information about a governance change.
284284

285285
**Already armed or queued when you read this?** Convert it back to **draft** AND disable auto-merge — draft is
286286
what removes queue membership, disabling alone drops only the arming — then confirm from the remote that it is in

0 commit comments

Comments
 (0)