Filed unassigned by the domain:engine execution seat (session_01RfyXxZ2WPjcjhuXpiQQc3y). Recording only — ⛔ no domain:* label; routing and grading are triage's. Raised by the maintainer after this seat made the mistake described below.
What happened, concretely
This seat found #11017 mislabeled: it is pm:blocked, its body's first paragraph says 「这是 packages/spec 契约变更,需要维护者裁决」, and it carries no Blocked-by: line — so nothing can ever fire to unblock it, and it is invisible in the maintainer's decision inbox (needs-user-decision returns zero open cards repo-wide; the label exists, reverse-checked, so that zero is a real reading and #11017 is its counter-example).
The seat reported it as a comment only. That report was worthless: the triage sweep matches three shapes — a fully bare card, pm:queue without domain:*, and domain:* without a pm-state — and pm:blocked + domain:engine matches none of them. A request for triage, recorded as prose on a card triage has no reason to re-read.
⚠️The seat is not claiming it could not have known. It attached pm:retriage correctly to #11020 roughly twenty minutes earlier, in the same round, for the same class of dispute. The wording below raises the probability of the miss; it is not an excuse for it.
The prose defect (SKILL.md, pm-dispatch)
Three passages, and the most locally-visible one points the wrong way:
| where | text | points to |
|---|
| Guardrails / 多仓协调 4 | 「误标不自行改、留言上报」 | leave a comment |
| 跨座位转移 | 「⛔ …裁决评论永不作唯一载体(散文对候选查询、sweep、老化告警全不可见)」 | a comment is not enough |
state-model table (pm:retriage) | 「挂标者 = 提出异议的席位,挂标与异议评论同笔」 | label and comment |
A seat that disputes a grading reads rule 1, does exactly what it says, and produces an invisible report. The correction lives in a section headed 跨座位转移, which does not look like it governs "I disagree with this label" and will not be consulted on the way.
Candidate fix (cheap, one line): replace 「留言上报」 with 「挂 pm:retriage + 异议评论同笔」 at both occurrences, so the locally-visible instruction is the composed rule rather than half of it.
⭐ The better fix — this failure is mechanically detectable
Per the skill's own principle (「防错归门禁,判断归档位」), prose is the weaker answer here. The defect has a machine-checkable signature:
a card labeled pm:blocked whose body and comments contain no Blocked-by: line
That is a state nobody can legally exit — structurally the same error the state model already names for pm:on-hold without a restart condition (「hold 没有可点火的出口 = 谁都无法合法退出的状态」). scripts/pm/check-half-states.mjs is already a report-only patrol over label/assignee/PR half-states; this is one more predicate in it, and it would have caught #11017with no seat noticing anything.
Worth considering in the same pass, since they are the same shape:
pm:blocked carrying a Blocked-by: that points at an already-closed card (the unlock scan should have fired and did not).- A card whose body says it needs a maintainer ruling while carrying no
needs-user-decision label — harder, since it needs text matching rather than a structural predicate, and probably not worth the false-positive rate.
⛔ Deliberately not proposing that execution seats be allowed to set needs-user-decision themselves. The single-producer guarantee for gradings is what makes 「domain X 归谁管」 answerable, and trading it away to fix a visibility bug would be the wrong trade. pm:retriage already reconciles the tension — a dissenting seat makes the dispute machine-visible without becoming a second producer, because attaching and clearing belong to different parties. The gap is not that the mechanism is missing; it is that the prose does not point at it.
One residual worth a ruling, not fixed here
pm:retriage makes the dispute visible to triage, not to the maintainer. For a card that is genuinely waiting on a person, that inserts one hop whose only justification is protecting the grading producer — unrelated to whether the card belongs in the maintainer's inbox. Whether that hop should exist for decision cards specifically is a question for the skills seat or the maintainer, not something this seat should resolve by relabelling.
Provenance
Filed unassigned by the
domain:engineexecution seat (session_01RfyXxZ2WPjcjhuXpiQQc3y). Recording only — ⛔ nodomain:*label; routing and grading are triage's. Raised by the maintainer after this seat made the mistake described below.What happened, concretely
This seat found #11017 mislabeled: it is
pm:blocked, its body's first paragraph says 「这是packages/spec契约变更,需要维护者裁决」, and it carries noBlocked-by:line — so nothing can ever fire to unblock it, and it is invisible in the maintainer's decision inbox (needs-user-decisionreturns zero open cards repo-wide; the label exists, reverse-checked, so that zero is a real reading and #11017 is its counter-example).The seat reported it as a comment only. That report was worthless: the triage sweep matches three shapes — a fully bare card,
pm:queuewithoutdomain:*, anddomain:*without a pm-state — andpm:blocked+domain:enginematches none of them. A request for triage, recorded as prose on a card triage has no reason to re-read.pm:retriagecorrectly to #11020 roughly twenty minutes earlier, in the same round, for the same class of dispute. The wording below raises the probability of the miss; it is not an excuse for it.The prose defect (SKILL.md,
pm-dispatch)Three passages, and the most locally-visible one points the wrong way:
pm:retriage)A seat that disputes a grading reads rule 1, does exactly what it says, and produces an invisible report. The correction lives in a section headed 跨座位转移, which does not look like it governs "I disagree with this label" and will not be consulted on the way.
Candidate fix (cheap, one line): replace 「留言上报」 with 「挂
pm:retriage+ 异议评论同笔」 at both occurrences, so the locally-visible instruction is the composed rule rather than half of it.⭐ The better fix — this failure is mechanically detectable
Per the skill's own principle (「防错归门禁,判断归档位」), prose is the weaker answer here. The defect has a machine-checkable signature:
That is a state nobody can legally exit — structurally the same error the state model already names for
pm:on-holdwithout a restart condition (「hold 没有可点火的出口 = 谁都无法合法退出的状态」).scripts/pm/check-half-states.mjsis already a report-only patrol over label/assignee/PR half-states; this is one more predicate in it, and it would have caught #11017with no seat noticing anything.Worth considering in the same pass, since they are the same shape:
pm:blockedcarrying aBlocked-by:that points at an already-closed card (the unlock scan should have fired and did not).needs-user-decisionlabel — harder, since it needs text matching rather than a structural predicate, and probably not worth the false-positive rate.⛔ Deliberately not proposing that execution seats be allowed to set
needs-user-decisionthemselves. The single-producer guarantee for gradings is what makes 「domain X 归谁管」 answerable, and trading it away to fix a visibility bug would be the wrong trade.pm:retriagealready reconciles the tension — a dissenting seat makes the dispute machine-visible without becoming a second producer, because attaching and clearing belong to different parties. The gap is not that the mechanism is missing; it is that the prose does not point at it.One residual worth a ruling, not fixed here
pm:retriagemakes the dispute visible to triage, not to the maintainer. For a card that is genuinely waiting on a person, that inserts one hop whose only justification is protecting the grading producer — unrelated to whether the card belongs in the maintainer's inbox. Whether that hop should exist for decision cards specifically is a question for the skills seat or the maintainer, not something this seat should resolve by relabelling.Provenance
duplicatePackage的failed[]是否应在 spec 声明结构化issues通道 —— 它今天在 spec 里没有任何响应 schema #11017 — the card that surfaced it;pm:retriagenow attached, with the dispute and this seat's self-correction in its thread.pnpm devfails to boot an example app — tsx cannot resolve./registryfrom packages/formula's extensionless relative imports #11020 — the same seat doing it correctly in the same round, which is why this is filed as a wording/patrol defect rather than a knowledge gap.scripts/pm/check-half-states.mjs— the existing patrol the predicate would join.