Skip to content

[SKILL] pm-dispatch step 0: the backlog sweep predicate misses two un-actionable card shapes (pm:queue without domain:*; domain:* without a pm-state) #6405

Description

@claude

The backlog sweep (SKILL step 0) selects issues carrying no pm:* label. Two card shapes fall outside that predicate while still being un-actionable, and both were measured stalling today.

Blind spot A — pm:queue present, domain:* absent

A card filed with pm:queue by a lane PM or a steward is skipped by the sweep (it has a pm:* label), so the triage seat never routes it. But lane discipline says an issue with no domain:* may be claimed by no one. The card therefore reads as dispatchable on the board and is claimable by nobody — it stalls silently until someone notices by hand.

Measured today — six cards, all filed 11:00–13:55Z, all still unrouted when the 16:47Z round swept them in only because two PM sessions reported them by hand on #6015 (16:12Z and 16:28Z): #6283, #6285, #6329, #6214, #6274, #6317. Prior occurrences: #5794 and #5744 each stalled a full day for the same reason (recorded on #5794, 2026-08-06 14:39Z). That makes today the third and fourth same-shape occurrence.

Why it has a stable producer: cross-seat transfer cards (filed with pm:queue by the transferring seat, per the transfer protocol) and queue-health cards filed by the steward Routine both arrive pre-queued by design. The blind spot is not an accident of one lane's habits — the protocol itself manufactures these cards.

Blind spot B — domain:* present, pm-state absent

The mirror image: a lane PM files a card with a domain:* label but no pm:queue / finding / needs-user-decision. The sweep skips it (a domain:* label is not a pm:* label, but a triage seat scanning "unlabeled" work will typically exclude it as already-routed), and the queue never sees it because it has no queue state.

Measured today: #6378 (filed 15:38Z with tooling + domain:devx, no pm-state) sat unqueued until the 16:47Z round. One occurrence so far, so this half is weaker evidence than A — recorded together because the fix is one predicate.

Proposed change (SKILL step 0, scan predicate)

Today's predicate is "no pm:* / domain:* / needs-user-decision / finding label". Widen it to three disjuncts:

  1. no pm:* and no domain:* label (today's rule, unchanged);
  2. pm:queue present but no domain:* — objectstack only (sibling repos are whole-repo seats and carry no lane label, so this disjunct must be scoped or it matches every objectui/cloud queue card);
  3. domain:* present but no pm-state label (pm:queue / pm:dispatched / pm:blocked / pm:on-hold / finding / needs-user-decision).

Exclusions stay as they are (tracking, status:parked, #4604, pm:seat posts).

⚠️ Disjunct 2 must be repo-scoped, and disjunct 3 will match cards a lane is actively filing — a few seconds of race is normal, so a card should only be swept once it is a minute or two old, not the instant it appears.

Note on scope

This is a text change to .claude/skills/pm-dispatch/SKILL.md step 0. It is not a rider for #6393 (three unrelated fleet-wide hazards from a shift review); same file, different reviewing surface, so they should be separate PRs — or if one dev takes both, separate commits with separate rationale.

Filed by the triage seat as a card, not held as a memory, because the two reporting sessions above proposed exactly this and the shape has now recurred four times. Duplicate search run first (sweep predicate / blind spot / pm:queue without domain, across the three repos' open issues and PRs) — no existing card.

本评论来自分诊座位 Routine(#5474 试点),不构成认领。


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions