ainl-mission 0.1.0

Host-neutral mission engine: state machine, DAG, scheduler, stall, task ledger (zero armaraos-* deps)
Documentation
//! # ainl-mission
//!
//! Host-neutral **mission substrate** engine: lifecycle state machine, feature DAG scheduling,
//! stall detection, semantic task ledger, milestone validation, and git snapshot helpers.
//!
//! Wire types live in [`ainl_contracts`]; persistence uses [`ainl_memory`] graph nodes.
//! This crate has **no** `armaraos-*` or `openfang-*` dependencies — hosts implement
//! [`MissionLifecycle`], [`MissionEventSink`], and [`MissionCapability`].
//!
//! ## Modules
//!
//! - [`state_machine`] — pure [`MissionState`](ainl_contracts::MissionState) transitions
//! - [`dag`] — topological layers and cycle detection (Kahn)
//! - [`scheduler`] — file-overlap greedy coloring (`coding-domain` feature, default on)
//! - [`stall`] — progress thresholds for orchestrator takeover
//! - [`lifecycle`] — [`MissionLifecycle`] trait for hosts
//! - [`task_ledger`] — Facts / Guesses / Plan as tagged semantic nodes
//! - [`events`] — [`MissionEventSink`] trait
//! - [`validation`] — milestone scrutiny and assertion failure handling
//! - [`git_snapshot`] — repo toplevel + stash snapshot via injected shell
//! - [`capability`] — [`MissionCapability`] gating trait
//!
//! ## Features
//!
//! - **`coding-domain`** (default): enables [`scheduler`] for `touches_files` conflict partitioning.

#![forbid(unsafe_code)]

pub mod capability;
pub mod dag;
pub mod events;
pub mod git_snapshot;
pub mod lifecycle;
pub mod stall;
pub mod state_machine;
pub mod task_ledger;
pub mod validation;

#[cfg(feature = "coding-domain")]
pub mod scheduler;

pub use capability::MissionCapability;
pub use dag::{detect_cycle, topological_layers, DagError};
pub use events::{MissionEventError, MissionEventSink};
pub use git_snapshot::{
    apply_snapshot, create_snapshot, resolve_repo_toplevel, GitSnapshotError, ShellOutput,
    SnapshotApplyResult,
    ShellRunner,
};
pub use lifecycle::{MissionLifecycle, MissionLifecycleError};
pub use stall::{is_stalled, StallConfig, StallProgressSource};
pub use state_machine::{
    can_transition, transition, StateMachineError, ValidTransition,
};
pub use task_ledger::{read_ledger, write_fact, write_guess, write_plan, LedgerKind, TaskLedgerError};
pub use validation::{
    build_scrutiny_features, build_user_testing_features, build_validation_plan,
    on_assertion_failed, propose_fix_for_blocking_issue, scrutiny_feature_id,
    should_inject_validation_phase, AssertionFailureAction, ValidationPlan,
};

#[cfg(feature = "coding-domain")]
pub use scheduler::{files_overlap, partition_layer, SchedulerError};

/// Crate version aligned with workspace publishing.
pub const CRATE_VERSION: &str = env!("CARGO_PKG_VERSION");