nornir 0.4.54

Companion to cargo: dependency tracking, release gating, deploy, benchmarks, and documentation assembly. Project-agnostic.
//! Urðr Threads — egui time-travel visualizer for the warehouse.
//!
//! Reads (read-only) the `release_lineage` and `dep_graph_edges`
//! tables and paints each repo as a swim-lane along the release
//! timeline. Cross-repo dep edges from the snapshot pinned to a
//! release are drawn as woven threads between lanes (the literal
//! Norns motif).
//!
//! Pure Rust — eframe over glow on Linux/macOS/Windows. No JS,
//! no WebView, no C deps beyond the platform windowing libs that
//! eframe already brings in.
//!
//! Enable with the `viz` feature; the binary lives at
//! `src/bin/urdr-threads.rs`.

// The pure data model (no egui) is also compiled for the `server` build so the
// `Viz.Timeline` RPC can reuse `build_timeline`. The egui app + its tabs are
// `viz`-only.
pub mod model;
pub use model::{build_timeline, load_timeline, Lane, LaneNode, Timeline};

// Data-only diagram renderers (static SVG / Markdown over the `Timeline` model,
// no egui) — compiled alongside `model` so docs/server/CLI can render the viz
// diagrams headlessly.
pub mod diagram;

// Pure (no-egui) dependency-graph layout + edge classification — the data core
// behind the 🔗 Dep Graph renderer (deep transitive closure, direct-vs-transitive
// classification, click-collapse). Compiled alongside `model` (server build too)
// so the closure / classification logic is unit-testable and the laid-out graph
// structure can be folded into `state_json` (LAW #6).
pub mod depgraph_layout;

// The robot-UI-tester control channel (the drive-half). No egui — just the tiny
// command-file contract the running viz polls and the `viz.click` MCP tool
// writes. Compiled in every build (incl. the `nornir-mcp` binary, which writes
// commands) so both sides share the same `VizCommand` type + path resolution.
pub mod control;

#[cfg(feature = "viz")]
pub mod action_log; // TOTAL user-action log (ring + stderr + /tmp file + durable
                    // warehouse `viz_actions` sink, N5). Public so the headless
                    // inject-assert test can drive it end-to-end.
#[cfg(feature = "viz")]
pub mod preflight;
#[cfg(feature = "viz")]
mod app;
#[cfg(feature = "viz")]
pub mod arch_tab; // 🏛 EPIC ARCH wiring board drawn natively in egui; its
// `ArchPayload` serde shape is shared with `remote::fetch_architecture` (the RPC).
#[cfg(feature = "viz")]
mod callgraph;
#[cfg(feature = "viz")]
mod funnel_tab;
#[cfg(feature = "viz")]
pub mod funnel3d; // rotating 3-D funnel-plan view (sphere/helix/force); asserted by viz_funnel3d
#[cfg(feature = "viz")]
mod funnel_view;
#[cfg(feature = "viz")]
pub mod graph; // DepGraphView + its memoized closure are asserted by the perf matrix test
#[cfg(feature = "viz")]
pub mod graph_render; // SHARED pan/zoom graph renderer (arch board + 🧬 release
                      // dashboard) — domain-agnostic, a future facett-graphview.
#[cfg(feature = "viz")]
pub mod gate; // SHARED Gate / Doctor model + gate_json — reused by the 🚀 Release
              // pane AND the 🧬 nornir RELEASE DASHBOARD.
#[cfg(feature = "viz")]
pub mod nornir_dashboard; // 🧬 the RELEASE DASHBOARD (Release button + gate-overlaid
                          // dependency graph + node→history), built on graph_render.
#[cfg(feature = "viz")]
pub mod release_wizard; // 🧙 the guided, gated RELEASE WIZARD the dashboard's Release
                        // button opens — orchestrates doctor/stage/promote as gates.
#[cfg(feature = "viz")]
pub mod knowledge;
#[cfg(feature = "viz")]
mod ops_tabs;
#[cfg(feature = "viz")]
pub mod nornir_tab; // 🧬 the `nornir` root pane (server + workspace lifecycle
                    // operations). Public so the headless viz test matrix drives
                    // its NornirRootView + state_json directly.
#[cfg(feature = "viz")]
mod bench_live;
#[cfg(feature = "viz")]
mod coverage_live;
#[cfg(feature = "viz")]
mod security_tab;
#[cfg(feature = "viz")]
mod live;
#[cfg(feature = "viz")]
mod release_tab;
#[cfg(feature = "viz")]
mod test_tab;
#[cfg(feature = "viz")]
pub mod facett_theme; // ported facett palette family (egui-0.33 vendored) — the
                      // Test pane's switchable themes + status/health ramps.
#[cfg(feature = "viz")]
pub mod facett_ui; // generic, non-nornir-specific viz widgets (status chips,
                   // badges, sparklines, zebra rows, health pill, graph node) —
                   // factored out of the panes, palette-driven, facett-bound when
                   // egui aligns (D3). See .nornir/theming-and-facett-migration.md.
// Pure matrix model behind the 🧪 Test pane (no egui) — repos × aspects grid,
// per-repo health, per-aspect sparkline series. Public so headless tests assert it.
pub mod test_matrix_grid;
#[cfg(feature = "viz")]
mod leaderboard_tab;
#[cfg(feature = "viz")]
pub mod remote; // gRPC thin-client (list_workspaces / fetch_timeline / fetch_tables /
                // scan_table) — public so the headless viz test matrix can drive it.
#[cfg(feature = "viz")]
mod timetravel;
#[cfg(feature = "viz")]
pub mod trace; // structured IN/OUT/END event stream ($NORNIR_VIZ_TRACE) — the
               // machine-readable data the UI actually rendered.
#[cfg(feature = "viz")]
mod mcp_tab;
#[cfg(feature = "viz")]
mod warehouse_tab;
#[cfg(feature = "viz")]
pub mod manual_tab; // 📖 nornir's own manual, rendered from docs/book-svg/ via
                    // the facett-docview vector viewer (multi-core resvg).
// 📦 Holger registry pane — the built-in (married) holger dev pair (/cache +
// /sparring) read via holger's IN-PROCESS functional API. Only compiled when
// holger is actually embedded (the `embed-holger` feature); the 📦 tab degrades
// to a short note otherwise.
#[cfg(all(feature = "viz", feature = "embed-holger"))]
pub mod holger_tab;

#[cfg(feature = "viz")]
pub use app::{client_build, UrdrThreadsApp};