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 (ruling #202 B): the dev queue is product-only — tooling cards close at first grading, broken gates are deleted not repaired, at most one tooling dev in flight, and tooling is a first-touch label with named readers #19457
Path: P1 | none — the priority is the maintainer's ruling (维护者裁决 > 北极星), not a road reading: this card changes the intake that decides what the whole dev fleet works on.
Ruling: batch #202 item 1 · letter B · maintainer 「B(荐)A + 清理存量」 2026-09-20T23:25Z (chat; the minute is approximate, the wording is verbatim)
Director seat, summon #25 (session_012GcsUbuqFGBibkEDMRC1eE). Filed and labelled under the maintainer's direct-dispatch channel; the authorizing words, verbatim and in order, all in chat on 2026-09-20 between 23:18Z and 23:45Z:
「立章程卡并把 90 张的关闭交分诊席,你会派发处理章程卡吧,然后合并之后通知分诊?」 — the director dispatches this card; the maintainer merges (Tier H); the triage seat is notified after the merge
The stock cleanup (the 90 open pm:queue tooling cards) is not this card: it is the sibling card filed in the same stroke and carried by the triage seat.
Why triage did not close these cards — the charter text, cited
Triage did what the text says. Four places, all in .claude/skills/pm-dispatch/SKILL.md (mirrored in references/core-rules.md):
pm:queue admits tooling by definition. 「pm:queue = 有具名落点或复现的具体缺陷,或范围明确的工具/门禁修复,无可问之事」 (SKILL.md 〈分诊座位职责〉; core-rules 〈…〉 「范围明确的工具修复 … 进 pm:queue」). A gate fix with a named file is a well-formed queue card.
finding admission asks 「is it real」, never 「is it worth doing」. Class (b) is 「违背已声明契约(引契约文)」 and a gate's own header / self-test text has been read as the declared contract, so 「gate A's self-test does not cover B」 enters as class (b).
Measured 2026-09-20T23:00Z–23:40Z (prs/queue-census.py, prs/sweep-classify.py in the seat's scratchpad; REST list, no snapshot): pm:queue 215 open, 111 tool-class (52%); pm:dispatched 23, 12 tool-class; product P0 3 and P1 29 open at the same moment. Of the 97 tool-class queue cards in the cleanup list, 44 already carry the tooling label and 0 of the 100 product cards do — the label is real, and applied 45% of the time.
Nothing in the charter makes 「no product pull」 equal 「close」. It only equals 「later」. These five edits make it equal close.
The five edits (Tier H — .claude/skills/pm-dispatch/**, .claude/agents/os-dev.md where the report contract is touched; the maintainer merges by hand)
The dev queue is product-only. Delete 「或范围明确的工具/门禁修复」 from the pm:queue definition (SKILL.md and core-rules, same PR, same wording). A tooling card exists in pm:queue only when its body's first lines name the product card whose landing it blocks (Unblocks: #N, an open product card) or the customer-visible published surface it protects (name the surface). Execution seats' candidate query excludes tooling cards that carry neither line.
Triage closes at first grading. In 〈分诊座位职责〉: a card whose Path: reads none (rule 2's 「不在路上、不在清单上」) closes not_planned at first touch with the one-line reason and the two reopen conditions from item 1 — ⛔ not graded p3, not held. Gate headers, self-test descriptions and check-* remedy sentences are not 「已声明契约」 for class (b); class (b) needs a contract a user or a published package reads. Rule 3 is restated as a closing rule: while a product P0/P1 is open, a p2/p3 tooling card that names no unblocked product card closes.
A broken gate is deleted, not repaired. In the execution seat's rules and the finding classes: a gate that misfires twice (a false red, a false green measured, or a remedy sentence that names a path that does not exist) is removed — the limb, or the gate — in a PR that cites the two measurements; the repair is filed only when the gate protects a product landing or a customer-visible contract. 「稳定 > 功能」 holds for gates: fewer moving parts, not more checks. (The existing 「失效修法按序取:先删容许出错的构造」 line is the seed; make it the default for gates and say so.)
At most one tooling dev in flight, fleet-wide. In 〈候选与批次〉: across all lanes and seats, at most one pm:dispatched card is a tooling card at any time; the second waits. A tooling card with an Unblocks: #N line inherits that product card's priority (North Star rule 3's second clause) and does not count against the one.
tooling is a first-touch triage label with named readers. (Maintainer's proposal 「对于工具卡,分诊是不是应该有一个单独的标签打上,比如 tooling」; the label already exists.) Definition: the fix lands in a gate, script, workflow, skill, seat protocol or PM tooling file (scripts/**, .github/**, .claude/**, packages/lint gate rules, packages/spec/scripts/**), not in a product package. Triage applies it at first grading, in the same label write as domain:* and priority:*; filers may pre-apply. Readers, named in the label glossary (「一个标签存在当且仅当有具名读者」): (i) the execution seat's candidate query (item 1's exclusion), (ii) the triage first-touch close (item 2), (iii) the fleet-wide one-in-flight count (item 4), (iv) the census / half-state patrol (a tooling card open in pm:queue without an Unblocks: or surface line is a half-state).
Each edit lands in SKILL.md and, where the line exists there, in references/core-rules.md in the same PR (「一条规则在本文与核心条款一处改动,另一处同 PR 同改」); the PR body quotes the maintainer's words above verbatim and links this card and #19340.
The cleanup sibling card (filed in the same stroke, carried by the triage seat) closes the 90 open stock cards; this card is the rule that stops the next 90.
Execution
Dispatched by the director seat as its own os-dev round under the maintainer's words in item 8 above (「你会派发处理章程卡吧」) — the one standing exception to 「总监永不认领 backlog」, and it is recorded here as such. At-tier contract review before ready; the maintainer merges by hand (Tier H). After the merge the director posts the merged sha and the five rules on the triage seat post (#6015) so the next triage fire runs under them.
Verification the PR must show: the pm:queue definition no longer contains the tooling clause in either file (git grep -n '范围明确的工具' origin/main -- .claude/ → 0 hits, with the control git grep -n 'pm:queue' origin/main -- .claude/skills/pm-dispatch/SKILL.md non-zero); the label glossary names the tooling label with its four readers; scripts/pm/check-half-states.mjs (or the census) gains the half-state row in reader (iv) only if it is a one-line addition — otherwise the row is named in the glossary and left to the next patrol edit.
Path: P1 | none — the priority is the maintainer's ruling (维护者裁决 > 北极星), not a road reading: this card changes the intake that decides what the whole dev fleet works on.
Ruling: batch #202 item 1 · letter B · maintainer 「B(荐)A + 清理存量」 2026-09-20T23:25Z (chat; the minute is approximate, the wording is verbatim)
Director seat, summon #25 (
session_012GcsUbuqFGBibkEDMRC1eE). Filed and labelled under the maintainer's direct-dispatch channel; the authorizing words, verbatim and in order, all in chat on 2026-09-20 between 23:18Z and 23:45Z:check:skill-examplesspells a PREREQUISITE refusal asexit 1, so--ranreconciliation reads it as a RED #19450, [finding]check-dts-references.mjsis wired intopackages/speconly — 67 of the 68 builds that run the sibling guard do not run it #19444, [finding]check-dts-closure.mjssharescheck-dts-emitted’s manifest criterion, so the post-build sweep is chunk-blind the same way #19443)The stock cleanup (the 90 open
pm:queuetooling cards) is not this card: it is the sibling card filed in the same stroke and carried by the triage seat.Why triage did not close these cards — the charter text, cited
Triage did what the text says. Four places, all in
.claude/skills/pm-dispatch/SKILL.md(mirrored inreferences/core-rules.md):pm:queueadmits tooling by definition. 「pm:queue= 有具名落点或复现的具体缺陷,或范围明确的工具/门禁修复,无可问之事」 (SKILL.md 〈分诊座位职责〉; core-rules 〈…〉 「范围明确的工具修复 … 进pm:queue」). A gate fix with a named file is a well-formed queue card.findingadmission asks 「is it real」, never 「is it worth doing」. Class (b) is 「违背已声明契约(引契约文)」 and a gate's own header / self-test text has been read as the declared contract, so 「gate A's self-test does not cover B」 enters as class (b).docs/NORTH-STAR.md「优先级」第 1、2 条」 — rule 2 says 「不在路上、不在清单上 ⇒ p3 或不做」 and triage takes p3; rule 3 (「产品仓还有开放的 P0/P1 时,任何车道不派 p2/p3 的工具卡」) governs dispatch, so the card stays open, graded, and is re-read by every sweep. [finding]check:skill-examplesspells a PREREQUISITE refusal asexit 1, so--ranreconciliation reads it as a RED #19450's first line records the off-road reading and the card was still queued at p2.pm:queueunder the same text. The inflow is devout_of_scope_findings→ triage filing (20 cards by the triage seat in the 24h to 2026-09-20T23:00Z); item 1 of the 「1 2 3 4 5 6 8」 directive (finding(skills/pm-dispatch): the director charter's step order reads as 「screen the whole inbox before the first batch」 — summon #25 presented batch #192 only after reading all 51 cards; and ruled cards re-enter the decision box without citing the ruling on their own thread #19340) inverts the filing threshold but is not yet in the charter.Measured 2026-09-20T23:00Z–23:40Z (
prs/queue-census.py,prs/sweep-classify.pyin the seat's scratchpad; REST list, no snapshot):pm:queue215 open, 111 tool-class (52%);pm:dispatched23, 12 tool-class; product P0 3 and P1 29 open at the same moment. Of the 97 tool-class queue cards in the cleanup list, 44 already carry thetoolinglabel and 0 of the 100 product cards do — the label is real, and applied 45% of the time.Nothing in the charter makes 「no product pull」 equal 「close」. It only equals 「later」. These five edits make it equal close.
The five edits (Tier H —
.claude/skills/pm-dispatch/**,.claude/agents/os-dev.mdwhere the report contract is touched; the maintainer merges by hand)pm:queuedefinition (SKILL.md and core-rules, same PR, same wording). A tooling card exists inpm:queueonly when its body's first lines name the product card whose landing it blocks (Unblocks: #N, an open product card) or the customer-visible published surface it protects (name the surface). Execution seats' candidate query excludestoolingcards that carry neither line.Path:readsnone(rule 2's 「不在路上、不在清单上」) closesnot_plannedat first touch with the one-line reason and the two reopen conditions from item 1 — ⛔ not graded p3, not held. Gate headers, self-test descriptions andcheck-*remedy sentences are not 「已声明契约」 for class (b); class (b) needs a contract a user or a published package reads. Rule 3 is restated as a closing rule: while a product P0/P1 is open, a p2/p3 tooling card that names no unblocked product card closes.pm:dispatchedcard is a tooling card at any time; the second waits. A tooling card with anUnblocks: #Nline inherits that product card's priority (North Star rule 3's second clause) and does not count against the one.toolingis a first-touch triage label with named readers. (Maintainer's proposal 「对于工具卡,分诊是不是应该有一个单独的标签打上,比如 tooling」; the label already exists.) Definition: the fix lands in a gate, script, workflow, skill, seat protocol or PM tooling file (scripts/**,.github/**,.claude/**,packages/lintgate rules,packages/spec/scripts/**), not in a product package. Triage applies it at first grading, in the same label write asdomain:*andpriority:*; filers may pre-apply. Readers, named in the label glossary (「一个标签存在当且仅当有具名读者」): (i) the execution seat's candidate query (item 1's exclusion), (ii) the triage first-touch close (item 2), (iii) the fleet-wide one-in-flight count (item 4), (iv) the census / half-state patrol (atoolingcard open inpm:queuewithout anUnblocks:or surface line is a half-state).Each edit lands in SKILL.md and, where the line exists there, in
references/core-rules.mdin the same PR (「一条规则在本文与核心条款一处改动,另一处同 PR 同改」); the PR body quotes the maintainer's words above verbatim and links this card and #19340.Relations
mainruleset makes unreachable — merge queue mandatory, the guard required,bypass_actorsempty — so PR #19024 was enqueued three times by the maintainer's accounts and refused three times #19344: unrelated mechanism (queue guard remedy vs ruleset); listed because item 3 is the rule it will be judged under.Execution
Dispatched by the director seat as its own
os-devround under the maintainer's words in item 8 above (「你会派发处理章程卡吧」) — the one standing exception to 「总监永不认领 backlog」, and it is recorded here as such. At-tier contract review before ready; the maintainer merges by hand (Tier H). After the merge the director posts the merged sha and the five rules on the triage seat post (#6015) so the next triage fire runs under them.Verification the PR must show: the
pm:queuedefinition no longer contains the tooling clause in either file (git grep -n '范围明确的工具' origin/main -- .claude/→ 0 hits, with the controlgit grep -n 'pm:queue' origin/main -- .claude/skills/pm-dispatch/SKILL.mdnon-zero); the label glossary names thetoolinglabel with its four readers;scripts/pm/check-half-states.mjs(or the census) gains the half-state row in reader (iv) only if it is a one-line addition — otherwise the row is named in the glossary and left to the next patrol edit.Generated by Claude Code