arcature-cli 2026.1.1

Developer lifecycle CLI for Arcature applications.
Documentation
[package]
name = "arcature-cli"
version = "2026.1.1"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
readme = "README.md"
documentation = "https://docs.rs/arcature-cli"
description = "Developer lifecycle CLI for Arcature applications."
categories = ["command-line-utilities", "development-tools"]
keywords = ["arcature", "cli", "axum", "inertia", "vite"]

[package.metadata.arcature]
publish = true
role = "subsystem"
release-unit = "arcature-cli"

[dependencies]
# `arcature-build` provides the canonical UAG schema types the CLI
# deserializes the metadata binary's JSON output into. The `uag-schema`
# feature is the serde-only subset (schema types + version constant +
# serde/serde_json) with NO `arcature` runtime dependency (AGENTS.md §16
# standalone-first): the CLI shells out to the app's `arcature-metadata`
# binary and reads the canonical `arcature_build::uag::Uag` directly,
# retiring the hand-maintained `MetadataArtifact` mirror so the schema lives
# in exactly one place (ADR-0006 §2: "Same graph everywhere"). `default-
# features = false` keeps the build-script `compile()` path off (the CLI
# does not run a build script and must not pull `arcature` here).
arcature-build = { path = "../arcature-build", version = "~2026.1.0", default-features = false, features = ["uag-schema"] }
arcature-db = { path = "../arcature-db", version = "~2026.1.0" }
arcature-observe = { path = "../arcature-observe", version = "~2026.1.0" }
# AP2.1-6: `arc db lint` delegates migration classification to
# `arcature-data::classify`. `arcature-data` is a `core` release-unit member
# (publish = true) that re-uses `arcature-db`'s certified SeaORM/SQLx surface
# and adds zero new external dependencies. The CLI uses only its deterministic,
# database-free lint classifier (no connection, no env access).
arcature-data = { path = "../arcature-data", version = "~2026.2.0" }
arcature-templates = { path = "../arcature-templates", version = "~2026.1.0" }
# AP2.1-7: the `arcature` facade for the system-check framework
# (`SystemCheck` trait + `FRAMEWORK_CHECKS` slice + `system_check::run`).
# `default-features = false` keeps the CLI's compile graph minimal — only the
# always-on `system_check` module is needed. `serde` exposes the JSON view
# types (`SystemCheckReportJson`) for `arc doctor --checks --json`.
# `observe` compiles in the `SpanContractCheck` so the framework's own
# span-name contract is self-diagnosed. All three are workspace crates
# already in the graph (axum/tower/arcature-observe are workspace-vetted);
# no new external crate (AGENTS.md §8). The dependency direction is
# cli → facade, which is the normal dev-tool direction (the CLI is not a
# runtime hot-path dependency of an application). `arcature-cli` is its own
# release unit (distinct from `core`), so the requirement is a cross-unit
# tilde `~YEAR.BREAK.0`, NOT an exact `=V` (exact couples independent units
# and is reserved for the `core`-internal `arcature → arcature-dx` lock;
# ADR-0005 invariant 5 / RV2 rule 7).
arcature = { path = "../arcature", version = "~2026.2.0", default-features = false, features = ["serde", "observe"] }
clap.workspace = true
serde.workspace = true
serde_json.workspace = true
sha2.workspace = true
tokio.workspace = true
toml.workspace = true

[dev-dependencies]
# `tempfile` for the UAG-load unit tests (unique auto-cleaning temp
# directories for fixture manifests). Already a workspace dependency
# (Phase 5 storage); test-only, never enters a production path. Internal
# workspace reuse — no new external admission.
tempfile.workspace = true

[lints]
workspace = true

[lib]
path = "src/lib.rs"

[[bin]]
name = "arc"
path = "src/main.rs"

[[test]]
name = "project_generation"
path = "tests/project_generation/project_generation.rs"

[[test]]
name = "script_execution"
path = "tests/script_execution/script_execution.rs"

[[test]]
name = "dev_lifecycle"
path = "tests/dev_lifecycle/dev_lifecycle.rs"

[[test]]
name = "command_lifecycle"
path = "tests/command_lifecycle/command_lifecycle.rs"

[[test]]
name = "install_lifecycle"
path = "tests/install_lifecycle/install_lifecycle.rs"

[[test]]
name = "uag_read_path"
path = "tests/uag_read_path/uag_read_path.rs"