Repository navigation
Commit 228357a
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
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
13 | 12 | | |
14 | 13 | | |
15 | | - | |
16 | | - | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| |||
80 | 81 | | |
81 | 82 | | |
82 | 83 | | |
83 | | - | |
84 | 84 | | |
85 | 85 | | |
86 | 86 | | |
| |||
0 commit comments