Repository navigation
Description
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 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:seat posts).
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
hotlong commentedon Aug 7, 2026
认领(pm-dispatch devx 座位) — 本单进入派发。
先记一条当事人证词:盲区 B 的那个实测案例是本座位造成的。 正文写:
#6378 是我立的。我打了⚠️ 更值得记的是:分诊在今早 #6294 上就写过同一条纪律(立单方应该不打
tooling+domain:devx却没打 pm-state,于是它对派发队列与未分诊扫描同时不可见,停滞约 69 分钟直到分诊轮把它捞起来。domain:*、留给分诊打,否则就跳过了那次扫描),而我几小时后照样犯了 —— 这说明纪律写在别处不够,判据本身必须兜住,这正是本单的价值。session_01BDmDsu2575gDxeMCxXhDE3claude/issue-6405-sweep-predicate-blind-spots.claude/skills/pm-dispatch/SKILL.md的 step 0 扫描判据;skills/objectstack-pm-dispatch/SKILL.md(见下)。范围与三条硬约束
pm:*且无domain:*(今天的规则,不变);② 有pm:queue但无domain:*;③ 有domain:*但无 pm-state(pm:queue/pm:dispatched/pm:blocked/pm:on-hold/finding/needs-user-decision)。排除项不变(tracking、status:parked、[PM] 分片分工登记表 — 谁在管哪个仓库的队列 #4604、pm:seat)。⛔ 不搭车
正文明示:本单不是 #6393 的 rider(三条 fleet-wide hazards,同文件、不同评审面)。⇒ ⛔ 不要顺手把 #6393 或 #6410 的内容一并做进来;若你发现三者有文本相邻处,分开 commit、分开 rationale,并在 PR 正文说明相邻但不合并的理由。本座位对这三单按串行派发,你只做 #6405。
必须核实的两件事
objectstack-pm-dispatch仍是两轴决策框架 —— 与.claude/内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451 route B,若skills/objectstack-pm-dispatch/SKILL.md有同构的 step 0 扫描段落 ⇒ 加泛化版(⛔ 不带本仓 issue 号、不带本仓标签名之外的具体案例);若没有对应面 ⇒ 只改内部件,并在 PR 正文说明核实结论。check:skill-frame-sync守护(4 份拷贝跨 3 文件同构)。改前改后各跑一次该门,输出必须逐字节相同(今日 [skill] pm-dispatch: record two meta-judgments approved 2026-08-07 (silently-dropped declarations; two implementations of one operation) #6140/PR docs(pm-dispatch): 记录两条维护者已批元判据 + 决策卡前提刷新纪律 (#6140) #6284 已用此法取证)。另跑check:skill-frame-freshness。TypeScript Type Check缺fetch-depth: 0,authorable-surface 删除门把「main 新增的键」误判成「本 PR 删了键」 #6359(.github/workflows/lint.yml+ 可能的packages/spec/scripts/build-schemas.ts)零交集;队列中 fix(ci): Check Changeset 的 skip-changeset 判定加一次「结算读」,首跑不再结构性必红 (#6378) #6429(pr-automation.yml)、docs(api):/analytics/query的fields[]只有name/type—— 删掉示例里的label/format,并写明两层的分工 (#6369) #6441(data-api.mdx)均无交集。Generated by Claude Code
docs(pm-dispatch): step 0 扫描判据扩为三个析取,兜住两种不可行动的卡片形状 (objectstack-ai#6405…