crates/nornir-fleet/Cargo.toml
[package]
name = "nornir-fleet"
version = "0.2.0"
edition = "2021"
rust-version = "1.85"
description = "The full-system-autotest harness: lowers runa's fleet steps (SpinFleetMember / RobotDriveMember / CoverageGate) onto the already-built engines — jera's boot ledger + draupnir OCI to spin the fleet, the per-app robotui/web scenarios to drive it, and nornir-testmatrix's discover::Surface + coverage::GateReport to prove Gap==∅ — with RampGuard-style RAII teardown. The North-Star orchestrator (`.nornir/full-system-autotest-design.md`), fleet-of-one MVP."
license = "MIT OR Apache-2.0"
repository = "https://git.gunnar.rs/nordisk/edda"
keywords = ["autotest", "harness", "coverage", "fleet", "jera"]
categories = ["development-tools", "development-tools::testing"]
exclude = ["/.nornir/"]
[features]
# Lean by default: the harness WIRES against a mock jera backend (FakeBootRunner)
# — no container host needed. `container-oci` forwards jera's real OCI engine
# (draupnir bollard/podman) so the SAME pipeline spins a real container when a
# host is available. jera never rolls a second engine (ROOT LAW / one-provisioner).
default = []
container-oci = ["jera/container-oci"]
[dependencies]
# The authoring layer — the typed pipeline + the three fleet step kinds we lower.
dwarves-runa = { version = "0.3.0", path = "../dwarves-runa" }
# The job/boot control plane — BootJobs (spin a container as a tracked job) +
# ContainerSpec + the BootRunner seam (real DraupnirContainerBootRunner / mock
# FakeBootRunner). Fleet fan-out = jera, never raw threads (ROOT LAW #0).
jera = { version = "0.2.0", path = "../jera" }
# The coverage ledger — discover::Surface (from-data), coverage::GateReport
# (Gap==∅ HARD zero), TestResultRow. REUSED, never twinned.
nornir-testmatrix = { version = "0.2", path = "../nornir-testmatrix" }
# The wire-remote robot-drive channel — CmdJsonClient/CmdJsonServer + the ONE
# robotui Action/Assert/Target/Step vocabulary carried over a byte stream. The fat
# (egui) leg dials a member's mounted CmdJsonServer through this (REUSE: no second
# drive path). `wire` is the lean serde-only channel feature — NO eframe/windowing.
nornir-robotui = { version = "0.4.0", path = "../nornir-robotui", default-features = false, features = ["wire"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
thiserror = "2"
[dev-dependencies]
serde_json = "1"
# The duplex-backed egui-wire integration test stands up a CmdJsonServer over a
# RobotSession driving the demo BumpApp harness — the headless proof of the
# RobotDriveMember → CmdJsonClient path with no container / OCI needed.
egui_kittest = { version = "0.36", default-features = false }