Skip to content

Commit b46dec3

Browse files
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/execution-duties.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@
172172
- 逐项判据展开在 `references/review-checklist.md`,每份报告对着它过。
173173
- PR 形态与范围:draft、目标 `main`、`Fixes`/`Part of` 首行判据,翻 ready 前亲核。
174174
- `Part of` 卡 MERGED 时点收口;changed files 范围与 changeset/`skip-changeset` 分流;测试证据。
175-
- 改到已有 `.changeset/*.md` 的 PR ⛔ 不打 `skip-changeset`;确认取维护者原话或出处三件转述。
175+
- 改到已有 `.changeset/*.md` 的 PR ⛔ 不打 `skip-changeset`;确认取同 head 达档 PASS 或维护者原话。
176176
- 报告在草稿 PR 时点到达,CI 收敛读数只属于复核侧:gate `in_progress` 是诚实读数。
177177
- 绿色输出≠ 该绿证明了被测风险:拒收断言、全绿方向与时序、pin 翻转、边界后收益。
178178
- 触 `skills/**` 的 PR 加问整包价值密度:从整包加载的客户 agent 座位读,⛔ 不从作者座位读。

‎.claude/skills/pm-dispatch/references/landing-operations.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@
1212
- 交付后复核按面欠 ⛔ 不按车道(五面见 `references/contract-review.md`);双肢命中即 spec 车道。
1313
- 子代理起不来 ⇒ 复核缺席,PR 留 draft 队列外等档;唯一旁路是维护者亲审,逐次为准。
1414
- PASS ⇒ ready、auto-merge;FAIL ⇒ 补丁轮;⛔ 免复核不放行。
15+
- DELIBERATE CORRECTION 红(`check-empty-changeset`):同 head 达档复核 PASS 记录即确认,⛔ 不等维护者。
16+
- 记录须点名被改 note、逐句判改写句,缺一不算;算即按 SKILL.md 三条件带红入队,门禁不改。
1517
- 真正设计分叉照旧进决策箱,席内复核 ⛔ 不替代维护者裁定。
1618
- 外部评审链降为可选事后审计,非放行前提。
1719
- 契约复核的适用面、资格与归属见 `references/contract-review.md`。
18-
- 碰生成物的 PR 入队前先同步 + 整体重生成:四步序 `bash scripts/pm/os-regen-merge.sh`。
1920
- 默认分支 push 即触发对外部署的仓,只在验证层存在时才合并;无验证层 ⛔ 不合并。
2021
- 验证层 = 部署以 CI 为闸、发布后探测线上面、失败自动回滚并立卡。
2122
- 该类仓的落地判据是已发布且探测通过,⛔ 不是 MERGED;跟到发布为止。
@@ -28,10 +29,9 @@
2829
- 疑似新 flaky 只留提请,⛔ 不自行加表;纯计数不追记,只有改变修法作用域时才记。
2930
- 四分支:已知 flaky ⇒ 原样重投;已修签名再现 ⇒ ⛔ 不重投,判新问题重新诊断。
3031
- 基上缺已合修复 ⇒ merge main 推新提交,重跑无效。
31-
- 新签名 ⇒ ⛔ 不重投,在 PR 与其 `Fixes` 卡各留完整签名与初判。
32-
- 每次处置留审计评论,重投写签名与台账依据。
33-
- 依赖前棒才能转绿的 PR:draft 停放 + 签名级预期红清单 + 解除条件,见 landing-operations C。
34-
- 多个已实现 PR 全碰生成物 ⇒ 串行接力一次只放行一个,每棒一整圈,见 landing-operations D。
32+
- 新签名 ⇒ ⛔ 不重投,PR 与其 `Fixes` 卡各留完整签名与初判;下条三事实全立可重投一次。
33+
- 三事实:失败文件 import 闭包与 diff 不相交、队列基座同 shard 绿、首错是超时非断言。
34+
- 每次处置留审计评论,重投写签名与台账依据或三行回执;同签名再弹即停,交下一席重诊。
3535

3636
## A. 碰生成物的 PR:入队前先同步 + 整体重生成
3737

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515

1616
## 范围与 changeset
1717

18-
- 取 changed files 核范围,⛔ 不看报告自述。
1918
- 三条判据:无 `content/docs/releases/` 改动、用户可见改动有 changeset、无与卡无关的文件。
2019
- Tests/docs-only 按仓库分流:本仓库走 `skip-changeset` 标签,⛔ 不走空 changeset。
2120
- 空 changeset 在本仓库滞留发布;含读者可见生成产物时 dev 改选 changeset 亦对。
21+
- dev 挂 `skip-changeset` 遭分类器拒 ⇒ 席位自核 tests/docs-only 即自挂,评论写依据是席位复核。
22+
- 此标是席位结论,⛔ 非替 dev 转发,自核不成立不挂;dev 报告 `deviations` 须逐字载被拒命令。
2223
- objectui 无此标签,空 frontmatter changeset 即正确形态;⛔ 永不要求或铸出该标签。
2324
- 就地修范围外的邻接缺陷 ⇒ 四条件逐条核:同缺陷类、机械、无他人认领、同门禁族。
2425
- 再核 claim 文件面同轮已修订、PR 正文点名该修并载证据;缺一条即判 REWORK。
@@ -38,7 +39,6 @@
3839
- 判据是同块点名声明该符号的模块那份移动了的产物,或具名探针;缺则记 INCONCLUSIVE。
3940
- 报告证据里有 git 本可回答的 API 读吗:`list_issues`/`search_issues` 一类,或重跑去重读数。
4041
- ⛔ 不因此判 REWORK,ACCEPT 照给,但把这条记进 ACCEPT 评论。
41-
- CI 收敛读数只属于复核侧:dev 的契约是草稿 PR 时点交报,gate `in_progress` 是诚实读数。
4242
- 翻 ready、挂 auto-merge 或入队前,亲核 Lint & Repo Gates 与 TypeScript Type Check 两个 job。
4343
- 两个 job 的 `conclusion` 都须为 `success`,门禁族跑在其内;⛔ 不因报告写了本地绿跳过。
4444
- 两 job 只是 required 地板,入队另要求全 check 绿(第三种情形见 SKILL.md);跑法见 `true-green.md`。

0 commit comments

Comments
 (0)