Skip to content

charter: instrument discipline — hard gates answer definite questions only; C5 and the patrol anchor stop blocking; at-tier review is scoped to what ships and reads CI instead of re-running gates (ruling #208 on #19491) #19496

Description

@os-project-manager

Path: none | tooling | maintainer-directed (ruling #208 on #19491) — dispatched at filing, never queued

Filed and dispatched by the director seat, summon #25 (session_012GcsUbuqFGBibkEDMRC1eE), under the maintainer's verbatim direct-dispatch instruction: Ruling #208 on #19491 — maintainer 「19491 接受你的建议,并立刻派发处理相关任务。」 (2026-09-21, chat, on the director seat's 档 2 package R1–R7). Direct-dispatch channel (SKILL.md 〈多仓协调〉规则 4 「维护者直派通道」): the audit quote above is the authorization; ⛔ not a triage grading, ⛔ never queued. The full analysis and measured table are the ruling record on #19491.

What this card changes (text only, Tier H — .claude/skills/pm-dispatch/**; the maintainer merges by hand)

Five edits, one PR. Every edit is a charter sentence; ⛔ no script, workflow or product file is touched here (the C5 code demotion in scripts/pm/check-clause2-carriers.mjs is the spec seat's in-flight dev per its own report on the ruling thread; the patrol schedule and the CI self-test scoping are their own cards, filed with this one).

  1. R1 — --pair blocks only on definite rows. SKILL.md:649 today: 「开 PR PM_SWEEP_REPO=仓 check-clause2-carriers --pair N 0 才请审」; references/contract-review.md:41 「② 双载体已清,逐对机读 … --pair N」 and :55. Rewrite so that a non-zero --pair is a landing block only when a row answering a definite question is red (a review record exists / Served-tier: present / the two label carriers agree / claim shape) and never on C5 (the widening tell): C5 prints its file:line tells and the at-tier review rules on them. Wherever AGENTS.md Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14 or a reference makes --pair at 0 a conjunct of landing (the spec seat cites 「No seat judges this」), name C5 as excluded from that conjunct in the same PR — git grep -n -- '--pair' across .claude/ and AGENTS.md is the census; if AGENTS.md itself needs the word, it is Tier H in the same PR.
  2. R2 — the rule line. Add, next to the tooling rule ruling 🔗 Broken links detected in documentation #202 B landed (PR docs(pm-dispatch): the dev queue is product-only — tooling cards close at first grading, broken gates are deleted, ≤1 tooling dev in flight, tooling is a first-touch label (ruling #202 B) #19462's 〈分诊座位职责〉 lines — read that branch, claude/issue-19457-charter-product-only-queue, head 36ab00aa, and place the line so both PRs merge clean): 「只报告的仪器,报错不配 dev:猜意图的仪器(放宽 tell、巡查行)只印读数,误报由席位一句话推翻,⛔ 不立卡、不派 dev、不开 PR。」
  3. R3 (charter half) — the patrol anchor stops being a precondition. Delete 〈执行座位职责〉 「每轮巡检第一判据:先读半状态巡查锚(half-state-patrol.yml 置顶 issue)」 and 「锚上点名本道卡/PR/座位贴的 H 行逐行处置,再做其余判据;锚行未处置 ⛔ 不开新派发」; replace with one line: 「半状态巡查只按需跑(分诊席每日全量对账可调用),其 H 行是读数不是前提;⛔ 不因锚行停派发。」 Mirror in references/core-rules.md if the precondition is stated there (grep 巡查锚 / 锚行).
  4. R5 — at-tier review: scope and shape. In references/contract-review.md 〈复核归属与资格〉: (a) scope — the at-tier review is owed on a PR when its diff touches what ships to users or agents: content/docs/**, apps/docs/**, CHANGELOG.md / .changeset/* prose, published schemas (packages/spec/src/** non-test exports), rules text (.claude/**, AGENTS.md, docs/NORTH-STAR.md, docs/adr/**); a PR touching none of these (internal code, tests, scripts/** tooling) lands on CI + the seat's own read, ⛔ no second agent; (b) shape — the reviewer reads the diff and the card, and takes ③ (PR checks) from the head's check-runs via REST, ⛔ never re-runs the derived gate families locally (measured: 37 families re-run on two heads was the largest share of a 243k-token / 29-minute review, PR docs(north-star,pm-dispatch): the feature axis — area:* labels, the 「路」 section as an ordered list of feature points, cross-layer features as parent + per-layer sub-issues, domain:* retreats to file ownership (#19483) #19488 comment 5755178153); Served-tier: and the record shape are unchanged. Update --template guidance text only if check-clause2-carriers --template prints a line that contradicts (b); ⛔ do not edit the script here — report it as an out-of-scope finding instead.
  5. R6 — 〈仪器纪律〉. A short section in a references file (references/landing-operations.md or a new references/instrument-discipline.md — the dev picks the file where the reader already looks, and says why), with exactly one pointer line in SKILL.md: hard gates only for questions with a definite answer (the governed register, the queue guard, CI tests, 「a review record exists」); an instrument that judges intent (widening, half-state) is report-only; a report-only instrument earns no dev (rule 2 above); a new gate, patrol row or ratchet needs the maintainer's sentence quoted on its card; the single tooling dev slot (🔗 Broken links detected in documentation #202 B) is spent on removals first; dispatch-gates.mjs is kept frozen (touched only when a workflow it feeds breaks). Quote the ruling as provenance in the section.

Constraints

Acceptance (the PR body shows each)

  • git grep -n '0 才请审' .claude = 0 hits with control git grep -n -- '--pair' .claude > 0; git grep -n '锚行未处置' .claude = 0 with control git grep -n '半状态' .claude > 0; git grep -n 'C5' .claude/skills/pm-dispatch/references/contract-review.md names it report-only; the R5 scope list and the 「⛔ never re-runs」 sentence are quoted from the file.
  • pnpm check:pm-skill-ratchet exit 0 with the per-file counts printed; check:pm-widening-tells (report-only after this PR, still run) and every family node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derives, exit codes captured before any pipe.
  • The at-tier review of this PR itself follows R5's shape (diff read + CI read; no gate re-run) — the director seat spawns it and says so on the PR.

Out of scope (report, do not do)

scripts/pm/check-clause2-carriers.mjs C5 code demotion (spec seat's dev); .github/workflows/half-state-patrol.yml (its own card); scripts/ci/select-gate-families.sh / lint.yml (its own card); any deletion of instrument code.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions