skills(pm-dispatch): a zero-hit control must be scoped to the claim's own subject or the zero is void - #17837
Merged
Conversation
… own subject or the zero is void The zero-hit rule bound the control to HIT, not to be SCOPED to the claim: a control that proves the instrument works while pointed at a different corpus, path shape, module/package boundary or quoting returns a reassuring answer that survives review. The rule now says the control shares the claim's subject and its failure mode (a wrapped phrase needs a wrapped control), or the zero is void rather than negative. SKILL.md :161 gains the clause across two lines, paid by merging the two timestamp lines (:164-:165) into one inside the same section (812/812). core-rules.md :45 carries the same clause in one line; its unreachable-repo half moved onto the origin/main line (:44) to keep 151/151. os-dev.md :54 gains the same scoping in one clause (403/403). Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MCLBsUgfykL74aU716rzVK
Contributor
Author
维护者速读改了什么 — 「零命中必须配控制词反查」这条读数纪律,在三处载体各加一句:控制词必须与主张同主体——同语料、同路径形、同包界、同引法、同失效形态(跨行短语要配跨行控制词)——否则这个零作废,不算阴性读数。载体:pm-dispatch SKILL.md :161–:162、核心条款 core-rules.md :45、os-dev 定义 :54。三个文件行数不变,各自仍顶着棘轮上限;SKILL.md 的两行靠合并两条时间戳规则付清,core-rules 靠把「仓不可达」半句挪到 origin/main 那一行。 为什么改 — hotcrm 席一个班次里三次「控制词命中了、零仍是假的」,分诊席又测到两次:控制词证明工具能用,却没证明工具对准了主张,错误读数带着安心感过了复核。旧文只要求控制词「命中」,不要求它「与主张同一件事」;规则被遵守却仍漏,是文本的缺口。 风险与代价(含回滚) — 纯规则文本,不加门禁不加脚本;回滚即 revert 一个 commit。唯一代价:SKILL.md 「无时间戳的读数是格式错误不是现值」这半句被压缩成「按未取处理」——操作性的一半保留,与 core-rules 同一措辞。 席位意见 — 接受(ACCEPT 5645289940,契约档复核,fable 档构建)。本卡还欠后半张:两条 你要做的 — 受管面( Generated by Claude Code |
This was referenced Sep 12, 2026
os-zhuang
approved these changes
Sep 12, 2026
os-zhuang
marked this pull request as ready for review
September 12, 2026 13:02
os-zhuang
enabled auto-merge
September 12, 2026 13:02
os-zhuang
deleted the
claude/issue-17569-control-scoped-to-the-claim
branch
September 12, 2026 13:27
This was referenced Sep 12, 2026
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.
The zero-hit rule bound the control to HIT, not to be SCOPED to the claim: a control can prove the instrument works while pointed at a different corpus, path shape, module/package boundary or quoting, and the zero then comes back as a reassuring negative that survives review (three misses in one hotcrm shift, two more measured by the triage seat). The rule now says the control shares the claim's own subject and the target's failure mode (a phrase that wraps across lines needs a control that wraps the same way), or the zero is VOID rather than negative. Landed in all three carriers of the discipline in one PR, per SKILL.md 「一条规则在本文与核心条款一处改动,另一处同 PR 同改」:
pm-dispatch/SKILL.md:161-:162,references/core-rules.md:45, and the dev-side reading in.claude/agents/os-dev.md:54. Every file stays at its ratchet ceiling; the payment is density inside the same section, itemised below. Not a new gate.Part of #17569
Acceptance notes
Premises (re-taken on
origin/main0cd841a16at 2026-09-12T10:03Z, aftergit fetch origin main):MAX_LINE_BYTES = 120— holds. The ratchet script lives atscripts/pm/check-skill-line-ratchet.mjs(the dispatch word spelled it without thepm/segment; same script).pulls/{n}/files): zero hits on the three files. Control, same corpus and same regex family: 5 of those PRs touch.claude/paths (docs(pm): platform-readings.md undraft rows name the ccr REST route beside MCP #17828 and fix(devx): pinGoverned Surface Queue Guardas the seventh REQUIRED_CONTEXTS row #17803 onplatform-readings.md, docs(pm): rest-channel.md rows 1–2 name the ccr REST routes for the draft flip and auto-merge #17823rest-channel.md, docs(agents): wait only on a PID you recorded — the WAIT side of the shared process table #17809 a hook, feat(pm): mechanise the prior-ruling search for decision cards #17515decision-analysis.md) — the zero is scoped.origin/mainmoved 3 commits (to51b024a16) during the run; none touched the three files.origin/mainno such sentence exists (grep formust hit,pair every zero,control wordover.claude/**andscripts/pm/**returns zero; control:零命中hits :161, :542, :724) — the template left in the rules-only rewrite. No second carrier to edit.Edited lines and byte counts (each ≤ 120):
YYYY-MM-DDThh:mmZ,树读数另带 ref 或 tip;无时间戳的读数按未取处理。」origin/main,⛔ 不用共享检出树;仓不可达 ⛔ 不当查过且干净。」How density was paid (all inside the 平台读数纪律 section of each file):
origin/mainline (:44). Dropped words: 「确定存在的邻近」 → 「必中」, 「时」, 「不得当成」 → 「不当」, 「的工作树」 → 「树」, 「先」. The wrapped-phrase example is carried by SKILL.md only (terser register).Frame block pin:
sed -n '734,755p' .claude/skills/pm-dispatch/SKILL.md | md5sum=3327d02c56f8a0eca88569dad2270f32before and after (net line count above it is 0, so the block did not move).Gates (derived with
node scripts/pm/dispatch-gates.mjs --commandsin the worktree, 18 commands; reconciliation via--ran: 「18 derived, 18 run, 0 NOT-MEASURED, 0 UNRUN」): all 18 exit 0 at head9e15e315f.pnpm check:pm-skill-ratchetverdict lines: 「SKILL.md is 812 lines (ceiling 812; headroom 0)」 · 「core-rules.md is 151 lines (ceiling 151; headroom 0)」 · 「os-dev.md is 403 lines (ceiling 403; headroom 0)」.pnpm check:skill-frame-sync: 「the one declared copy of the decision frame is internally coherent … 4 axes」.pnpm check:nul-bytes: 「OK (scanned 8465 text file(s) …; no raw ASCII control bytes)」.check:doc-formula-expressionsfirst answered exit 3 PREREQUISITE NOT MET (@objectstack/formulaand@objectstack/lintunbuilt) — not a measurement; built both under the verify lock (VERDICT command-exit 0, 169 s) and re-ran: exit 0.Changeset:
.claude/**publishes nothing from any released package (node scripts/check-changeset-fixed.mjsexit 0; nofiles[]of any package covers.claude/) —skip-changesetapplied by additive POST and read back.Deferred rider (⛔ not in this PR): the card's two
references/platform-readings.mdrows (git grep -- 'a/**/*.ext'skips files directly undera/;grep -c $'\x00'is not a NUL probe) wait on that file's serial behind PR #17828 and PR #17803. #17569 stays open for the rider PR; hencePart of, not a closing keyword.Governed surface:
.claude/**— this PR stays a draft at the human terminal; nothing here flips it ready or arms auto-merge.维护者速读(草稿)
改了什么: 「零命中必须配控制词反查」这条规则,在三处载体(pm-dispatch SKILL.md、核心条款 core-rules.md、os-dev 开发 agent 定义)各加一句:控制词必须与主张同主体 —— 同语料、同路径形、同包界、同引法、同失效形态 —— 否则这个零作废,不算阴性读数。三个文件行数不变,各自仍顶着 ratchet 上限。
为什么改: 一个班次里三次「控制词命中了、零仍是假的」:控制词证明工具能用,却没证明工具对准了主张。旧文只要求控制词「命中」,不要求它「与主张同一件事」,于是错误读数反而带着安心感回来、过了复核。
风险与代价(含回滚): 纯文本规则,不加门禁、不加脚本;付费方式是同节内合并两行时间戳规则(SKILL.md)与把「仓不可达」半句挪到 origin/main 那一行(core-rules)。回滚 = revert 这一个 commit,无生成物、无依赖。
席位意见: (留空,席位定稿成评论)
你要做的: 读三处新句是否表达了你要的判据;确认后人工合并(governed surface)。rider 半张(platform-readings 两行)另开 PR,本 PR 不关卡。
Generated by Claude Code