src/release/mod.rs
//! Release gates, publish-order walker, deploy.
//!
//! Each gate is a free function returning `Result<()>`. Generated
//! release binaries call them in the order defined in
//! `workspace_holger/release/SPEC.md`.
//!
//! ## What lives here vs. in the shared leaf
//! The release READ MODEL (model/doctor/gate/depdag/edition/graph_math/registry/
//! semantic_blast/api_skew/source_drift/progress) lives ONCE in the
//! `nornir-release-core` edda leaf — a single implementation the `dwarves` forge,
//! the `nornir` CLI and `nornir-server` all share, so it cannot re-fork. It used to
//! live inside the forge and nornir path-dep'd `dwarves` to reach it; that edge made
//! `nornir → dwarves → nornir` a cargo cycle, which is why the forge could never
//! compile nornir in. nornir now names no forge crate at all, and reaches the forge
//! only over gRPC.
//!
//! The CONSTRUCTIVE engine (publish/promote/ramp/rehearse/preflight/undo and the
//! manifest mutators) stays with the forge — nornir never invokes it in-process.
//!
//! What STAYS in nornir is the KNOWLEDGE + nornir-owned quality side, reading from
//! the Mimir warehouse: [`doctor`] (nornir-only cross-check helpers), [`gate`]
//! (nornir's coverage/tests/docs/semantic-link/core-saturation gates), [`pipeline`]
//! (the release HISTORY/lineage half), [`progress`], [`regression`] (the `release
//! trace` bisect over `release_lineage`), and [`stage`].
pub mod doctor;
pub mod gate;
pub mod pipeline;
pub mod regression;
pub mod stage;
/// Release-run progress ledger — **owned by `dwarves`**, consumed here.
///
/// This was a byte-identical COPY of `nornir_release_core::progress`
/// (md5 `fdeab15263c9f0188d7da2ec2fc53745`) — a copied-not-moved twin, which the
/// reuse-first law forbids. The copy is DELETED (move=delete); the one
/// implementation lives in the repo that OWNS the release operation, and nornir
/// re-exports it so every `crate::release::progress::…` call site (the pipeline
/// writer, the `nornir-server` SSE/gRPC progress tail) resolves unchanged.
///
/// Direction check: this adds NO crate edge toward the forge — the ledger lives in
/// the `nornir-release-core` edda leaf that both nornir and the forge consume, which
/// is how `gate::semantic_link_gate` and `doctor`'s re-exports reach it too.
pub use nornir_release_core::progress;
// NOTE: `release_moved_banner()` — the deprecation banner for the release ACT
// verbs — was DELETED here (shrink plan Tier-1 debt paydown). The release ACT
// CLI verbs (build/publish/gate/prepare) and `BrokkrOp` had already been removed
// (only the read-only lineage verbs — Trace/Events/ImpactedCrates — remain in
// `ReleaseOp`, and those stay in nornir), leaving the banner an unreferenced
// dead `&'static str` with no callers, tests, or doc-links. Orchestration lives
// in `dwarves release`.