Repository navigation
Commit b46dec3
pm-dispatch: three landings the seat decides on its own record (ruling 1A, 2A, 3A) (#19970)
Fixes #19940
Clause-②: no
Implements the maintainer's ruling on this card (comment 5814546887,
director seat batch #220 item 3, letters 1A · 2A · 3A, 「批 #220 同意」) as
three seat rules in the two files the ruling names, each paid for under
the line ratchet. Nothing else moves:
`scripts/check-empty-changeset.mjs` (logic and wording; ruling D on
#17712 stands), `.github/workflows/merge-queue-triage.yml`,
`.claude/settings.json`, `.claude/agents/os-dev.md` and
`references/contract-review.md` are untouched, and the signature-ledger
rule 「判据唯一来源是签名台账(锚点 issue),优先于现场判断;只有人工能升级台账。」 is byte-identical.
## What changed
### 1A: `references/landing-operations.md` :15-:16 (入队与落地, directly
after the PASS line)
```text
- DELIBERATE CORRECTION 红(`check-empty-changeset`):同 head 达档复核 PASS 记录即确认,⛔ 不等维护者。
- 记录须点名被改 note、逐句判改写句,缺一不算;算即按 SKILL.md 三条件带红入队,门禁不改。
```
Premise re-checked on `origin/main` `2c1011b0`: the gate's DELIBERATE
CORRECTION text (`scripts/check-empty-changeset.mjs` :605-:612) says it
stays red by design (condition 1 of SKILL.md :208-:209); it runs in
`pr-automation.yml`, whose only trigger is `pull_request` (no
`merge_group`, condition 2); condition 3 (a PR comment naming the gate
and cause) stays the seat's act. A PR that rewrites a pending
`.changeset` note already owes the at-tier review (`contract-review.md`
:8 lists `.changeset` prose among the five review surfaces), so the
record 1A names always exists on such a PR.
### 2A: `references/landing-operations.md` :32-:34 (the new-signature
branch; old :31-:32 rewritten in place, one line added)
```text
- 新签名 ⇒ ⛔ 不重投,PR 与其 `Fixes` 卡各留完整签名与初判;下条三事实全立可重投一次。
- 三事实:失败文件 import 闭包与 diff 不相交、队列基座同 shard 绿、首错是超时非断言。
- 每次处置留审计评论,重投写签名与台账依据或三行回执;同签名再弹即停,交下一席重诊。
```
The two duties of the old lines survive verbatim in meaning: the full
signature and first diagnosis on the PR and its `Fixes` card, and an
audit comment per disposition. The default stays ⛔ no re-queue; the one
exception is the ruled, receipted, once-only re-queue, and a second
ejection on the same signature stops and goes to the next seat. The
ledger lines (:28-:29) are unchanged, so the re-queue never promotes a
signature to known-flaky.
### 3A: `references/review-checklist.md` :21-:22 (范围与 changeset, after
the `skip-changeset` routing lines)
```text
- dev 挂 `skip-changeset` 遭分类器拒 ⇒ 席位自核 tests/docs-only 即自挂,评论写依据是席位复核。
- 此标是席位结论,⛔ 非替 dev 转发,自核不成立不挂;dev 报告 `deviations` 须逐字载被拒命令。
```
No allow rule is added: `.claude/settings.json` :68 and :70 already
allow `label-write.mjs *` in both spellings.
## Line-ratchet ledger
Both files stay at their ceilings: `landing-operations.md` 101/101 and
`review-checklist.md` 77/77 (`pnpm check:pm-skill-ratchet`, exit 0).
Every added line is at most 120 bytes (widest 119). The payment is five
deleted duplicate statements, never a re-wrap. Each deleted rule still
has a home:
| deleted line (base `2c1011b0`) | where the rule still lives at this
head |
|---|---|
| `landing-operations.md` :18, the regen-before-enqueue index line
(`bash scripts/pm/os-regen-merge.sh`) | same file, section A heading :36
and :40 |
| `landing-operations.md` :33, the depend-on-a-predecessor index line (见
landing-operations C) | same file, section C heading :85 and :87-:88 |
| `landing-operations.md` :34, the serial-relay index line (见
landing-operations D) | same file, section D heading :92 and :94 |
| `review-checklist.md` :18 (取 changed files 核范围,⛔ 不看报告自述) |
`execution-duties.md` :171 (对 GitHub 核验,⛔ 不对报告的自述核验) and :174 (changed
files 范围) |
| `review-checklist.md` :41 (CI 收敛读数只属于复核侧 …) | `execution-duties.md`
:176, the same three facts |
Sizing against the ruling's "one line each": each letter is one rule. At
the 120-byte cap, 1A and 3A each take two physical lines, and 2A takes
one new line plus in-place rewrites of the two lines it amends. That is
+7/-7 in total, and both file counts are unchanged.
## Verification (head `f6c65a66`)
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` (no paths; change set from the merge base
`2c1011b01`) derived 18 commands, the same list the dispatch carried.
All 18 exit 0. `--ran` reconciliation: 18 derived, 18 run, 0
NOT-MEASURED, a derived zero with every exit code recorded.
- `pnpm check:pm-skill-ratchet` 0 (101/101, 77/77) · `pnpm
check:pm-skill-id-lint` 0 (34 files clean) · `pnpm
check:skill-frame-sync` 0 · `pnpm check:doc-authoring` 0 · `pnpm
check:nul-bytes` 0 · `pnpm check:required-contexts` 0 (the checklist
still names `Lint & Repo Gates` and `TypeScript Type Check`) · `pnpm
check:pm-governed-merges` 0.
- `pnpm --filter @objectstack/lint run check:doc-formula-expressions`
first exited 3 (PREREQUISITE NOT MET: `@objectstack/formula` and
`@objectstack/lint` unbuilt; nothing measured). After `turbo run build
--filter=@objectstack/formula --filter=@objectstack/lint` under
`os-verify-lock.sh` (VERDICT command-exit 0), it exited 0.
- Outside the derivation, also run: `node
scripts/check-skills-token-ratchet.mjs` 0 (named by the dispatch) and
`pnpm check:pm-settings-deny-roster` 0 (its roster sits under
`.claude`).
- `node scripts/pm/check-governed-merges.mjs --branch HEAD`: governed,
`.claude/**` x2 only ⇒ Tier S; 14 changed lines.
- No reverse verification or ablation. This diff has no code, type or
gate change for one to exercise.
## Landing
Tier S (every governed path is under `.claude/**`). This PR stays draft
until an at-tier in-seat `## Contract review` PASS record exists on its
current head, as the ruling requires. It publishes nothing (`.claude/**`
is outside every package's `files[]`) ⇒ `skip-changeset`.
## Acceptance notes
- `execution-duties.md` :175 still reads 「改到已有 `.changeset/*.md` 的 PR ⛔
不打 `skip-changeset`;确认取维护者原话或出处三件转述。」. After 1A that sentence is
incomplete for the DELIBERATE CORRECTION class: the same-head at-tier
PASS record is now the confirmation. A reviewer reading only the review
duties could still wait for the maintainer. The file is outside this
card's claimed surface (the claim says stop on breach) and outside the
ruling's named deliverable, so it is not edited here. A same-count,
in-place candidate (119 bytes) for the seat: 「改到已有 `.changeset/*.md` 的
PR ⛔ 不打 `skip-changeset`;确认取同 head 达档 PASS 或维护者原话。」
- `os-dev.md` :306-:307 still say 「席位代挂」/「席位代做」 for a refused label
write. 3A frames the seat's label as its own review conclusion, not a
relay of the dev's write. The two readings agree on the act (the seat
applies the label). The dispatch put `os-dev.md` out of bounds, so it is
noted here and not edited.
## 维护者速读(草稿)
**改了什么**:给席位的落地规则加了三条,都在两份 `.claude` 参考文件里,两份文件的行数都没有增加。① 待发布更新说明被同一个 PR
改对、门禁按设计亮红时,同一版本上的达档复核 PASS 记录就算「确认」,席位按已有的「按设计而红」三条件带红入队,不再等您点头。②
合并队列第一次因一个新的抖动签名弹出时,如果三个事实都成立(失败文件与改动无关、队列基座同一分片是绿的、首个错误是超时不是断言),可以带三行回执重投一次;同一签名第二次弹出就停,交下一席重新诊断。③
开发代理挂 `skip-changeset`
标签被权限分类器拒绝时,席位按自己的复核(确认只改了测试或文档)自己挂标签,评论写明依据是席位复核;开发代理的报告必须逐字记下被拒的命令。
**为什么改**:上一轮有三个已经准备好的 PR 在等您一句「好」,分别空等了约 7 小时和 13 小时,其中一次还压住了一张 p1。您 9 月
24 日批准了 1A、2A、3A 三个方案(「批 #220 同意」)。
**风险与代价(含回滚)**:① 改写后的更新说明句子,最后一道眼睛从您换成达档复核。复核必须点名那条说明并逐句判断,记录可以审计。②
真回归最多多跑一次队列,第二次弹出会被响亮停住,不会反复重投。③
挂错标签就是席位复核错,评论里写了依据,可以审计。门禁、工作流、权限配置都没有改。回滚:撤回本 PR 即可恢复原规则,没有数据或配置残留。
**席位意见**:
**你要做的**:无需动作。本 PR 属 Tier S,席内达档复核 PASS 后由席位入队落地。如果某一条不同意,回一句即可撤掉那一条。
---
_Generated by [Claude
Code](https://claude.ai/code/session_01A22sUB3mUWs6M36VgfijBq)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 2c1011b commit b46dec3
3 files changed
Lines changed: 8 additions & 8 deletions
File tree
- .claude/skills/pm-dispatch/references
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
172 | 172 | | |
173 | 173 | | |
174 | 174 | | |
175 | | - | |
| 175 | + | |
176 | 176 | | |
177 | 177 | | |
178 | 178 | | |
| |||
Lines changed: 5 additions & 5 deletions
| 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 | | - | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
| |||
28 | 29 | | |
29 | 30 | | |
30 | 31 | | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
18 | | - | |
19 | 18 | | |
20 | 19 | | |
21 | 20 | | |
| 21 | + | |
| 22 | + | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| |||
38 | 39 | | |
39 | 40 | | |
40 | 41 | | |
41 | | - | |
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| |||
0 commit comments