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
pm-dispatch token economics: sonnet tier for S-class mechanical cards, scoped local gates (CI runs the full farm), slimmed dispatch prompts with standard clauses sunk into the os-dev definition (maintainer-approved 2026-08-09) #6863
Maintainer authorization (2026-08-09, in-session, verbatim): 「全部同意,先开任务」— approving the domain:spec seat's token-economics assessment (session session_011sGk4SKHqGRgmmqUok1P8M). Measured basis: dev subagents ≈80% of the loop's spend (~240–314k tokens per dispatch, 12 dispatches in one shift); the three items below target that 80% plus the duplicated prompt mass.
Scope — three coupled changes to the dispatch machinery (.claude/skills/pm-dispatch/SKILL.md + .claude/agents/os-dev.md)
1. Model tiering: S-class mechanical cards go to sonnet (policy line change)
The SKILL's model-split paragraph currently reads "pass model: "opus" on every dev dispatch" (reaffirmed in the 08-08 handover as 「所有派发至少 opus」). Amend: S-class mechanical cards (single-file prose/comment fixes, one-spread additions, dead-vocabulary row removals, alias/tombstone bookkeeping — cards whose correctness is enforced mechanically by the gate farm) dispatch on sonnet; M/L cards, ruling-implementation cards, multi-face semantic cards, and anything with design judgment stay on opus. The PM's container-assessment line in the claim comment already grades size — extend it to carry the model tier so the choice is auditable. PM review discipline (step 7) unchanged.
2. Local gate scoping: targeted gates locally, the full farm is CI's job (os-dev definition + SKILL clauses)
Today every dev runs every check:* enumerated from lint.yml (55+ gates) locally, then ALSO waits for CI to run the identical farm before reporting — a double payment created when the "wait for CI convergence" clause was added on top of the older "enumerate all gates locally" rule (#5738 era). Amend both files: local verification = build closure + affected-package suites + the gate-family checks relevant to the card's surface (the dispatch prompt names them); the full farm runs once, in CI, which the dev already waits on. Accepted cost, stated in the rule: an occasional extra push-fix lap when a non-obvious gate reddens in CI — cheaper than paying the full local farm on every dispatch. Keep intact: build-first, prefix-direction consumer sweep, reverse verification, TEST_DEBT re-measure when adding test files, and CI convergence before reporting (that clause is what makes this safe).
3. Slimmed dispatch prompts: point at GitHub, sink the boilerplate (SKILL template + os-dev definition)
The SKILL's dispatch template currently mandates "paste the full issue body, never a summary". Amend the default: the prompt instructs the dev to read the full body + all comments on GitHub (which premise-first already forces it to do), and pastes only (a) ruling quotes verbatim (Chinese untranslated), (b) the 裁决 vs PM-机制假设 partition, (c) card-specific clauses and same-day-churn lines. Mitigation for the notes-12 read-truncation risk: the prompt requires the dev to verify body completeness (double-read on suspicion). Precedent: the [移交自 objectui] ComponentPropsMap 未声明 objectui 渲染器实读的 5 个顶层 prop(page:header ×3 / page:tabs.tabStyle / page:accordion.variant)—— #5775 的清点未完 #6776 dispatch ran this way successfully.
The standard non-negotiables block (~1.5k tokens repeated verbatim per dispatch: worktree/branch discipline, build-first, filter direction, ADR-0112 rejection assertions, authorable-surface anchor rules, gen:schema MERGE-state ban, foreground posture, English policy, report contract) moves INTO .claude/agents/os-dev.md once; dispatch prompts carry only deltas. Producer-side fix per the PD#12 instinct the SKILL itself cites.
Already in effect (seat practice, recorded here for handover durability — no file change needed)
Batched seat-post refreshes (per round-end, not per event) · terse ACCEPT comments (verdict + link + load-bearing points; the PR body is the detail authority) · race-check re-reads fetch the thread tail, not the full thread · sweep-first batching of same-class S cards extended.
Keep untouched (explicitly out of scope — these carry incident receipts): claim protocol, race checks, premise-first verification, write-after-read, serial landing relay, ≤45min patrol cadence while in flight.
Dedup: searched pm-dispatch token os-dev open issues — no prior card.
Filed by the domain:spec seat; routing label left to the triage seat. Dispatch under the current drain-then-single-concurrency directive.
Maintainer authorization (2026-08-09, in-session, verbatim): 「全部同意,先开任务」— approving the
domain:specseat's token-economics assessment (sessionsession_011sGk4SKHqGRgmmqUok1P8M). Measured basis: dev subagents ≈80% of the loop's spend (~240–314k tokens per dispatch, 12 dispatches in one shift); the three items below target that 80% plus the duplicated prompt mass.Scope — three coupled changes to the dispatch machinery (
.claude/skills/pm-dispatch/SKILL.md+.claude/agents/os-dev.md)1. Model tiering: S-class mechanical cards go to sonnet (policy line change)
The SKILL's model-split paragraph currently reads "pass
model: "opus"on every dev dispatch" (reaffirmed in the 08-08 handover as 「所有派发至少 opus」). Amend: S-class mechanical cards (single-file prose/comment fixes, one-spread additions, dead-vocabulary row removals, alias/tombstone bookkeeping — cards whose correctness is enforced mechanically by the gate farm) dispatch on sonnet; M/L cards, ruling-implementation cards, multi-face semantic cards, and anything with design judgment stay on opus. The PM's container-assessment line in the claim comment already grades size — extend it to carry the model tier so the choice is auditable. PM review discipline (step 7) unchanged.2. Local gate scoping: targeted gates locally, the full farm is CI's job (os-dev definition + SKILL clauses)
Today every dev runs every
check:*enumerated fromlint.yml(55+ gates) locally, then ALSO waits for CI to run the identical farm before reporting — a double payment created when the "wait for CI convergence" clause was added on top of the older "enumerate all gates locally" rule (#5738 era). Amend both files: local verification = build closure + affected-package suites + the gate-family checks relevant to the card's surface (the dispatch prompt names them); the full farm runs once, in CI, which the dev already waits on. Accepted cost, stated in the rule: an occasional extra push-fix lap when a non-obvious gate reddens in CI — cheaper than paying the full local farm on every dispatch. Keep intact: build-first, prefix-direction consumer sweep, reverse verification, TEST_DEBT re-measure when adding test files, and CI convergence before reporting (that clause is what makes this safe).3. Slimmed dispatch prompts: point at GitHub, sink the boilerplate (SKILL template + os-dev definition)
.claude/agents/os-dev.mdonce; dispatch prompts carry only deltas. Producer-side fix per the PD#12 instinct the SKILL itself cites.Already in effect (seat practice, recorded here for handover durability — no file change needed)
Batched seat-post refreshes (per round-end, not per event) · terse ACCEPT comments (verdict + link + load-bearing points; the PR body is the detail authority) · race-check re-reads fetch the thread tail, not the full thread · sweep-first batching of same-class S cards extended.
Implementation notes
.claude/internal tooling PR: per the Guardrails exception this is PM-implementable with the authorization quoted in the PR body (precedents docs(pm-dispatch): 探活入例行、报告丢失直接验收、座位行自查等五处协议更新 #5597/docs(skills): pm-dispatch 探活规程扩为五条 —— 定时器先挂 + 批量在飞期 ≤45 分钟巡检 #5872, docs(pm-dispatch): 2026-08-08 spec 车道班次沉淀 —— 实测坑位 14–20 七条 #6650); review by another seat or maintainer walkthrough — ⛔ no self-review-self-merge. Authorization for THIS card: the 2026-08-09 in-session approval quoted above.pm-dispatch token os-devopen issues — no prior card.Filed by the
domain:specseat; routing label left to the triage seat. Dispatch under the current drain-then-single-concurrency directive.