Skip to content

pm-dispatch: finding triage runs to empty each fire, quality held by ≤5-card same-family batches - #11988

Merged
hotlong merged 1 commit into
mainfrom
claude/issue-11972-triage-run-to-empty
Aug 25, 2026
Merged

pm-dispatch: finding triage runs to empty each fire, quality held by ≤5-card same-family batches#11988
hotlong merged 1 commit into
mainfrom
claude/issue-11972-triage-run-to-empty

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Closes#11972

Governed surface (.claude/**) ⇒ draft, human merge. Verified at a879b1e57.

The ruling

Scheduled finding triage no longer carries a per-round total budget. Every fire
grades all ungraded finding cards; the rubber-stamp risk is controlled by
batch granularity instead of by capping the round. Maintainer, 2026-08-25,
verbatim and untranslated:

单轮跑数小时没关系啊。不读卡的批量盖章 可以通过每批5张这种约定来解决

So: ≤5 same-family cards per batch, read one by one, and a run of several
hours is an acceptable shape. A fire that exhausts its window resumes from where
it stopped — graded cards are off-label and never re-read, so the label
discipline already is the checkpoint.

What changed

.claude/skills/pm-dispatch/SKILL.md, 「发现分诊轮」

  • 首触定级每轮跑:预算 3–5 张每 fire 跑到清空: no round total, all ungraded
    findings graded this round, first-touch still ahead of old-card re-verification.
  • Quality clause added: 质量靠每批 ≤5 张同族卡逐张读,不靠封顶总量, with the
    2026-08-25 ruling quoted verbatim at the point where the rule is stated.
  • The finding >15 ⇒ 集中轮 trigger sentence is gone; 域分批 and the sweep
    promotion five rules stay, now as standing practice rather than a mode switch.
  • Unchanged: 零定级评论优先, 判级在分诊不在立单, the skills-lane self-triage
    exception, the Restart-when: daily sub-round, pm:retriage per-fire priority.

.claude/skills/pm-dispatch/references/dispatch-runbook.md, 发现分诊轮细则

  • 自动集中轮批量参数:15–20 张每批约定:≤5 张同族卡、同上下文逐张读
    (维护者 2026-08-25,取代 15–20/批). Standing authorization unchanged.
  • New 积压告警 bullet, the >15 trigger's destination: 连续 COMPLETED 清空 fire 后仍 >15 ⇒ 入流 > 吞吐,报维护者。 With run-to-empty as the steady state a raw
    count is no longer a mode switch — it is only an alarm once it survives
    consecutive completed fires, which is precisely the test that separates inflow
    above triage capacity from a spike the next fire clears.
  • 旧 hold 重验不占预算 removed — 「预算」 no longer exists; the ordering it
    encoded now reads 首触定级…优先于旧卡重验 in SKILL.md.
  • Section heading provenance now reads 2026-08-13 / 08-25.

Why run-to-empty rather than a larger budget

The current pile-up is an outage accumulation, not steady-state inflow.
Maintainer, 2026-08-25, verbatim and untranslated:

现在挤压这么多,是因为有一段时间我没token停了分诊,并且改成了两小时一次

That is the strongest argument for the ruled shape: a per-round budget never
recovers from an outage — it amortizes the backlog over dozens of fires while
new cards keep aging — whereas run-to-empty self-heals on the first fire after
supply returns. It is also why the alarm is calibrated on survival across
completed fires
: an outage gap is expected to produce a spike and one long
recovery round, and that is by design, not an alarm.

This outage narrative is deliberately not copied into the runbook. Repo
convention for the ceilinged instruction surfaces is that provenance is one line
and stories live on cards, not in operational text — so the story stays here and
on the card's addendum, and the doc carries the rule it produced.

Ceilings — paid by consolidation, nothing raised

filebeforeafterceiling
.claude/skills/pm-dispatch/SKILL.md10081005lowered 1008 → 1005, headroom 0
.claude/skills/pm-dispatch/references/dispatch-runbook.md274274274, headroom 0

The superseded prose is the purse: the 3–5 budget clause, the >15 trigger
sentence and the 15–20 batch parameter funded the ≤5 convention and the alarm
line. scripts/pm/check-skill-line-ratchet.mjs moves only to lower the
SKILL.md ceiling to the landed count — the shrink-only direction the ratchet
calls always legitimate. No registry entry was raised.

Every line stays within MAX_LINE_BYTES=120; the two verbatim rulings are
byte-intact, and no quote already spanning lines was re-flowed (the 出处
paragraph and the 状态转换机制 bullet are kept byte-identical).

Checks — all green at a879b1e57

Derived with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
(14 families) plus check:nul-bytes:

check:agent-test-spelling · check:cross-package-test-inputs ·
check:doc-authoring · check:doc-formula-expressions · check:entry-guard ·
check:parse-guard · check:pm-governed-merges · check:pm-governed-prose ·
check:pm-skill-id-lint · check:pm-skill-ratchet · check:pnpm-filter-targets ·
check:skill-frame-sync · check-ci-filter-parity.mjs ·
check-cross-package-test-inputs.mjs · check:nul-bytes — 15/15 exit 0.

Verdict lines: ✓ check-skill-line-ratchet: …SKILL.md is 1005 lines (ceiling 1005; headroom 0). · ✓ check-skill-line-ratchet: …dispatch-runbook.md is 274 lines (ceiling 274; headroom 0). · ✓ check-skill-line-ratchet self-test: 71 cases pass.
· ✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files · check-nul-bytes: OK (scanned 6658 text file(s) …; no raw ASCII control bytes).

No changeset: .claude/** + scripts/pm/** only — nothing published ships from
this diff.


Generated by Claude Code

…family batches (#11972)
Maintainer ruling 2026-08-25 supersedes the per-round 3–5-card budget and the
15–20-per-batch parameter. Scheduled finding triage now clears every ungraded
card per fire; the rubber-stamp risk is controlled by batch granularity (≤5
same-family cards, read one by one), not by capping the round total. A run of
several hours is acceptable; a fire that cannot finish resumes next fire, with
the off-label discipline of graded cards as the checkpoint.
The `finding` >15 concentrated-round trigger is absorbed: with run-to-empty as
the steady state a count above the old threshold is no longer a mode switch but
an inflow alarm — it counts only once it survives consecutive COMPLETED
run-to-empty fires, which is what separates inflow above triage capacity from an
outage spike that the next fire clears.
Ceilings paid by consolidation, no registry raised: SKILL.md 1008 → 1005 (the
superseded budget and trigger prose funded the new text), dispatch-runbook.md
unchanged at 274/274.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RMTpSRF5CjMmQBFfPtPCwJ
@github-actionsgithub-actionsBot added size/s documentation Improvements or additions to documentation labels Aug 25, 2026
@os-zhuangos-zhuang added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 25, 2026 — with Claude
@hotlong
hotlong marked this pull request as ready for review August 25, 2026 05:11
@hotlong
hotlong added this pull request to the merge queueAug 25, 2026
Merged via the queue into main with commit 1318ba3Aug 25, 2026
32 checks passed
@hotlong
hotlong deleted the claude/issue-11972-triage-run-to-empty branch August 25, 2026 05:25
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants

@os-zhuang@hotlong@zhuangjianguo