//! Scenario-world harness: multi-turn agent behavior over a stateful world.
//!
//! Static prompt/answer evals and single tool-call checks miss production
//! behavior: multi-turn recovery, hidden world state, invalid action handling,
//! escalation, refusal, and state preservation across calls. A scenario
//! closes that gap. It declares a seeded hidden world, the transitions that
//! mutate it, the transitions that are forbidden, and the deterministic
//! oracles (golden trajectory, expected final state, assertions). The engine
//! replays a recorded trajectory of tool calls against that world and reports
//! the final-state diff, invalid actions, forbidden transitions, recovery
//! attempts, escalations, refusals, and cost.
//!
//! The engine is deterministic and never calls a model, so the same report
//! comes from a cassette in CI as from a live run; the cassette path is the
//! recommended CI tier. See [`engine::run_scenario`] for the replay and
//! [`engine::report_envelope`] for the assertion target object.

pub mod engine;
pub mod model;
pub mod world;

pub use engine::{report_envelope, run_scenario};
pub use model::{
    EffectKind, EffectOp, EscalationSignals, ForbiddenHit, ForbiddenRule, GoldenOutcome,
    GoldenTrajectory, GuardKind, GuardOp, InvalidAction, InvalidKind, Scenario, ScenarioAction,
    ScenarioReport, StateMismatch, TextSignals, Trajectory, Transition,
};
pub use world::{diff, get_path, StateChange};
