Runs the three-stage interpreter — match, gate, classify → emit — against defn under auth, for the given ctx and command.
Runs the three-stage interpreter — match, gate, classify → emit — against defn under auth, for the given ctx and command.
'''Match''': among transitions where t.from == defn.stateOf(ctx.entity) and t.on.accepts(command), find the first whose gated applicableWhen passes. No match and an applicableWhen failure both collapse to Left(Rejection.Unhandled).
'''Gate''': evaluate the gated t.requires and t.requiresPayload(entity, command). On failure, collapse the merged GuardFailure: a data message ⇒ Left(Invalid(m)); otherwise ⇒ Left(Unauthorized(label)).
gate applies the auth policy per call: Skip rewrites auth leaves away via Guard.stripAuth, Enforce leaves the guard intact. The interpreter never folds events — it returns the domain Seq[Event] as-is; folding into the aggregate stays in the shell.