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:
- no
pm:* and no domain:* label (today's rule, unchanged);
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);
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
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:queuepresent,domain:*absentA card filed with
pm:queueby a lane PM or a steward is skipped by the sweep (it has apm:*label), so the triage seat never routes it. But lane discipline says an issue with nodomain:*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:queueby 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 absentThe mirror image: a lane PM files a card with a
domain:*label but nopm:queue/finding/needs-user-decision. The sweep skips it (adomain:*label is not apm:*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/findinglabel". Widen it to three disjuncts:pm:*and nodomain:*label (today's rule, unchanged);pm:queuepresent but nodomain:*— 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);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:seatposts).Note on scope
This is a text change to
.claude/skills/pm-dispatch/SKILL.mdstep 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:queuewithout domain, across the three repos' open issues and PRs) — no existing card.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code