package com.correx.core.transitions.resolution

import com.correx.core.events.types.StageId
import com.correx.core.events.types.TransitionId

sealed interface TransitionDecision {

    data class Move(
        val transitionId: TransitionId,
        val to: StageId,
        // Set only when this Move was produced by a kernel-level preemptive redirect override
        // (freestyle graph re-routing). The pure resolver never sets it; it threads to
        // TransitionExecutedEvent.redirectId as the "redirect consumed" marker.
        val redirectId: String? = null,
    ) : TransitionDecision

    data object Stay : TransitionDecision

    data class Blocked(
        val reason: String
    ) : TransitionDecision

    data object NoMatch : TransitionDecision
}
