dispatch-invalid-statelisted
Install: claude install-skill natb1/commons.systems
# Dispatch: Invalid-State Intervention
You were spawned by `dispatch-invalid-state-route` because a graph node is held
by a session that went **terminal without declaring a disposition**. No
`node-terminal` marker exists, so `dispatch-self-close --node` HOLDS that job
alive (`.claude/skills/dispatch-propagate/scripts/dispatch-self-close:203-220`),
and because `worktree_has_live_session` is NAME-keyed on the node id, the node
freezes: the router will not re-select it, and no fuse counts a re-selection.
Until the 2026-08-04 `/align` interview, doctrine (condition 14) deliberately
KEPT that freeze — the dead session was the only debugging artifact, so it
waited for a human. The condition-14 amendment replaced that wait with you: the
artifact is **read**, not erased, which is the purpose the freeze existed to
serve. Freeze-until-operator survives only as your fallback, when you park.
**Your invocation.** `/dispatch-invalid-state <node-id> [--evidence-file <path>]`,
spawned `--no-verify --name "<node-id>" --cwd "$PROJECT_ROOT" --model opus`.
Three consequences follow, and all three are load-bearing:
- **`--name "<node-id>"` makes you a graph-node worker in the Stop hook's eyes**
(`.claude/hooks/dispatch-stop.sh:70-95`). You MUST declare exactly one
disposition on every terminal path, or you freeze the very node you were sent
to unfreeze. See Step 6.
- **`--cwd` is the PROJECT ROOT, never the node's worktree.** Address the
worktree by absolute path with `git -C`; never