Skip to content

pm-dispatch: the selection order never reads priority:p1/p2/p3 — an older p3 outranks a newer p2 inside 「其余」; write priority into 取卡全序 #16352

Description

@claude

Filed by the skills seat from a measurement taken while answering the maintainer's question about the domain:ui backlog (2026-09-06T15:0xZ). The maintainer's expectation, verbatim: 「项目经理的技能不应该就是先派高优先级的任务吗」. The rule text does not say so for priority:p1 / p2 / p3.

The measurement

.claude/skills/pm-dispatch/SKILL.md, the 候选与批次 block, the selection order as written on main (3e270d4):

取卡全序:priority:p0 插队 > pm:blocking > target: 板上项 > type Bug > 其余;同级按卡龄。

references/core-rules.md digests it the same way (「取卡全序:插队卡、有下游依赖者的卡、发版板上项、缺陷卡、其余,同级按卡龄」), and references/dispatch-runbook.md's rationale line names p0, blocking, bug and age — priority:p1 / p2 / p3 appear in none of the three. Only p0 is read, as a queue-jump. Inside the 「其余」 level an older p3 outranks a newer p2, and a p3 typed Bug outranks a p2 finding of any age.

The triage seat grades every card with a priority label; that label today changes what a human sees and nothing about what the machine takes. The seats that do take p1/p2 first (the domain:ui seat's R1 this afternoon: one p1 + four p2 in flight) do so by judgment, which the next shift is free not to share.

Live instance, objectui domain:ui pm:queue at 14:15Z: 124 cards — priority:p1 3, p2 45, p3 56, ungraded 20. Under the written order those 124 are one level ordered by age, with the 56 p3 cards (79 of the 124 are findings) interleaved among the 45 p2.

The rule to land

Write priority into the order, as one line in each of the three texts:

取卡全序:priority:p0 插队 > pm:blocking > target: 板上项 > priority:p1 > p2 > p3 > 无级;同级内 type Bug 先,再按卡龄。

  • Priority outranks type: the triage seat's priority is its judgment of harm, and a p3 Bug is by that judgment less urgent than a p2 enhancement; type still breaks ties inside a level.
  • Ungraded (pm:queue with no priority:*) sorts last and is named in the round report as a triage gap — it is not taken ahead of a graded card; it is not a reason to invent a grade at the execution seat (类型与优先级由分诊席唯一生产).
  • The existing sentence 「全序每级取既有信号现读/现算,零逐卡维护;优先是排序不是豁免」 holds unchanged: priority labels are an existing signal, read at selection.

This is what the maintainer's pushback on a "p3 freeze" asked for: no label moves, no parking of p3 cards; the queue stays whole and the machine reads the grade it already carries.

Acceptance

  • SKILL.md (811/811, pin 342), references/core-rules.md (150/150) and references/dispatch-runbook.md (241/241) say the same order; line-neutral, rules-only register.
  • check-skill-line-ratchet, check-skill-id-lint, check-skill-frame-sync, check-governed-prose, check-half-states --self-test (no H-row pins the sentence — grep 取卡全序 over scripts/), check-governed-merges --test exit 3, whole-repo lint — exits captured before any pipe.
  • Governed (.claude/**): draft PR, seat review at contract tier, os-zhuang + hotlong, needs-user-decision + 维护者速读, human merge.

Serial plan

SKILL.md is held by flight A (PR #16339) and the devx seat's PR #16271; this card folds into the SKILL.md half of the finding-threshold card filed in the same stroke (same file, same register, no conflicting ruling), with a merge-tree proof against both open heads.


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

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions