crates/jera/src/lib.rs
//! # jera — the shared infra runtime
//!
//! The non-UI runtime lifted out of nornir so both **nornir** and **korp** depend
//! on one lean crate instead of pulling each other's dep trees (no dep-hell):
//!
//! - [`jobs`] — the durable **job ledger / engine**: the one redb list of every
//! long-running operation (`running → done|failed` + timing), with a fat-client
//! (local `jobs.redb`) or thin-client (submit-over-a-sink) [`jobs::JobSink`].
//! - [`container`] — a **no-shell container runtime** routed THROUGH **draupnir**'s
//! ONE OCI engine: bring a container up, stream its logs, tear it down
//! ([`container::DraupnirContainerBootRunner`]) — and [`container::run_container`],
//! "run a container **as a job**" (via `draupnir::container::run_to_completion`).
//! No `std::process::Command`, no CLI shell-out, and no second engine here.
//! - [`vm`] — a **no-shell KVM/VM boot** seam: map a [`vm::BootSpec`] onto
//! **draupnir**'s KVM backend (which drives tunnr) and run its lifecycle as a job.
//! jera never calls tunnr directly — instance-firing lives in draupnir.
//! - [`boot`] — the engine-agnostic boot lifecycle shared by the container/VM/exe
//! runners ([`boot::BootStatus`], [`boot::BootProc`]) and the job-bound
//! [`boot::BootJobs`] manager — the reusable "start X as a tracked job" engine.
//! - [`policy`] — the thin [`policy::JobPolicy`] classification (`Process | Vm |
//! Container`): a job is one of three kinds, and the `Vm`/`Container` kinds
//! **delegate instance-firing to draupnir**. jera keeps only job policy.
//!
//! [bollard]: https://docs.rs/bollard
pub mod jobs;
#[cfg(feature = "runners")]
pub mod boot;
#[cfg(feature = "runners")]
pub mod container;
pub mod policy;
#[cfg(feature = "runners")]
pub mod vm;
pub mod agent;
/// The gRPC wire for the multi-machine agent scheduler (feature `agent-grpc`).
#[cfg(feature = "agent-grpc")]
pub mod agent_grpc;
pub use policy::JobPolicy;