Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/edda

crates/nornir-release-ledger/src/lib.rs

//! # `nornir-release-ledger` — the ONE definition of the release warehouse tables
//!
//! The three release tables — `release_lineage` (a release's *outcome* per
//! `(release, repo)`), `release_events` (its *shape*: the op DAG) and
//! `release_changes` (the reversible before-state ledger `undo` walks) — are
//! written and read from BOTH sides of the nordisk release seam:
//!
//!  * the **warehouse owner** (nornir) creates the tables, serves the read RPCs
//!    and hosts the viz panes over them;
//!  * the **release orchestrator** (dwarves) emits the rows while it runs a
//!    release.
//!
//! `dwarves → nornir` may not become a crate edge on the nornir umbrella, so for
//! a while both halves carried their own hand-maintained COPY of the schema and
//! the Arrow codec. That is the most dangerous kind of duplicate there is: both
//! copies write into the **same** warehouse, so a column added to one and not the
//! other yields mutually incompatible tables and **nothing fails at compile
//! time**. PRE-PROMPT L5/L5a resolves it — the shape + codec is a primitive a
//! third consumer would want as-is, so it lives ONCE, here, in an edda leaf, and
//! both conductors consume it.
//!
//! ## What is here
//!  * [`schema`] — the canonical `iceberg::spec::Schema` builders + table names.
//!  * [`release_events`] — [`ReleaseEventRow`](release_events::ReleaseEventRow),
//!    the monotonic-`seq` [`ReleaseEventEmitter`](release_events::ReleaseEventEmitter)
//!    (sync + async emit), the append/query pair, and the JSON + topo renderers.
//!  * [`release_changes`] — [`ChangeKind`](release_changes::ChangeKind) /
//!    [`ReleaseChange`](release_changes::ReleaseChange), the
//!    [`ChangeRecorder`](release_changes::ChangeRecorder), the sha256 payload
//!    canonicalisation, and the append/query pair.
//!  * [`testkit`] (feature `testkit`) — the ONE in-memory `Warehouse` test
//!    double for the seam.
//!
//! ## What is NOT here
//! Everything domain: the release DAG/gates/publish (the orchestrator's), and
//! table creation, catalog lifecycle, the RPC surface and the viz (the warehouse
//! owner's). This leaf is the *shape and the codec*, nothing else — it names only
//! the [`nornir_warehouse_trait::Warehouse`] seam, never a concrete engine.

pub mod release_changes;
pub mod release_events;
pub mod schema;
#[cfg(feature = "testkit")]
pub mod testkit;