docs(pm-dispatch): a triage direction landing in an adjudicated area quotes the governing line - #18256
Conversation
…quotes the governing line One rule line in 〈分诊座位职责〉: a grading whose direction lands in an ADR, a ruled card or a not-re-adjudicable rule pastes the `Prior rulings read:` line that `check-prior-rulings.mjs` prints, or names no target. Paid inside the region by folding the two tool-loading lines (:311/:312) into one 116 B line; count stays 812. Claude-Session: https://claude.ai/code/session_01HZfg2AwVX191qCizp88gQr Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: Reviewing seat: ① Derived judgments
② Semver levelNot applicable — nothing published moves; ③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
维护者速读(终稿)改了什么: 为什么改:两次分诊(#16867、#17425)方向对、落点错——落点正是治理文本明文拒收的拼法或形状,直到执行席重读 ADR 才发现,其中一次派发令都已写出。原因不是前提过时,而是没有任何一行要求定级引用它所针对的裁决行。工具与粘贴行早就存在(决策卡已被要求贴它),这一行把同一义务绑到定级的方向上。 风险与代价(含回滚):纯规则文本,不碰发布包、不改 CI、行数不变;分诊仍可写方向(「写方向」是章程),只是多贴一行证据。回滚 = revert 一个 PR。一处纠正:原定级把「写方向」出处写成 席位意见:建议批准。本席在 head 上亲核:两处改动都在认领区域 :306–:415 内、其他两个在飞 PR 的区域字节不变;新行 120 字节、付费行 116 字节且语义无损;棘轮 812/812、frame 块 md5 不变、id-lint / frame-sync / governed-prose 绿; 你要做的(一个动作):approve 本 PR。approve 后本席翻 ready + 入队。 Generated by Claude Code |
|
Ruling-C landing provenance — skills seat, session Generated by Claude Code |
Fixes #17497
One rule line in 〈分诊座位职责〉 of
.claude/skills/pm-dispatch/SKILL.md: a triage grading whose direction lands inside an adjudicated area (an ADR, a ruled card, a not-re-adjudicable rule) pastes the governing line — thePrior rulings read:line thatcheck-prior-rulings.mjsprints — or names no target. Triage keeps writing directions (「写方向」 is charter text); the line binds the direction's evidence, never removes the direction.Governed surface (
.claude/**, rules layer): draft, no reviewer requested, no ready flip — the skills seat hangs the four-piece and the maintainer lands it. REGION claim :306–:415 only; PR #18242 holds :172–:185 and PR #18250 holds :645–:646 on the same file and neither range is touched here (the seat mergesorigin/mainat landing).The added line (SKILL.md :339 on the head, 120 bytes)
Vocabulary is the corpus's own: 「已裁卡」 (SKILL.md 〈家族派发〉), 「不可重裁」 (〈派发词三分区〉), 「落点」 = the named fix target (〈分诊座位职责〉's
pm:queuedefinition). The tool is cited by file name and the paste line by its literal prefix — no issue or PR number (check:pm-skill-id-lintgreen).Placement (P2, chosen by reading the section's order): directly under the line that mandates the direction — 「裁定写方向、给六态之一」 (:338 on the head, :339 on
origin/main). That is where 「写方向」 actually lives on this tree:references/lanes/triage.mdis 7 lines and its :7 is the half-state rule, so the grading's citation of 「写方向」 attriage.md :7is stale as a location while its substance holds. The English audit comment line (Triage: lands in …; rationale: …, :364 on the head) was the alternative; it names the artifact the direction is written into, but the obligation reads best beside the mandate it qualifies, and 「方向」 is anchored by the preceding line there.P1 confirmed by a live run (
node scripts/pm/check-prior-rulings.mjs --card 17497, exit 0) — the tool printed exactly the shape the line cites:formatPasteLine(check-prior-rulings.mjs) printsPrior rulings read: TERMS → N hits; ADR-xxxx Dn|noneand the whole-line formPrior rulings read: unresolvedwhen the search did not run;check-half-states.mjsH62 reads the same key (PRIOR_RULINGS_KEY), andreferences/decision-analysis.mdalready binds that line for decision cards.Payment (P3, measured) — one adjacent pair inside the region rewritten tighter
Before (
origin/main:311 + :312, 89 B + 50 B):After (head :311, 116 B):
Nothing operative is lost: every instruction token survives —
fire 开局,只按名加载,互斥检查所需工具,ToolSearch,select:,判定本轮有活, the ordering才加载其余— and the three dropped words are filler (「形式」 names the code span it follows; 「之后才」 → 「才」 keeps the only-after ordering; 「其余工具」 → 「其余」 in a line whose subject is tool loading). The PM's measured pairs (:312+:314, :363+:364, :397+:398) all rewrite past 120 B; this is the pair that fits. Not a re-wrap (no line-joining bought the budget), no rule deleted, ceiling untouched.Reverse verification (on head
c96b507d)git diff origin/main -- .claude/skills/pm-dispatch/SKILL.md: two hunks,@@ -308,8 +308,7 @@(the fold) and@@ -337,6 +336,7 @@(the insert) — both inside :306–:415; no other line moves.wc -l= 812 (ceiling 812, headroom 0 — the ratchet's own line:.claude/skills/pm-dispatch/SKILL.md is 812 lines (ceiling 812; headroom 0)).sed -n '734,755p' | md5sum=3327d02c56f8a0eca88569dad2270f32(frame block byte-identical).awklength scan for lines longer than 120 bytes over :306–:415 prints nothing; touched lines measure 116 B (fold) and 120 B (new).grep -c 'Prior rulings read:'= 1; the removed :312 text = 0 hits; the fold text = 1 hit.Gates (derived, run in the foreground, exits captured before any pipe, reconciled with
--ran)node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(no paths; change set derived off merge basecb648cb1) → 16 commands;--ranverdict:16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED (a DERIVED zero — all 16 recorded an exit code and none of them is 3), exit 0.node scripts/check-closing-keyword-parity.mjsnode scripts/check-closing-keyword-parity.mjs --self-testnode scripts/check-comment-mask-corpus.mjsnode scripts/pm/check-governed-queue-guard.mjs --self-testpnpm --filter @objectstack/lint run check:doc-formula-expressionsPREREQUISITE NOT MET(unbuilt@objectstack/formula/@objectstack/lint) — built both underos-verify-lock.sh(VERDICT command-exit 0), re-ran: 0pnpm check:agent-test-spellingpnpm check:doc-authoringpnpm check:driver-memory-censuspnpm check:nul-bytespnpm check:pm-governed-mergespnpm check:pm-governed-prose2 instruction surface(s) name all 5 registered governed surfaces)pnpm check:pm-skill-id-lint27 file(s) clean)pnpm check:pm-skill-ratchetpnpm check:refd-timer-probepnpm check:skill-frame-syncthe one declared copy of the decision frame is internally coherent)pnpm check:watch-hint-literalExtra, outside the roster:
node scripts/check-skill-frame-freshness.mjs --self-testexit 0 and--no-fetchexit 0 (the decision frame in this tree is current with refs/remotes/origin/main). The roster did not derivecheck:pm-dispatch-gates, so no detached run was owed. Full repo-level scans (pnpm lint) belong to CI.skip-changeset:.claude/**is published by no package'sfiles[](fast track) — nothing released moves.Acceptance notes
lanes/triage.md :7) is stale — that file's :7 is the half-state rule and the charter text lives at SKILL.md :339 onorigin/main; the ruling's substance is unaffected. 承接者: the skills seat, at landing of this PR.check:pm-skill-frame-sync; the script's real name ischeck:skill-frame-sync(scripts/check-skill-frame-sync.mjs), and it ran green. 承接者: the dispatching PM seat, via this report.维护者速读(草稿)
改了什么:分诊座位职责里加一行:分诊的方向若落在 ADR、已裁卡或不可重裁规则内,须贴
check-prior-rulings.mjs印出的Prior rulings read:行,否则不点落点。为了不突破 812 行上限,把开局工具加载的两行合成一行(116 字节),每条指令原样保留。为什么改:两次分诊给出的落点恰是治理文本已经拒绝的拼写或形状(一次是字段 schema 拒收的扁平拼写,一次是标记为不可重裁的通则),都在执行席的围栏才被拦下,其中一次派发令已写出。分诊的推理没错,错在落点没有引治理行,所以看不见。决策卡那边已有同一行的约束,这次把它也绑到分诊评级上。
风险与代价(含回滚):一行规则、一次同义压缩,不动上限、不删规则、不改工具。风险是新行 120 字节写得紧,读者需要认得
check-prior-rulings.mjs这个工具(它已在仓内、有自检)。回滚 = revert 本 PR 一次提交。席位意见:(留空,席位定稿成评论)
你要做的:确认这条规则的措辞与落位(放在「裁定写方向」那一行之下);同意即批准本 PR,由席位落地。
Generated by Claude Code