Skip to main content

ainl_mission/
lib.rs

1//! # ainl-mission
2//!
3//! Host-neutral **mission substrate** engine: lifecycle state machine, feature DAG scheduling,
4//! stall detection, semantic task ledger, milestone validation, and git snapshot helpers.
5//!
6//! Wire types live in [`ainl_contracts`]; persistence uses [`ainl_memory`] graph nodes.
7//! This crate has **no** `armaraos-*` or `openfang-*` dependencies — hosts implement
8//! [`MissionLifecycle`], [`MissionEventSink`], and [`MissionCapability`].
9//!
10//! ## Modules
11//!
12//! - [`state_machine`] — pure [`MissionState`](ainl_contracts::MissionState) transitions
13//! - [`dag`] — topological layers and cycle detection (Kahn)
14//! - [`scheduler`] — file-overlap greedy coloring (`coding-domain` feature, default on)
15//! - [`stall`] — progress thresholds for orchestrator takeover
16//! - [`lifecycle`] — [`MissionLifecycle`] trait for hosts
17//! - [`task_ledger`] — Facts / Guesses / Plan as tagged semantic nodes
18//! - [`events`] — [`MissionEventSink`] trait
19//! - [`validation`] — milestone scrutiny and assertion failure handling
20//! - [`git_snapshot`] — repo toplevel + stash snapshot via injected shell
21//! - [`capability`] — [`MissionCapability`] gating trait
22//!
23//! ## Features
24//!
25//! - **`coding-domain`** (default): enables [`scheduler`] for `touches_files` conflict partitioning.
26
27#![forbid(unsafe_code)]
28
29pub mod capability;
30pub mod dag;
31pub mod events;
32pub mod git_snapshot;
33pub mod lifecycle;
34pub mod stall;
35pub mod state_machine;
36pub mod task_ledger;
37pub mod validation;
38
39#[cfg(feature = "coding-domain")]
40pub mod scheduler;
41
42pub use capability::MissionCapability;
43pub use dag::{detect_cycle, topological_layers, DagError};
44pub use events::{MissionEventError, MissionEventSink};
45pub use git_snapshot::{
46    apply_snapshot, create_snapshot, resolve_repo_toplevel, GitSnapshotError, ShellOutput,
47    SnapshotApplyResult,
48    ShellRunner,
49};
50pub use lifecycle::{MissionLifecycle, MissionLifecycleError};
51pub use stall::{is_stalled, StallConfig, StallProgressSource};
52pub use state_machine::{
53    can_transition, transition, StateMachineError, ValidTransition,
54};
55pub use task_ledger::{read_ledger, write_fact, write_guess, write_plan, LedgerKind, TaskLedgerError};
56pub use validation::{
57    build_scrutiny_features, build_user_testing_features, build_validation_plan,
58    on_assertion_failed, propose_fix_for_blocking_issue, scrutiny_feature_id,
59    should_inject_validation_phase, AssertionFailureAction, ValidationPlan,
60};
61
62#[cfg(feature = "coding-domain")]
63pub use scheduler::{files_overlap, partition_layer, SchedulerError};
64
65/// Crate version aligned with workspace publishing.
66pub const CRATE_VERSION: &str = env!("CARGO_PKG_VERSION");