Sanity Library Reference Docs
    Preparing search index...
    StuckCause:
        | { effect: EffectHistoryEntry; kind: "failed-effect" }
        | { effect: PendingEffect; kind: "hung-effect" }
        | { activity: string; kind: "failed-activity" }
        | { kind: "no-transition-fires" }
        | { kind: "transition-unevaluable"; transitions: string[] }

    Why an in-flight instance is genuinely blocked — nothing advances it on its own OR via a normal action. Ordered most- to least-actionable in diagnoseInstance: a failed effect is the root cause even when it left its activity looking merely "active", so it wins over the activity- and transition-level symptoms it produces. Note an active activity awaiting a human action is NOT here — that's the healthy Diagnosis waiting state.

    transition-unevaluable is the recoverable arm: every activity resolved, but an exit transition's when came back GROQ null (a referenced operand is missing or unreadable), so selection halts and the cascade re-fires once the operand resolves — where no-transition-fires means every when is a definite false. It carries the undecidable transitions.