skills(pm-dispatch): a mid-task narrowing names its replacement owner and the moment - #17794
Merged
os-zhuang merged 1 commit intoSep 12, 2026
Merged
Conversation
… and moment A dispatch-word note that narrows a standing clause mid-task and names neither who takes the duty over nor when leaves the dev holding half a contract: the measured outcome was a live dual-carrier split that a seat had to repair by hand. The rule rides the in-flight interception bullet by density — the file is line-ratcheted at its ceiling, so no line is added and none is deleted. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MCLBsUgfykL74aU716rzVK
Contributor
Author
维护者速读(终稿)改了什么 — PM 派发技能的派发词细则 为什么改 — 实测事故:#16804 / PR #17725 上席位中途把「挂/清 风险与代价(含回滚) — 一句话、受管面;14 条派生门禁全绿、棘轮 241/241 绿、受管判定 GOVERNED 是预期。回滚 = revert 本 PR。 席位意见 — 席内按契约复审档复核通过,建议合并。 你要做的 — 受管面:请人工合并 PR #17794(本席不翻 ready、不入队、不挂 auto-merge)。 Generated by Claude Code |
os-zhuang
approved these changes
Sep 12, 2026
os-zhuang
marked this pull request as ready for review
September 12, 2026 06:04
os-zhuang
enabled auto-merge
September 12, 2026 06:04
os-zhuang
deleted the
claude/issue-17729-narrowing-names-replacement-owner
branch
September 12, 2026 06:28
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #17729
A mid-task note that narrows a standing clause and names neither who takes the narrowed duty over nor when it acts leaves the dev holding half a contract. The measured instance was a live dual-carrier split that the seat had to repair by hand. This lands the rule in the runbook section where the dispatch-word rules live.
The edit: one clause, riding an existing bullet by density
.claude/skills/pm-dispatch/references/dispatch-runbook.mdline 222, inside the in-flight-overlap interception group (lines 220-222).Before (23 bytes):
After (119 bytes, cap 120):
The appended clause is 96 bytes. The file is still 241 lines: no line added, no rule deleted, no re-wrap used as payment, ceiling untouched.
The four elements, mapped to the words
blocked) rather than executed half标准条款is the term the file and.claude/agents/os-dev.mdalready use for the standing clauses (see line 226 「条件性标准条款…」 and line 231 「信封断言本体是 os-dev 标准条款」), so the clause names the same object the contract does.Why this host
Lines 220-222 are the runbook's one rule group about a note sent to a dev mid-task: the seat intersects each round's newly landed PRs with the in-flight file surfaces and sends a four-sentence warning. Line 222 is that group's tail rule about how the dev must not contort to comply with such a note (do not manufacture a diff). The new clause is the same channel's other failure mode — the note that narrows instead of warning — and the dev-side posture it prescribes (refuse, report
blocked) is the same kind of rule as the one already there.It is also the only bullet in the section that can hold the clause at all. Free bytes re-measured on this branch against the 120-byte convention: line 222 has 97 free; the next largest are line 211 with 70, line 230 with 69, lines 214 and 228 with 63, line 201 with 61. The clause is 96 bytes, so no semantically closer host had room even in principle — the semantic choice and the byte budget point at the same line, and no trade-off had to be made.
Governed verdict
node scripts/pm/check-governed-merges.mjs --test .claude/skills/pm-dispatch/references/dispatch-runbook.md:: exit 3This PR stays draft. No seat flips it ready, enqueues it, or arms auto-merge; the maintainer hand-merges after the skills seat's review.
Gates
Derived with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(no paths passed: the script derives the change set itself from the merge base) and reconciled with--ranon the final diff at902f019c:All 14 exited 0. The ratchet's own verdict lines:
pnpm --filter @objectstack/lint run check:doc-formula-expressionsfirst exited 3 (PREREQUISITE NOT MET —@objectstack/formulaand@objectstack/lintunbuilt in a fresh worktree; nothing measured). Afterpnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint --concurrency=2underscripts/pm/os-verify-lock.sh(VERDICT command-exit 0), it re-ran :: exit 0.Control-character self-scan over the changed file (
grep -naPover the control ranges): no hits. Repo-widepnpm lintis CI's run; the narrowed reading here is total —pnpm exec eslint --no-inline-config --format jsonover the one changed file reportsFile ignored because no matching configuration was supplied, i.e. the eslint config matches zero of this PR's files, so this diff cannot move any untouched file's verdict.No changeset:
.claude/**is the skip-changeset fast track — nothing in any package'sfiles[]moves.Acceptance notes
node scripts/pm/dispatch-gates.mjs --commands .claude/skills/pm-dispatch/references/dispatch-runbook.md(with a path);.claude/agents/os-dev.mdsays to derive without paths so the script reads the real change set from the merge base. The os-dev clause wins per its own conflict rule, and the two agree here anyway (one path, committed). Carrier: the next runbook edit that touches the derivation sentence.维护者速读(草稿)
改了什么 —
dispatch-runbook.md〈派发词构造细则〉第 222 行末尾加一句:中途收窄标准条款的指令必须点名替换承接人与时点,缺一由 dev 报blocked,不半执行。文件仍是 241 行,不动 ceiling,不删任何规则。为什么改 — 实测事故:座位中途把「挂/清
needs:contract-review」收归自己,却没说另一半由谁、在何时做;dev 已挂了 PR 侧、停下来报了旗(正确行为),卡与 PR 的双载体半态一直活着,直到座位手工补挂。规则把这种半态从「靠 dev 临场判断」变成「派发侧必须写全,否则 dev 拒收」。风险与代价(含回滚) — 风险是 dev 对一条本来还能推进的收窄指令报
blocked,多一轮往返;代价上限是一轮。回滚成本为零:单行单句,git revert即回到原句。席位意见 — (留空,待 skills 座位定稿成评论)
你要做的 — 这是受管面(
.claude/**),按 #9495 规矩由你手工合并;先看上面「四要素对照表」确认这一句确实四件事都说到了,再看措辞是否合你对这份文件语气的要求(一 bullet 一规则、⛔/⇒ 记号、无卡号)。Generated by Claude Code