Skip to main content

nexcore_anatomy/
lib.rs

1//! # NexVigilant Core — anatomy
2//!
3//! Structural anatomy analysis for Rust workspaces — dependency graph metrics,
4//! layer classification, boundary violation detection, criticality scoring,
5//! and health reporting.
6//!
7//! ## Primitive Foundation
8//! - σ (Sequence): Topological ordering, layer hierarchy
9//! - μ (Mapping): Crate → layer/score/node classification
10//! - κ (Comparison): Ranking, threshold-based tier assignment
11//! - ∂ (Boundary): Layer boundaries, violation detection
12//! - ρ (Recursion): Cycle detection in dependency graph
13//! - N (Quantity): Fan-in/out counts, criticality scores, density
14//! - Σ (Sum): Aggregation of metrics across workspace
15//! - π (Persistence): Serializable reports
16//!
17//! ## Architecture (Chomsky Level: Type-1)
18//!
19//! The dependency graph is a DAG analyzed via Kahn's algorithm (σ + ρ).
20//! Layer classification adds context-sensitivity (κ) for boundary enforcement.
21//! Generators used: {σ, Σ, ρ, κ} → Type-1 (context-sensitive validation).
22//!
23//! ## Usage
24//!
25//! ```no_run
26//! use nexcore_anatomy::{DependencyGraph, LayerMap, WorkspaceMetrics, AnatomyReport};
27//!
28//! // Build from cargo metadata
29//! let metadata = cargo_metadata::MetadataCommand::new().exec().unwrap();
30//! let graph = DependencyGraph::from_metadata(&metadata);
31//! let report = AnatomyReport::from_graph(graph);
32//!
33//! println!("Health: {}", report.summary.health.label());
34//! println!("Violations: {}", report.summary.violation_count);
35//! println!("Bottleneck: {} (fan-in: {})", report.summary.bottleneck, report.summary.max_fan_in);
36//! ```
37
38#![forbid(unsafe_code)]
39#![warn(missing_docs)]
40#![cfg_attr(
41    not(test),
42    deny(clippy::unwrap_used, clippy::expect_used, clippy::panic)
43)]
44#![allow(
45    clippy::disallowed_types,
46    reason = "Anatomy analysis uses standard collections for graph representation"
47)]
48#![allow(
49    clippy::arithmetic_side_effects,
50    clippy::as_conversions,
51    clippy::indexing_slicing,
52    reason = "Static analysis involves frequent metric calculations and indexing"
53)]
54#![allow(
55    clippy::iter_over_hash_type,
56    reason = "Deterministic iteration not required for most graph summary metrics"
57)]
58
59pub mod blast_radius;
60pub mod chomsky;
61pub mod graph;
62pub mod layer;
63pub mod metrics;
64pub mod report;
65
66/// Prelude for convenient imports.
67pub mod prelude {
68    pub use crate::blast_radius::{BlastRadius, BlastRadiusReport};
69    pub use crate::chomsky::{ChomskyLevel, ChomskyReport, CrateChomskyProfile, Generator};
70    pub use crate::graph::{CrateNode, DependencyGraph};
71    pub use crate::layer::{BoundaryViolation, Layer, LayerMap};
72    pub use crate::metrics::{CriticalityScore, CriticalityTier, WorkspaceMetrics};
73    pub use crate::report::{AnatomyReport, HealthStatus, ReportSummary};
74}
75
76// Re-export primary types at crate root.
77pub use blast_radius::{BlastRadius, BlastRadiusReport};
78pub use chomsky::{ChomskyLevel, ChomskyReport, CrateChomskyProfile, Generator};
79pub use graph::{CrateNode, DependencyGraph};
80pub use layer::{BoundaryViolation, Layer, LayerMap};
81pub use metrics::{CriticalityScore, CriticalityTier, WorkspaceMetrics};
82pub use report::{AnatomyReport, HealthStatus, ReportSummary};