Skip to content

Commit 228357a

Browse files
skills(pm-dispatch): a text-only DELIBERATE CORRECTION is confirmed by the dispatching seat's ACCEPT quoting before/after (#23257)
Fixes #23201 Clause-②: no This implements item 4 of the maintainer's ruling on #23177 (ruling record `6139629628`, the maintainer's word 「同意」). A DELIBERATE CORRECTION whose diff changes only release text or comments is confirmed by the dispatching seat's ACCEPT. That ACCEPT names every edited note and quotes each rewritten sentence before and after. The second same-head review is dropped for that class. Everything else, code changes included, keeps the full procedure. **Status: both ratchet payments landed — `pnpm check:pm-skill-ratchet` is green at 101/101 on `1f3be34d`.** The dispatching seat rewrote this paragraph, the line-budget section and the 速读 after the second payment (the dev writes the body once; later edits are the seat's). Authored by the dev dispatched from `session_013zGKMG1cRedVzWtqGGGZW9` (claim 6145186869). ## The change: `.claude/skills/pm-dispatch/references/landing-operations.md` Before (`afbf960c`, lines 15–16): ```text - DELIBERATE CORRECTION 红(`check-empty-changeset`):同 head 达档复核 PASS 记录即确认,⛔ 不等维护者。 - 记录须点名被改 note、逐句判改写句,缺一不算;算即按 SKILL.md 三条件带红入队,门禁不改。 ``` After (`92c8a276`, lines 14–17): ```text - DELIBERATE CORRECTION 红(`check-empty-changeset`)⛔ 不等维护者;确认件皆须点名每个被改 note: - diff 只改 release 文字或注释者:派发席 ACCEPT 确认,逐句引改前与改后,免第二次同 head 复核。 - 其余(含改代码)照全套:同 head 达档复核 PASS 记录即确认,记录逐句判改写句。 - 两类缺一不算;算即按 SKILL.md 三条件带红入队,门禁不改。 ``` How the text maps to the ruling: | Requirement | Where it sits now | |:--|:--| | No wait for the maintainer (kept) | line 14, `⛔ 不等维护者`, covers both classes | | The confirmation names every edited note (kept, and now required of both classes) | line 14 | | Text-only class: the dispatching seat's ACCEPT confirms and quotes each rewritten sentence before and after, with no second same-head review (new) | line 15 | | Code changes keep the full procedure: a same-head at-tier review PASS record that judges each rewritten sentence (kept) | line 16 | | An incomplete confirmation does not count (kept) | line 17 | | Enqueue red under SKILL.md's three red-by-design conditions; `check-empty-changeset` unchanged (kept) | line 17. No file outside `landing-operations.md` is touched. | Two readings I took: - **"A comment's wording" means 注释 (a comment in code or in the changeset).** A diff cannot carry a comment from a PR thread. - **The exemption is the narrow side.** The text class is named explicitly; every other diff, code changes included, falls to `其余(含改代码)照全套`. A diff the reader cannot place goes to the full procedure. ## Line budget: 101 → 101 lines (ceiling 101), GREEN The dispatch assumed a net-0 rewrite in place with no limit on line length. That assumption does not hold. The ratchet caps every re-wrappable line at 120 bytes (`MAX_LINE_BYTES` in `scripts/pm/check-skill-line-ratchet.mjs`). The old lines 15 and 16 were already 118 B and 119 B. - **The dispatch's suggested two-line wording does not fit.** It measures 210 B and 229 B. The ratchet's own `wrapLine` turns each into 2 lines, so 4 lines in total. I ran the gate's `scanLineLengths` once on those two lines to confirm; that was a one-off check and no file was kept. - **No 3-line form works.** The tightest packing I could build, already dropping words, needs 358 B of content against 354 B of capacity. That is before each bullet has to end at a sentence boundary. Every 3-line candidate either overflowed a line or left the shared enqueue-and-gate clause reading as if it applied to the code class only. - **So the ruled text takes 4 lines: +2.** All four are within the 120-byte cap (111 / 120 / 102 / 77 B), and the gate's line-length scan reports no offenders. **One line is paid.** The clause-② block's former line 12 is deleted: ```text - 交付后复核按面欠 ⛔ 不按车道(三面见 `references/contract-review.md`);双肢命中即 spec 车道。 ``` Its content is stated elsewhere: - "Owed by surface, not by lane" is `contract-review.md:7`. - "A clause-② hit is spec-lane work" is `execution-duties.md:101`. - This file still points to `contract-review.md` from section B (now line 56). That left net +1 at `92c8a276`. **The second payment, taken at `1f3be34d` on the maintainer's word 「23201 同意」 (card comment 6147542698):** the main-red ③ line (`main-red 约定③:main 全量电池红是所属车道首要工作;红未消,该车道 PR ⛔ 不挂队。`) is deleted. AGENTS.md Multi-agent discipline §7 states that rule in full (`AGENTS.md:533`: "Main-red: a full-battery red is its lane's first work … ⛔ no lane PR arms the queue meanwhile"), so no rule leaves the corpus. Net 0 against `afbf960c`; the ceiling is not raised. The first retry of this deletion was refused by the auto-mode permission classifier; it went through after the maintainer turned auto mode off. ## Not in this PR The `rest-channel.md` line carried over from #23193 (ruling item 5) is not addressed here. I read the state on `origin/main` `4f5679c2`: - `WORKFLOW_DISPATCH_ALLOWLIST` in `scripts/pm/fleet-write/ops.mjs` is still `['shard-timings-refresh.yml']`. - PR #23209 is open (draft). - `rest-channel.md` is at its own ceiling, 82/82. That line belongs to the skills seat, once PR #23209 lands and a line is paid for in that file. ## Verification Gate list: `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack`, derived at `92c8a276` against merge base `afbf960c`. It gave 17 commands. I also ran the six gates the dispatch named. Each exit code was captured before any pipe. The diff touches no package, so steps ① (dependency build) and ② (package tests) are empty. | Command | Exit | Verdict line (abridged) | |:--|:--|:--| | `node scripts/check-closing-keyword-parity.mjs` | 0 | OK (3 parsers agree on all 9 keywords …) | | `node scripts/check-closing-keyword-parity.mjs --self-test` | 0 | 40 assertions, 5 mutations each driven to red | | `node scripts/check-comment-mask-corpus.mjs` | 0 | 8968 files, 0 disagree, 0 unparseable | | `node scripts/pm/check-harness-current.mjs --self-test` | 0 | all 26 cases passed | | `pnpm --filter @objectstack/lint run check:doc-formula-expressions` | 3, then 0 | first run: PREREQUISITE NOT MET (lint not built). I built `@objectstack/formula` and `@objectstack/lint` under `os-verify-lock` (VERDICT command-exit 0), then reran: 22 record-scoped formula examples across 474 files judged clean | | `pnpm check:agent-test-spelling` | 0 | 0 violations | | `pnpm check:cross-package-test-inputs` | 0 | 30 packages read outside themselves, all declared | | `pnpm check:doc-authoring` | 0 | baseline held, no growth | | `pnpm check:driver-memory-census` | 0 | OK | | `pnpm check:gitlink-declared` | 0 | OK | | `pnpm check:nul-bytes` | 0 | 11237 text files, no raw ASCII control bytes | | `pnpm check:pm-governed-merges` | 0 | self-test 500 assertions; live run certified this tree | | `pnpm check:pm-skill-id-lint` | 0 | 87 files clean | | `pnpm check:pm-skill-ratchet` | **1** | `landing-operations.md is 102 lines; the ratchet ceiling is 101` (the named gap above; no other red) | | `pnpm check:refd-timer-probe` | 0 | OK | | `pnpm check:skill-frame-sync` | 0 | the one declared copy of the decision frame is coherent | | `pnpm check:watch-hint-literal` | 0 | 73 declarations, all literals | | `pnpm check:pm-governed-prose` | 0 | names all 7 registered governed surfaces | | `pnpm check:pm-settings-deny-roster` | 0 | 17 content-write tools declared = enforced | | `pnpm check:pm-label-desc-cap` | 0 | 39 label descriptions, all within 100 characters | | `pnpm check:skill-top-level-keys` | 0 | all 49 authorable top-level keys enumerated | | `pnpm check:overlay-whitelist-table` | 0 | 0 divergences on all three legs | | `pnpm check:published-readme-exports` | 3 | **NOT MEASURED:** PREREQUISITE NOT MET, 46 packages unbuilt. A whole-workspace build that a `.claude/**`-only diff cannot affect; CI builds them. | Reconciliation: `dispatch-gates --ran` reports "17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED". No changeset: `.claude/**` publishes nothing, so this PR carries `skip-changeset`. ## Acceptance notes - **What the exemption replaces.** It replaces only the DELIBERATE CORRECTION confirmation. Two other requirements keep applying on their own terms: - the clause-② gate in the same block (line 9: either limb hit means an at-tier clause-② review PASS before the queue). A comment-only edit under `packages/spec/src/**` still hits the path limb. - the Tier S landing record. The four lines do not restate either; there was no room. - **Consistent with existing text.** `contract-review.md:8-10` already sends `.changeset` prose to the dispatching seat's ACCEPT, checked sentence by sentence against the diff. The new text-only class matches it. - **Drift observed, not acted on.** `landing-operations.md:59` says a Tier S PR lands after "落地前检三条" (three pre-landing checks). `contract-review.md:29` defines "落地前检两条" (two). carrier: none (承接者:无). ## 维护者速读(草稿) **改了什么**:落地细则里管「DELIBERATE CORRECTION」(改别人待发布的发布说明)的两行,改写成四行:只改发布说明文字或注释、完全不碰代码的更正,由派发席在 ACCEPT 里点名每个被改的 note、逐句贴出改前与改后原文即算确认,不再额外跑一次同 head 的复核子代理;凡改了代码(或判不准是否纯文字)的更正,照旧走完整的达档复核。为腾行数,删掉了同一段里一条在别处已写明的重复规则。 **为什么改**:维护者在 #23177 裁决 B 第 4 条说「同意」。上一次 12 行的 changeset 措辞更正,ACCEPT 已经逐句核过,还要再花约 10 分钟、约 20 万 token 做第二次复核,纯属重复劳动。 **风险与代价(含回滚)**:风险在于把带代码的更正误当成纯文字类而少一次复核;文本按 PR 实际 diff 判类,只有明确属于「只改发布文字或注释」的才豁免,其余一律走全套,把豁免面压到最窄。代价:规则需要四行,本文件行数上限 101,靠删掉两条在别处已写全的重复规则付清(一条在 contract-review.md 与 execution-duties.md,一条在 AGENTS.md §7),上限不动。回滚 = revert 本 PR 的两个提交。 **席位意见**:同意落地。四行逐句对照裁决第 4 条无缺项,豁免面取窄侧;两条删除均为别处已写全的重述;契约复核 PASS 记录在本 PR(head `1f3be34d`)。 **你要做的**:无。路径全在 `.claude/**`,Tier S:席位在达档复核 PASS 后经中继入队落地;事后审计见 `scripts/pm/check-governed-merges.mjs`。 --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 3c1a046 commit 228357a

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@
99
- `--tier` 嫌疑行是提示非裁定;双肢命中任一 ⇒ 无达档条款②复核 PASS 在案 ⛔ 禁止入队。
1010
- 路径肢 = diff 触及契约面 `packages/spec/src/**` 非测试,含 error-code-ledger、`*.zod.ts` 契约 schema。
1111
- 声明肢 = 认领评论声明 `Clause-②: yes`,与路径无关;错误的 `no` 是可审计的假申报。
12-
- 交付后复核按面欠 ⛔ 不按车道(三面见 `references/contract-review.md`);双肢命中即 spec 车道。
1312
- 子代理起不来 ⇒ 复核缺席,PR 带 `needs:contract-review` 留 draft 队列外;旁路仅维护者逐次亲审
1413
- PASS ⇒ ready、auto-merge;FAIL ⇒ 补丁轮;⛔ 免复核不放行。
15-
- DELIBERATE CORRECTION 红(`check-empty-changeset`):同 head 达档复核 PASS 记录即确认,⛔ 不等维护者。
16-
- 记录须点名被改 note、逐句判改写句,缺一不算;算即按 SKILL.md 三条件带红入队,门禁不改。
14+
- DELIBERATE CORRECTION 红(`check-empty-changeset`)⛔ 不等维护者;确认件皆须点名每个被改 note:
15+
- diff 只改 release 文字或注释者:派发席 ACCEPT 确认,逐句引改前与改后,免第二次同 head 复核。
16+
- 其余(含改代码)照全套:同 head 达档复核 PASS 记录即确认,记录逐句判改写句。
17+
- 两类缺一不算;算即按 SKILL.md 三条件带红入队,门禁不改。
1718
- 真正设计分叉照旧进决策箱,席内复核 ⛔ 不替代维护者裁定。
1819
- 外部评审链降为可选事后审计,非放行前提。
1920
- 默认分支 push 即触发对外部署的仓,只在验证层存在时才合并;无验证层 ⛔ 不合并。
@@ -80,7 +81,6 @@
8081
- main-red 约定①:p0 fix-forward 允许跳队,限 p0、机械、根因已核实的止血 PR。
8182
- 也可按既有 governed 例外由维护者人工直合一行修复;仅限 main-red 修复。
8283
- main-red 约定②:一个失败 check 只锚一张卡,先立者赢,后见者评论到锚卡,⛔ 不另立。
83-
- main-red 约定③:main 全量电池红是所属车道首要工作;红未消,该车道 PR ⛔ 不挂队。
8484

8585
## C. 依赖前棒才能转绿的 PR:draft 停放 + 签名级预期红清单
8686

0 commit comments

Comments
 (0)