nornir 0.5.0

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;

// Cross-workspace coverage-metrics grid → self-contained static SVG (S6 step 5).
// No egui — a hand-emitted SVG over `autonom::megagate::MegaGateReport`, compiled
// alongside `model` (server build too) so the CLI / docs / server can render the
// cross-workspace completeness dashboard headlessly, and the matrix asserts it.
pub mod coverage_metrics_svg;

// 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")]
pub mod metro_feed; // 🚇 PURE producer: nornir arch::metro chains + surface_coverage
                    // → facett-graphview MetroMap (the S5b feed for the Metro tab).
                    // Public so the headless `tests/metro_feed.rs` drives it directly.
#[cfg(feature = "viz")]
pub mod metro_tab;  // 🚇 the Metro tab pane — hosts facett-graphview::MetroView,
                    // fed the producer's MetroMap. Public so the matrix drives it.
#[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")]
pub mod repo_pane; // 🔁 SHARED per-repo pane empty-state + auto-refresh helper:
                   // the LAW-2 empty-state classifier (in-route vs not-scanned, from
                   // the live Viz.Jobs snapshot) + the `should_refetch` throttle that
                   // replaces every pane's sticky `loaded` latch. Public so the
                   // headless matrix drives `classify_empty`/`should_refetch` directly.
#[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, Tab, UrdrThreadsApp};

// 🧭 LAW 9 (UI-PLANE reachability): nornir-viz modelled as a `UiPlan` (plane per
// Tab) + a native `PlaneDriver` over the live app + the wasm/deployed driver seam.
// The worked example that proves `nornir_testmatrix::uiplane`.
#[cfg(feature = "viz")]
pub mod uiplane_plan;

// 🧭 S3c — the PANE DISCOVERY REGISTRY (`viz_surfaces()`): the formal, stable
// enumeration of every addressable viz surface (one per `Tab::ALL` + the 🧬 tab's
// populate_status/jobs sub-panels) that the atom-walk + functional matrix walk,
// superseding `Tab::ALL` + ad-hoc `state_json` slicing.
#[cfg(feature = "viz")]
pub mod surfaces;