arcature-cli 2026.1.1

Developer lifecycle CLI for Arcature applications.
Documentation
//! Application metadata artifact loading and inspection types.
//!
//! The CLI reaches application metadata by shelling out to the app's
//! `arcature-metadata` binary (AGENTS.md §16 standalone-first: the CLI does
//! not depend on the `arcature` runtime). The binary emits the canonical
//! Unified Application Graph (UAG) JSON, which the CLI deserializes directly
//! into [`arcature_build::uag::Uag`] — the single schema type the dev-time
//! path serializes. There is no second hand-maintained mirror: the schema
//! lives in exactly one place (`arcature-build`), so the CLI can never again
//! silently drop UAG fields (ADR-0006 §2: "Same graph everywhere").
//!
//! The `uag-schema` feature of `arcature-build` exposes only the serializable
//! schema types + `serde`/`serde_json` with no `arcature` dependency, so the
//! CLI's dependency tree stays free of the `arcature` facade (verified by a
//! `cargo tree` guard in the `uag_read_path` integration test).
//!
//! Two loaders are exported. [`load`] shells out to `arcature-metadata` (the
//! always-fresh producer invocation) and is consumed by `arc inspect` and the
//! `arc routes` / `arc modules` / `arc services` / `arc schedule` reports.
//! [`load_uag`] is the file-preferred path the MCP server uses: it reads
//! `.arcature/app-manifest.json` when present and falls back to a fresh
//! shell-out, validating the schema version and returning a typed
//! [`SchemaError`] (AGENTS.md §18). This is the no-grep invariant (PROGRAM.md
//! AP2.1-9: MCP reads a serialized artifact, never the source).

mod execute;
mod uag_load;
mod uag_schema;

pub(crate) use arcature_build::uag::Uag;
pub(crate) use arcature_build::uag::schema::{
    CadenceEntry, CommandEntry, FieldShapeEntry, JobEntry, ListenerEntry, ModuleEntry, RouteEntry,
    ScheduleEntry, ServiceEntry,
};
pub(crate) use execute::load;
pub(crate) use uag_load::load_uag;
pub(crate) use uag_schema::SchemaError;