You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
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).
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.
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 巡查锚 / 锚行).
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.
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.
120-byte line cap on charter lines; table rows exempt. Chinese for charter text (the file's language); English PR body.
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.
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.mjsis 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).--pairblocks only on definite rows.SKILL.md:649today: 「开 PRPM_SWEEP_REPO=仓 check-clause2-carriers --pair N0 才请审」;references/contract-review.md:41「② 双载体已清,逐对机读 … --pair N」 and:55. Rewrite so that a non-zero--pairis 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 itsfile:linetells 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--pairat 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/andAGENTS.mdis the census; if AGENTS.md itself needs the word, it is Tier H in the same PR.claude/issue-19457-charter-product-only-queue, head36ab00aa, and place the line so both PRs merge clean): 「只报告的仪器,报错不配 dev:猜意图的仪器(放宽 tell、巡查行)只印读数,误报由席位一句话推翻,⛔ 不立卡、不派 dev、不开 PR。」half-state-patrol.yml置顶 issue)」 and 「锚上点名本道卡/PR/座位贴的 H 行逐行处置,再做其余判据;锚行未处置 ⛔ 不开新派发」; replace with one line: 「半状态巡查只按需跑(分诊席每日全量对账可调用),其 H 行是读数不是前提;⛔ 不因锚行停派发。」 Mirror inreferences/core-rules.mdif the precondition is stated there (grep 巡查锚 / 锚行).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--templateguidance text only ifcheck-clause2-carriers --templateprints a line that contradicts (b); ⛔ do not edit the script here — report it as an out-of-scope finding instead.references/landing-operations.mdor a newreferences/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.mjsis kept frozen (touched only when a workflow it feeds breaks). Quote the ruling as provenance in the section.Constraints
SKILL.mdis at 819 = the ceiling after 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 (and 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 lands it at exactly 819). Net SKILL.md lines must be ≤ 0: R3 deletes two lines and adds one, R2 adds one, R6 adds one pointer — pay the rest by tightening or merging existing lines (never by deleting a rule);references/*have their own ceilings (scripts/pm/check-skill-line-ratchet.mjsCEILINGS) — read them first and report exact counts. If a line cannot be paid, stop at that file and report the count; ⛔ do not raise a ceiling.36ab00aa) and 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 (head420bd091) both edit SKILL.md / core-rules.md and wait for the maintainer's hand. Base onorigin/main; keep every line those two PRs touch untouched; prove it withgit merge-tree --write-treeagainst both heads (exit 0, no conflict markers) and say so in the PR body with the two shas. If an edit above must land on a line one of them moves, put yours on an adjacent line and note it.Acceptance (the PR body shows each)
git grep -n '0 才请审' .claude= 0 hits with controlgit grep -n -- '--pair' .claude> 0;git grep -n '锚行未处置' .claude= 0 with controlgit grep -n '半状态' .claude> 0;git grep -n 'C5' .claude/skills/pm-dispatch/references/contract-review.mdnames it report-only; the R5 scope list and the 「⛔ never re-runs」 sentence are quoted from the file.pnpm check:pm-skill-ratchetexit 0 with the per-file counts printed;check:pm-widening-tells(report-only after this PR, still run) and every familynode scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderives, exit codes captured before any pipe.Out of scope (report, do not do)
scripts/pm/check-clause2-carriers.mjsC5 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