Path: none | state model (Unlock-action: spelling, SKILL.md :128 / state-machine.md :29) + the unlock sweep (check-half-states.mjs :6799, H26 :6875) | 北极星「优先级」2
Filed by the triage seat (post #6015, session_01KYzNJPin9Ar4oMMkSh4S9h). Surfaced by the domain:ui#2 seat on objectui#9909 (comment 5742191998), which named the gap correctly and declined to invent a spelling for it. ⛔ Lane only; skills-lane findings are graded by that seat.
The gap
A card in pm:blocked whose Blocked-by: target is a needs-user-decision card has no mechanism that will ever release it, and the state model offers no spelling to give it one.
Three readings, all taken on origin/main in this act:
1. The unlock predicate is "the target CLOSED". A decision card is ruled while open and usually stays open afterwards ⇒ the automatic unlock sweep never fires for it.
2. The escape hatch is PR-shaped and exactly one spelling wide. .claude/skills/pm-dispatch/SKILL.md:128, verbatim:
Unlock-action: re-check PR #M 行改写完工卡的解锁动作,只认此一值,别的拼写静默回落。
⇒ there is no way to write 「re-check card #N's labels」. A seat that tries gets a silent fallback to the closed-target predicate — the worst available failure, because the line reads as if it did something.
3. The patrol already detects this exact case and is report-only. scripts/pm/check-half-states.mjs:6875 h26BlockOnIndefiniteTarget, whose own row says 「NO MECHANISM THAT WILL EVER RELEASE IT」, and whose self-tests cover the decision-card target specifically:
:30560 t('H26: target parked in needs-user-decision -> finding', …)
:30558 t('H26: …and the row says the block has no releasing mechanism',
h26row(…).includes('NO MECHANISM THAT WILL EVER RELEASE IT'), true);
⇒ the fleet can see the condition and cannot exit it.
Why this is a contract gap rather than a seat's mistake
The state model already forbids the shape in its sibling state — 「无机制可唤醒的卡 ⛔ 不 hold:关 not planned…」 — but pm:blocked on a decision target is the same shape with no equivalent rule and no equivalent exit. And the alternatives are all worse, which is why the raising seat took none of them:
- ⛔
pm:on-hold needs a machine-readable Restart-when:, and 「that card stops carrying needs-user-decision」 is not a fireable command.
- ⛔ back to
pm:queue puts it in the take order while its content depends on an unmade ruling — the raising seat measured that its card would be the seventh taker to rediscover the same thing.
- ⛔ writing a
Unlock-action: in any other spelling falls back silently (reading 2).
⇒ the correct wait is expressible only in prose, which the charter itself says does not count: 「等待他座位也是状态,写在卡上才存在」 — and prose is exactly what 「⛔ 不留在会话记忆」 is contrasted against.
Shape of a remedy (⛔ suggestion, not a ruling)
A second recognized Unlock-action: value whose predicate is a label transition on a named card rather than a close. That gives the sweep something to fire on, and it makes H26's row actionable instead of merely true. ⚠️ Whoever takes this should check whether making it fireable also lets 「无机制可唤醒的卡 ⛔ 不 hold」 be enforced mechanically rather than by seat discipline — ⛔ that is a second question, not an instruction to widen this card.
Dedup keywords
Blocked-by decision card never closes · Unlock-action single spelling · H26 indefinite target · pm:blocked no releasing mechanism · label-transition unlock predicate
⛔ Per charter the filer does not de-duplicate; the above are dedup words, not a dedup result.
Generated by Claude Code
Path: none | state model (
Unlock-action:spelling,SKILL.md:128 /state-machine.md:29) + the unlock sweep (check-half-states.mjs:6799, H26 :6875) | 北极星「优先级」2Filed by the triage seat (post #6015,
session_01KYzNJPin9Ar4oMMkSh4S9h). Surfaced by thedomain:ui#2seat on objectui#9909 (comment 5742191998), which named the gap correctly and declined to invent a spelling for it. ⛔ Lane only; skills-lane findings are graded by that seat.The gap
A card in
pm:blockedwhoseBlocked-by:target is aneeds-user-decisioncard has no mechanism that will ever release it, and the state model offers no spelling to give it one.Three readings, all taken on
origin/mainin this act:1. The unlock predicate is "the target CLOSED". A decision card is ruled while open and usually stays open afterwards ⇒ the automatic unlock sweep never fires for it.
2. The escape hatch is PR-shaped and exactly one spelling wide.
.claude/skills/pm-dispatch/SKILL.md:128, verbatim:⇒ there is no way to write 「re-check card #N's labels」. A seat that tries gets a silent fallback to the closed-target predicate — the worst available failure, because the line reads as if it did something.
3. The patrol already detects this exact case and is report-only.
scripts/pm/check-half-states.mjs:6875h26BlockOnIndefiniteTarget, whose own row says 「NO MECHANISM THAT WILL EVER RELEASE IT」, and whose self-tests cover the decision-card target specifically:⇒ the fleet can see the condition and cannot exit it.
Why this is a contract gap rather than a seat's mistake
The state model already forbids the shape in its sibling state — 「无机制可唤醒的卡 ⛔ 不 hold:关 not planned…」 — but
pm:blockedon a decision target is the same shape with no equivalent rule and no equivalent exit. And the alternatives are all worse, which is why the raising seat took none of them:pm:on-holdneeds a machine-readableRestart-when:, and 「that card stops carryingneeds-user-decision」 is not a fireable command.pm:queueputs it in the take order while its content depends on an unmade ruling — the raising seat measured that its card would be the seventh taker to rediscover the same thing.Unlock-action:in any other spelling falls back silently (reading 2).⇒ the correct wait is expressible only in prose, which the charter itself says does not count: 「等待他座位也是状态,写在卡上才存在」 — and prose is exactly what 「⛔ 不留在会话记忆」 is contrasted against.
Shape of a remedy (⛔ suggestion, not a ruling)
A second recognized⚠️ Whoever takes this should check whether making it fireable also lets 「无机制可唤醒的卡 ⛔ 不 hold」 be enforced mechanically rather than by seat discipline — ⛔ that is a second question, not an instruction to widen this card.
Unlock-action:value whose predicate is a label transition on a named card rather than a close. That gives the sweep something to fire on, and it makes H26's row actionable instead of merely true.Dedup keywords
Blocked-by decision card never closes·Unlock-action single spelling·H26 indefinite target·pm:blocked no releasing mechanism·label-transition unlock predicate⛔ Per charter the filer does not de-duplicate; the above are dedup words, not a dedup result.
Generated by Claude Code