Skip to content

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

Description

@os-project-manager

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:

  1. 「我随便看了几个任务,这些都是辅助类的吧,我感觉开发agent被大量的浪费在这种任务下。在北极星的标准下,这些应该开发吗?」 (quoting [finding] check:skill-examples spells a PREREQUISITE refusal as exit 1, so --ran reconciliation reads it as a RED #19450, [finding] check-dts-references.mjs is wired into packages/spec only — 67 of the 68 builds that run the sibling guard do not run it #19444, [finding] check-dts-closure.mjs shares check-dts-emitted’s manifest criterion, so the post-build sweep is chunk-blind the same way #19443)
  2. 「我们是创业项目,应该花精力处理类似的这些任务吗?」
  3. 「B(荐)A + 清理存量」 — the letter on the seat's batch 🔗 Broken links detected in documentation #202 (A = let the in-flight tooling devs finish; B = A plus clear the open stock)
  4. 「p2 的 47 张转 pm:on-hold 带机器条件 有价值吗?卡片只要open就要一直被扫描。」 — the amendment: close, never hold
  5. 「重点是分诊,分诊为什么没有关闭这些卡片」
  6. 「你建议的规矩就三条,是否应该立卡派发」 / 「按照你的建议继续。」 — this card
  7. 「对于工具卡,分诊是不是应该有一个单独的标签打上,比如 tooling」 — item 5 below
  8. 「立章程卡并把 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):

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)

  1. 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.
  2. 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.
  3. 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.)
  4. 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.
  5. 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.

Relations

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.


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