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

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