Repository navigation
docs(pm-dispatch): a decision analysis recommends exactly one option - #24520
Conversation
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>
维护者速读(终稿,事后记录)· PR #24520 ·
|
Contract review — PR #24520 (card #24444), after-the-fact audit record rendered 2026-10-19T23:27ZServed-tier: Read: the card body and its three comments (claim, os-dev-report, landing), the director's ledger comment 6259199455 on #12708, the PR body, its one-file list, the diff against main at the head (base f4755a6), the 40 check-runs on the head, and the governed file at base and head via git show. Not read: the dispatch order, the seat's own conclusions, the PR's reviews. The PR has since merged as merge commit 5876b54; this record is the audit of that landing, asked for by the maintainer (「两张 PR 你可以重新复审」). ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
Fixes #24444
Clause-②: no
What
Two lines of
.claude/skills/pm-dispatch/references/decision-analysis.md, nothing else (1 file, +2 / −2):The four facets, the 自检 line and the 裁后执行 paragraph are untouched;
SKILL.mdis 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_BYTESis 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 theCEILINGSrow is unchanged.Clause survival, ruled text → landed fragment:
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
Control: with the card's verbatim text placed at line 26, the gate's own
scanLineLengthsreports[{"line":26,"bytes":150}]; on the landed tree it reports[].Premise checks on
origin/mainf4755a68agit 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.mdline 249's??fallback,dispatch-runbook.md,execution-duties.md,lanes/triage.md,platform-readings.md×3,reading-discipline.md) are untouched.git grepfor 回退/口径, 给回退项 and 推荐 + 回退 finds only the two lines themselves.Verification, all at head
ddf97945bThe 17 families
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderives for this diff, each exit code captured before any pipe:node scripts/check-closing-keyword-parity.mjsnode scripts/check-closing-keyword-parity.mjs --self-testnode scripts/check-comment-mask-corpus.mjsnode scripts/pm/check-harness-current.mjs --self-testpnpm --filter @objectstack/lint run check:doc-formula-expressions@objectstack/formulaand@objectstack/lintunbuilt in the fresh worktree; built under the verify lock, rerun 0)pnpm check:agent-test-spellingpnpm check:cross-package-test-inputspnpm check:doc-authoringpnpm check:driver-memory-censuspnpm check:gitlink-declaredpnpm check:nul-bytespnpm check:pm-governed-mergespnpm check:pm-skill-id-lintpnpm check:pm-skill-ratchetdecision-analysis.md is 50 lines (ceiling 50; headroom 0), no line-length offenderpnpm check:refd-timer-probepnpm check:skill-frame-syncpnpm check:watch-hint-literaldispatch-gates --ranwith the exit-coded record:17 derived, 17 run, 0 NOT-MEASURED, 0 UNRUN(a derived zero). Also run:pnpm check:pm-settings-deny-rosterexit 0 (its roster lives under.claude).node scripts/pm/check-governed-merges.mjs --branchanswers GOVERNED, Tier S (exit 3, the governed code). Text-only change: no tests, no ablation. The type-check lanes,test:repoandpnpm lintbelong to CI.Acceptance notes
.claude/**only). This PR stays a draft; ready and queue belong to the owning seat after an isolated contract-tier review..claude/**publishes nothing;skip-changesetis declared with this PR's creation.维护者速读(草稿)
Generated by Claude Code