docs(pm-dispatch): instrument discipline — hard gates answer definite questions only; C5 and the patrol anchor stop blocking; at-tier review scoped to what ships and read from CI (#19496) - #19513
Conversation
… questions only R1: a non-zero `--pair` blocks landing only on the rows that answer a definite question; C5, the widening tell, is report-only and the at-tier review rules on its tells. R2: a report-only instrument earns no card and no dev. R3 (charter half): the half-state patrol runs on demand and its H rows are a reading, never a dispatch precondition. R5: the at-tier review is owed on what ships to users or agents, and its shape is a diff read plus the head's check-runs — never a local re-run of the derived gate families. R6: the 仪器纪律 reference, with one pointer line in SKILL.md. Every added line is paid in place; no ratchet ceiling moves. Claude-Session: https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE Co-Authored-By: Claude <noreply@anthropic.com>
The definite-row line names C5 as 只报告 rather than leaving it to inference, and the 仪器纪律 reference binds the name C5 to the widening tell it is. Claude-Session: https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE Co-Authored-By: Claude <noreply@anthropic.com>
…strument-discipline-charter
The tier outcome rides the 落地前检三条 line itself, so the director lane's pointer at this block still resolves after the standalone tier line left. Claude-Session: https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE Co-Authored-By: Claude <noreply@anthropic.com>
Contract reviewServed-tier: Tier H ( ① Derived judgments
② Semver levelNot applicable: charter text only, no package content; ③ Boundary flags
Implemented-by: VERDICT: FAIL Fails on ①5: R5's scope sentence landed but the lane-restriction sentences (contract-review.md:24-25, SKILL.md:651) were left standing and contradict it on the docs faces Isolated at-tier reviewer (mode:subagent of the director seat), reading time 2026-09-21T05:08Z; worktree at Generated by Claude Code |
…strument-discipline-charter # Conflicts: # .claude/skills/pm-dispatch/SKILL.md
…hes, not by lane The lane sentences that survived beside the new scope now say who runs the review, not who owes it: a diff touching any of the five shipping faces owes it, and 五面皆不碰 is the exemption. The published-schema face names its path, the miscount 三面 is gone, and the ruling record joins the provenance line. Claude-Session: https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE Co-Authored-By: Claude <noreply@anthropic.com>
Contract reviewServed-tier: Tier H ( ① Derived judgments
② Semver levelNot applicable: charter text only; ③ Boundary flags
Implemented-by: VERDICT: PASS Round 1's three FAIL items are closed on this head: R5 keys the obligation on the face and every lane-keyed twin is swept; the branch merges Isolated at-tier reviewer (mode:subagent of the director seat), reading time 2026-09-21T05:26Z; fresh worktree at head Generated by Claude Code |
|
Provenance — director seat, summon #25 (
Generated by Claude Code |
Resolves the SKILL.md conflict in the triage-seat filing rules: #19513's report-only-instrument line is kept verbatim, and this branch's compressed Acceptance-notes reader question sits beside it. The filing gate's instrument clause now points at `references/instrument-discipline.md` instead of restating the no-dev half #19513 landed. Claude-Session: https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE Co-authored-by: Claude <noreply@anthropic.com>
Fixes #19496
Clause-②: no
Tier H — the maintainer merges this by hand. The diff touches
AGENTS.mdand.claude/**, so one Tier H path makes the whole PR Tier H: no seat flips it ready, queues it, or arms auto-merge, and no agent account approves it.Authorization, verbatim and untranslated — maintainer, 2026-09-21 (ruling #208 on #19491):
What lands — five charter edits, text only
Nothing under
scripts/,.github/orpackages/is touched. The C5 code demotion, the patrol schedule and the CI self-test scoping are their own cards.R1 — a non-zero
--pairblocks landing only on rows that answer a definite question.SKILL.md〈入队与落地〉 andreferences/contract-review.md落地前检三条:AGENTS.mdPrime Directive #14 is where the conjunct lives —git grep -n -- '--pair' AGENTS.md .claudeis the census (1 hit inAGENTS.md, 5 in.claude). Tier S now readsreads 0 on its definite rows (⛔ never C5) and every check is green; the paragraph was re-wrapped from that sentence onward andAGENTS.mdstays at 1109 lines.R2 — the rule line, next to the tooling rules ruling #202 B landed, in 〈分诊座位职责〉's filing classes:
R3 (charter half) — the patrol anchor stops being a precondition. The two 〈执行座位职责〉 lines are deleted; one line replaces them, mirrored in
references/core-rules.md:R5 — at-tier review: scope and shape, in
references/contract-review.md〈复核归属与资格〉:Served-tier:and the record shape are unchanged.check-clause2-carriers --templateprints nothing that contradicts the shape: its ③ is the record's boundary-flag heading and it prescribes no local gate run, so no script edit was needed (checked; reported below as a reading, not a finding).R6 — 〈仪器纪律〉 is a new reference,
references/instrument-discipline.md(11 lines), with exactly one pointer line in SKILL.md 〈平台读数纪律〉, placed one line below the advisory-red rule:The section itself:
Why a new file rather than
landing-operations.md. Every file an at-tier reader already opens for landing or gates stands at its ceiling with zero headroom —landing-operations.md69/69,true-green.md32/32,review-checklist.md77/77 — and the section costs 11 lines, so hosting it in one of them means deleting live rules, which this card forbids. The pointer instead sits where the reader deciding what a gate reading means already is: 〈平台读数纪律〉, right after the two lines on a gate job's conclusion and an advisory red. The new file carries noCEILINGSrow, because that row is an edit underscripts/**(out of scope here) and R6's own rule says a new ratchet needs the maintainer's sentence on its own card — reported below.The line ratchet — no ceiling raised, every added line paid in place
pnpm check:pm-skill-ratchetexit 0. Per-file counts on headfec2177089, after mergingorigin/main:.claude/skills/pm-dispatch/SKILL.md.claude/skills/pm-dispatch/references/contract-review.md.claude/skills/pm-dispatch/references/core-rules.mdAGENTS.md.claude/skills/pm-dispatch/references/instrument-discipline.mdWhat paid for the added lines — de-duplication only, no rule deleted, each surviving carrier named:
needs:contract-review(恒英文)由席位同笔挂:PR 一现即挂 PR;报告先到则先挂卡); its unique tail, ACCEPT 补齐 PR 侧, rides the next line.Implemented-by:/Reviewed-by:spelling lines became one pointer at--template, which prints both fields verbatim — and the record-shape line three above already cites that template.references/lanes/director.md's pointer at this block still resolves, and SKILL.md 〈复核〉 carries the full two-tier rule.AGENTS.md: 43 added bytes absorbed into the paragraph's own slack by re-wrapping from the edited sentence onward; no line was bought.Collision — both charter PRs merge clean
claude/issue-19457-charter-product-only-queue, head36ab00aa) merged intomainduring this round.git merge-tree --write-tree 36ab00aa HEADwas exit 0 with zero conflict markers before that, and this branch then mergedorigin/main(48c39e00) with no conflict. Itstoolinglabel rules, its two gate-false-positive lines and its ratchet bump (SKILL.md 813 → 819) are all present on this head.claude/issue-19483-feature-axis-charter): the card named head420bd091; the branch tip is now16418377.git merge-tree --write-tree 16418377 fec2177089→ exit 0, tree02a7323a2d779974bd035082ad954eaf4cd15a21, zero conflict markers. Every line that PR touches is untouched here.Acceptance
git grep -n '0 才请审' .claudegit grep -n -- '--pair' .claudegit grep -n '锚行未处置' .claudegit grep -n '半状态' .claudegit grep -n 'C5' …/references/contract-review.mdGates
Derived on this diff with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack— 23 commands; the derivation also names 11 wide-population, 53 artifact-roster, 14 pending-changeset and 2 CI-valued families as outside that list, so this is not a complete account of CI. Every exit code was captured before any pipe (cmd > log 2>&1; e=$?). Reconciled with--ran: 23 derived, 23 run, 0 NOT-MEASURED, 0 UNRUN.Three more, run because this card names them:
Two gates first answered
exit 3(PREREQUISITE NOT MET) in a fresh worktree and were re-run afterpnpm install, andcheck:doc-formula-expressionsafterpnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lintunder the shared verify lock (VERDICT command-exit 0). Those 3s are recorded as what they are — nothing measured, not a finding.skip-changesetapplies: the diff is.claude/**plusAGENTS.md, nothing underpackages/**, and no publishedfiles[]content moves.Acceptance notes — out of scope, not filed by the dev
references/instrument-discipline.mdcarries noCEILINGSrow, so it is the one un-ratcheted file on the pm-dispatch surface. Adding the row is an edit underscripts/**, and by R6's own rule a new ratchet needs the maintainer's sentence on its card. Dedupe words: CEILINGS, instrument-discipline, ratchet row, un-ratcheted reference.check-clause2-carriers --templateprints no line contradicting R5's shape (checked; no script edit).维护者速读(草稿)
改了什么 — 把「仪器」这件事写成纪律:
--pair这类硬门禁只在能给出确定答案的行上挡落地(复核记录在不在、档位行在不在、两个标签载体一不一致、认领形对不对);猜意图的那一行(C5 放宽 tell)从此只印读数,由达档复核的人判。半状态巡查从「每轮派发的前置条件」降为「按需跑的读数」。达档复核的范围收到「会出货给用户或 agent 的东西」,形状收到「读 diff 加读 CI 的 check-runs」,不再本地重跑门禁。新增一页〈仪器纪律〉,把这几条连同「只报告的仪器不配 dev」「新增门禁要维护者一句话」「工具位先花在删除上」写在一起。为什么改 — 裁决 #208 的实测:工具链自己占了三到四成的合并量、每个 PR 三分之二的 CI 关键路径;把 #19314 挡住的那道门,本体只是两句章程话,不是 CI 门禁。一次达档复核 24 万 token、29 分钟,其中最大一块是在本地重跑 CI 已经跑过的 37 个门禁族。这三件都不是删代码能解决的,是纪律写错了地方。
风险与代价(含回滚) — 代价是硬门变软:C5 不再挡人,漏网要靠复核的人看见。回滚是一次 revert,因为全是文本。棘轮一行没抬,新增的行全部用去重付账,幸存载体逐条点名在上面;唯一的新面是那一页新文件,它暂时没有棘轮行。
席位意见 —
你要做的 — 读这五处改动,同意就人工合并(Tier H,队列与 auto-merge 都不适用)。
Round 2 (seat's note)
Head
96774e44ef. The at-tier review (5755678024, FAIL) named three items; all fixed in one push: R5's obligation now keys on the face, not the lane (references/contract-review.md〈复核归属与资格(按面)〉 lines 24–27, SKILL.md line 647, plus the two lane-keyed twins at SKILL.md 533 and core-rules.md 113 — 「三面」 is now 「五面」 and the published schema names its pathpackages/spec/src/**non-test);origin/main(ea64bbc6e8) merged with the SKILL.md 180/181 conflict resolved keep-both;instrument-discipline.mdcites ruling 208 / card 19491 / comment 5755284987 with bare ids (the#spelling is whatcheck:pm-skill-id-lintrefuses). Ratchet: SKILL.md 815/819, contract-review.md 60/60, core-rules.md 151/151, AGENTS.md 1109/1109.CI: this head has zero GitHub-Actions runs — a
.claude/**plusAGENTS.mddiff matches no PR-level workflow paths; the merge queue'smerge_grouprun supplies the required contexts, so the empty check list is the known shape and not a stall.Generated by Claude Code
Generated by Claude Code