Skip to content

docs(pm-dispatch): a decision analysis recommends exactly one option - #24520

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-24444-one-recommendation
Oct 19, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/issue-24444-one-recommendation

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #24444

Clause-②: no

What

Two lines of .claude/skills/pm-dispatch/references/decision-analysis.md, nothing else (1 file, +2 / −2):

  • line 9 (the director's pre-batch increment): 「推荐/回退/口径」 → 「推荐/口径」, the card's wording verbatim.
  • line 26 (the recommendation item of the card-face template): 「推荐 + 回退 + 置信缺口:荐一项、给回退项、明说看不见什么;⛔ 不沿用他席推荐。」 → 「推荐 + 置信缺口:只荐一,余各一句不取理由;盲区明说,⛔ 不因此另荐;⛔ 不沿用他席推荐。」

The four facets, the 自检 line and the 裁后执行 paragraph are untouched; SKILL.md is untouched.

Why

The maintainer, 2026-10-19: 「你的决裁总是有一个回退合理吗?是完全不同的开发方向。最终结论应该只有一个吧?是 skills 的问题吗」, then 「同意」 on the card's change. Ruling of record: director ledger comment 6259199455 (on #12708).

Route A: compressed in place, line count unchanged

The card's line-26 text measures 150 bytes; the ratchet's MAX_LINE_BYTES is 120 (scripts/pm/check-skill-line-ratchet.mjs), and the file sits at 50 lines against its 50-line ceiling (headroom 0). So the ruled wording cannot land verbatim on one line. Route A (compress the wording, keep every clause, add no line) loses no clause, so route B (fold the verbatim text into two lines and raise the ceiling 50 → 51 under the ruling) was not taken and the CEILINGS row is unchanged.

Clause survival, ruled text → landed fragment:

Ruled clause (card text) Landed fragment Change
item name 推荐 + 置信缺口 推荐 + 置信缺口 verbatim
① 只荐一项 只荐一 measure word 项 dropped
② 其余选项各一句不取理由 余各一句不取理由 其余选项 → 余 (the remaining options, set against 一)
③ 看不见什么明说 盲区明说 看不见什么 → 盲区 (blind spots)
④ ⛔ 不因此给第二推荐 ⛔ 不因此另荐 给第二推荐 → 另荐 (recommend another); 因此 and ⛔ kept
⑤ ⛔ 不沿用他席推荐 ⛔ 不沿用他席推荐 verbatim, byte-identical to the old line's tail

Nothing is added: no new clause, no new term, each clause keeps its own separator and its own ⛔. A shared-⛔ variant that kept 只荐一项 whole (…盲区明说,⛔ 不因此另荐,不沿用他席推荐。, 119 B) was weighed and refused, because it lets 因此 read across clause ⑤.

Line budget

before after ceiling
file lines 50 50 50
line 9 bytes 119 112 120
line 26 bytes 110 120 120

Control: with the card's verbatim text placed at line 26, the gate's own scanLineLengths reports [{"line":26,"bytes":150}]; on the landed tree it reports [].

Premise checks on origin/main f4755a68a

  • The card's line numbers 13 and 30 are off: the two strings sit at lines 9 and 26.
  • git grep -n "回退" f4755a68a -- .claude/skills/pm-dispatch/ .claude/agents/ gives 15 hits. Only these two are decision-analysis uses; the rest (os-dev wording ×4, SKILL.md line 249's ?? fallback, dispatch-runbook.md, execution-duties.md, lanes/triage.md, platform-readings.md ×3, reading-discipline.md) are untouched.
  • No script, test or doc pins the old wording: git grep for 回退/口径, 给回退项 and 推荐 + 回退 finds only the two lines themselves.

Verification, all at head ddf97945b

The 17 families node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derives for this diff, each exit code captured before any pipe:

Command Exit
node scripts/check-closing-keyword-parity.mjs 0
node scripts/check-closing-keyword-parity.mjs --self-test 0
node scripts/check-comment-mask-corpus.mjs 0
node scripts/pm/check-harness-current.mjs --self-test 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions 0 (first run 3, PREREQUISITE NOT MET: @objectstack/formula and @objectstack/lint unbuilt in the fresh worktree; built under the verify lock, rerun 0)
pnpm check:agent-test-spelling 0
pnpm check:cross-package-test-inputs 0
pnpm check:doc-authoring 0
pnpm check:driver-memory-census 0
pnpm check:gitlink-declared 0
pnpm check:nul-bytes 0
pnpm check:pm-governed-merges 0
pnpm check:pm-skill-id-lint 0
pnpm check:pm-skill-ratchet 0, decision-analysis.md is 50 lines (ceiling 50; headroom 0), no line-length offender
pnpm check:refd-timer-probe 0
pnpm check:skill-frame-sync 0
pnpm check:watch-hint-literal 0

dispatch-gates --ran with the exit-coded record: 17 derived, 17 run, 0 NOT-MEASURED, 0 UNRUN (a derived zero). Also run: pnpm check:pm-settings-deny-roster exit 0 (its roster lives under .claude). node scripts/pm/check-governed-merges.mjs --branch answers GOVERNED, Tier S (exit 3, the governed code). Text-only change: no tests, no ablation. The type-check lanes, test:repo and pnpm lint belong to CI.

Acceptance notes

  • Tier S (.claude/** only). This PR stays a draft; ready and queue belong to the owning seat after an isolated contract-tier review.
  • No changeset: .claude/** publishes nothing; skip-changeset is declared with this PR's creation.

维护者速读(草稿)

  • 改了什么: 决策分析写法删掉「回退项」。总监批前增量从「推荐/回退/口径」改为「推荐/口径」;卡面推荐条改为「推荐 + 置信缺口」:只荐一个方案,其余方案各用一句话说明为何不取,看不见的地方明说,但不因此再给第二个推荐。只动这两行,文件仍是 50 行。
  • 为什么改: 您指出「最终结论应该只有一个」。旧模板要求每次附一个回退项,实际常是另一条完全不同的开发方向,等于把决定又推回给您。
  • 风险与代价(含回滚): 纯文本,不发布,不影响产品运行。第 26 行为了压进每行 120 字节的上限做了措辞压缩(「其余选项」→「余」、「看不见什么」→「盲区」、「给第二推荐」→「另荐」、「只荐一项」→「只荐一」),五个分句全部保留,但不是卡上原文逐字。回滚 = revert 本 PR 的一个提交。
  • 席位意见:
  • 你要做的: 无。本 PR 属 Tier S,由席位隔离复核通过后入队落地。

Generated by Claude Code

Retire the fallback option from the decision-analysis template: the
director's pre-batch increment lists recommendation and wording only,
and the recommendation item becomes "recommendation + confidence gap" -
one recommendation, one sentence per other option on why it is not
taken, blind spots stated without turning into a second
recommendation. Line count unchanged (50 against the 50 ceiling); the
rewritten line is compressed to the 120-byte line budget.

Claude-Session: https://claude.ai/code/session_01HEdP5tPhqQfzwRmKDxwn85
Co-authored-by: Claude <noreply@anthropic.com>
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

3 participants