Skip to content

skills(pm-dispatch): a text-only DELIBERATE CORRECTION is confirmed by the dispatching seat's ACCEPT quoting before/after - #23257

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-23201-deliberate-correction-text-only
Oct 14, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-23201-deliberate-correction-text-only

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

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):

- DELIBERATE CORRECTION 红(`check-empty-changeset`):同 head 达档复核 PASS 记录即确认,⛔ 不等维护者。
- 记录须点名被改 note、逐句判改写句,缺一不算;算即按 SKILL.md 三条件带红入队,门禁不改。

After (92c8a276, lines 14–17):

- 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:

- 交付后复核按面欠 ⛔ 不按车道(三面见 `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:

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。

…y the dispatching seat's ACCEPT

landing-operations.md's two DELIBERATE CORRECTION lines become four, split by
the PR's diff:

- release-text-or-comment-only diffs: the dispatching seat's ACCEPT is the
  confirmation; it names every edited note and quotes each rewritten sentence
  before and after; no second same-head review is owed;
- everything else (code changes included) keeps the full procedure: a
  same-head at-tier review PASS record naming the notes and judging each
  rewritten sentence.

Unchanged: no wait for the maintainer, the SKILL.md three-condition
red-by-design enqueue, and check-empty-changeset itself.

The ruled content does not fit two lines under the ratchet's 120-byte line
cap (the old lines stood at 118 B and 119 B). One line is paid by deleting the
clause-2 block's restatement of the per-surface review rule, whose content
lives in contract-review.md (per-surface, not per-lane) and
execution-duties.md (a clause-2 hit is spec-lane work). The file is 102 lines
against a ceiling of 101; the residual line is left open on purpose.

Claude-Session: https://claude.ai/code/session_013zGKMG1cRedVzWtqGGGZW9
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Seat status on head 92c8a276, written 2026-10-13T12:48Z — skills seat 1, session_013zGKMG1cRedVzWtqGGGZW9 (huangyiirene).

  • CI: every check green except Lint & Repo Gates, whose Lane verdict annotation names exactly one red gate: PM skill line ratchet (landing-operations.md is 102 lines against a ceiling of 101). No review threads.
  • Seat review: the four new lines carry every element of ruling 6139629628 item 4 within the 120-byte line cap; payment 1 (the former line 12) is a true restatement of contract-review.md:7 and execution-duties.md:101. The full reading and the seat's decision are on the card, skills(pm-dispatch): a text-only DELIBERATE CORRECTION is confirmed by the seat's ACCEPT quoting before/after; the second same-head subagent review is dropped for that class (#23177 ruling B, item 4) #23201 comment 6145832387.
  • Blocker: the residual +1 line. The seat's decision is A — delete the main-red ③ line, which AGENTS.md Multi-agent discipline §7 states in full. The dev's Edit for that deletion was refused by this session's permission classifier and is not retried by the seat; the card is pm:awaiting-maintainer with a Maintainer-action: line (A: the maintainer's word, then one retry or the maintainer's hand on this branch; or B: a ruled raise 101 → 102, quoted in this body).
  • Then: the ## Contract review record on the final head, ACCEPT on the card, and the Tier S relay landing (pr_ready, then automerge_enable). ⛔ Not ready and not armed before that.

Generated by Claude Code

…e with the main-red third-convention restatement

landing-operations.md's main-red convention three ("a full-battery red on main
is its lane's first work; while it stands, that lane's PRs do not queue") is
stated in full in AGENTS.md's multi-agent discipline section 7 ("Main-red: a
full-battery red is its lane's first work ... no lane PR arms the queue
meanwhile"), which binds every seat. Deleting the restatement pays the one line
the ruled four-line DELIBERATE CORRECTION text still owed; the file returns to
101 lines against its ceiling of 101. The deletion is the maintainer's
authorized second payment.

Claude-Session: https://claude.ai/code/session_013zGKMG1cRedVzWtqGGGZW9
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 1f3be34d13c8b6ffae8777e1d930bb5f3628b4b0
Local-runs: none

Reviewed in seat by the dispatching skills seat (served tier read from get_session last_served_model, equal to the constant's value), on the diff afbf960c…1f3be34d (one file, +4/−4), card #23201, ruling 6139629628 item 4 and the head's check-runs. Written 2026-10-14T00:20Z.

① Derived judgments

  • Governed rule text, .claude/skills/pm-dispatch/references/landing-operations.md: the two DELIBERATE CORRECTION lines become four, judged line by line against ruling item 4. L14 keeps 「⛔ 不等维护者」 and makes 「点名每个被改 note」 a requirement of every confirmation — correct: it was the record's requirement before, and the ruling asks the same of the ACCEPT. L15 defines the text-only class (release text or comments, no code) and its confirmation — the dispatching seat's ACCEPT quoting each rewritten sentence before and after, with no second same-head review — the ruling's item 4 in substance. L16 keeps the full procedure for everything else, code changes included — the ruling's "Code changes keep the full procedure". L17 keeps 「缺一不算」 and the three-condition red-by-design enqueue with the gate unchanged — the card's unchanged items. The exemption is the narrow side (a diff the reader cannot place falls to L16): the correct direction.
  • The two deletions are restatement payments under the lane's ratchet rule. Former L12 (owed by surface; a clause-② hit is spec-lane work) lives at contract-review.md:7 and execution-duties.md:101. The main-red ③ line lives at AGENTS.md:533 ("Main-red: a full-battery red is its lane's first work … ⛔ no lane PR arms the queue meanwhile"), which binds every seat and outranks references/**. No rule leaves the corpus; the second deletion carries the maintainer's word 「23201 同意」 (6147542698).
  • No published accept set, no public surface, no spec path: Clause-②: no is correct. The file sits at its ceiling 101/101 with line widths 111/120/102/77 B inside the 120-byte cap; Lint & Repo Gates (the ratchet, id-lint and governed-prose gates) is success on this head.

② Semver level

None owed: .claude/** ships in no package; skip-changeset on the PR is correct.

③ Boundary flags

  • Dev flag — the branch was not merged with origin/main (48 commits behind at the second round): the queue rebuilds the PR on current main, and mergeable_state reads clean. Accepted.
  • Dev reading — "a comment's wording" read as 注释 (a code or changeset comment): accepted as the narrow reading; a PR-thread comment is not a diff.
  • Drift the dev noted and did not act on — landing-operations.md:59 says 「落地前检三条」 while contract-review.md:29 defines two: recorded on the card as an Acceptance note for the lane's next edit of either file; not this PR's.

Implemented-by: claude/issue-23201-deliberate-correction-text-only
Reviewed-by: session_013zGKMG1cRedVzWtqGGGZW9

VERDICT: PASS


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants