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

  1. claude commented on Sep 6, 2026

    @claude
    ContributorAuthor

    Blocked-by: #16004

    Serial reading (skills seat, 15:1xZ): the line this card rewrites sits in SKILL.md's 候选与批次 block, which two open governed drafts are already editing — PR #16339 (flight A, the six protocol-line repairs; closes #16004) and the devx seat's PR #16271 (the #14944 Q1 B depth-hold rules, inserted directly under the batch cap line). A git merge-tree between those two heads already conflicts, so a third edit in the same block would only add a fourth re-fold. This card is dispatched after BOTH have merged (the label names #16004; the seat also reads PR #16271's state before dispatch), as its own XS flight on SKILL.md + core-rules.md + dispatch-runbook.md. The finding-threshold card #16351 filed in the same stroke does not wait: its lines are in other blocks, and its flight proves a clean merge-tree against both heads.


    Generated by Claude Code

  2. claude commented on Sep 6, 2026

    @claude
    ContributorAuthor

    Rider recorded at flight I's ACCEPT (PR #16368): references/dispatch-runbook.md's sweep-batch line 「范围外发现照旧单开」 reads as the old admission once the finding threshold lands; the SKILL.md flight that executes this card (with #16229 and #16372) already touches the runbook for the selection-order rationale line — fold that one-line update in, line-neutral.


    Generated by Claude Code

  3. claude commented on Sep 6, 2026

    @claude
    ContributorAuthor

    Riders recorded at flight P's ACCEPT from #16104 sections 2–3, for this card's SKILL.md / runbook flight — each one line, rules-only, only if a fold pays: (a) the anchor-card convention's "first filer wins" requires a re-scan of the listing immediately before filing (two anchor cards were filed two minutes apart for one red main); (b) the landing-watch timer text carries a code-form probe with a non-zero control by construction, so a mis-designed literal probe cannot be armed; (c) a dispatch order's paraphrase of code behaviour is a claim the dev measures — quote the ruling and the code, never a gloss (the template's 「measure it and contradict me」 line is the control).


    Generated by Claude Code

  4. claude commented on Sep 7, 2026

    @claude
    ContributorAuthor

    Claim: PM loop round 9 — flight Z, the SKILL.md batch: five folds under the unchanged line pins (SKILL.md 811, core-rules 150, and each named reference's own ceiling), one governed PR. (1) #16386 乙 — the human-floor row gains the one-file exception for references/platform-readings.md: an increment raises the ceiling to the landed line count without a decision card provided the seat's acceptance comment shows every fact verified and deduplicated (candidates / landed / already-present / declined), one line per fact, no re-wrapping counted; recorded in ruledRaises citing the standing ruling (5563909225). (2) #15803 §A option (c) — batch independence reads FILE SURFACE, not package; the exemption clause becomes the rule (region-level file-surface declaration in the claim; merge main before opening the PR and again after a sibling lands; conflicts arbitrated by the merge queue, no manual PM ordering; same-file strictly serial), with the sentence that cross-file semantic coupling is caught by the queue's CI (5563910163). (3) #16352 — the selection order reads priority:p1/p2/p3 where it reads p0 today, in the order the card's ruling states. (4) #16372 — re-read the PR head before trusting any check_suite.completed event. (5) #16343 — the director carve-out in the seat mutex, the seat-post protocol's multi-summon status form, the ratchet-map comment refresh.
    Session: session_019RfFHiRCSs3JXLK4cwcfox
    Branch: claude/issue-16386-skill-batch-62
    Worktree: objectstack-issue-16386
    Domain: domain:skills
    File surface: .claude/skills/pm-dispatch/SKILL.md, references/core-rules.md, and whichever of references/seat-post-protocol.md and the ratchet map comment in scripts/pm/check-skill-line-ratchet.mjs the five cards name — measured per card before editing; folds only, no ceiling raise.
    Container & model: L, mode:subagent, fable — dispatch-gates.mjs --tier: MANDATORY on .claude/skills/pm-dispatch/SKILL.md; on a fable 429 the seat's exemption applies, opus, recorded here.
    Clause-②: no
    Serial: devx's PR #16271 (draft, mergeable_state: dirty) collides on 候选与批次 and owes the re-fold per note 5560027553; this flight branches from origin/main and takes no proof against a dirty head — whichever merges second re-folds. T's PR #16437 is in the queue on the ratchet script's self-test region; merge origin/main in after it lands or prove clean twice. Governed ⇒ draft PR, in-seat contract-tier review, then the seat requests os-zhuang + hotlong, adds needs-user-decision and posts the final 维护者速读; human merge. The PR carries Fixes #16386, Fixes #15803, Fixes #16352, Fixes #16372, Fixes #16343.


    Generated by Claude Code

  5. claude commented on Sep 7, 2026

    @claude
    ContributorAuthor

    Report pointer (flight Z): this card is one of the five folded into draft PR #16486 (head 9390702); the os-dev-report for the flight is the anchor comment on #16386 — #16386 (comment) — and the PR body lists this card's old line, new line and the fold that paid for it.


    Generated by Claude Code

  6. github-actions commented on Sep 7, 2026

    @github-actions
    Contributor

    os-closed-card-sweep — machine-findable marker for this generated comment.

    Removed the pm-loop state label(s) this closed card no longer claims: pm:dispatched.

    A state label claims work is in flight. This card is closed on a merged delivery, so the claim
    is stale; every other label is left exactly as it was found. Nothing here is a judgement about
    the card, and no verdict-bearing label is ever touched by this sweep.

    posted by half-state-patrol run 34097314575 · trigger schedule

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions