pub struct HealthSummary {
pub stale_entities: Vec<StaleEntity>,
pub missing_fields: Vec<HealthReport>,
pub orphan_count: usize,
pub stub_count: usize,
pub warnings: Vec<WarningHint>,
pub dangling_links: Option<Vec<DanglingLink>>,
pub findings: Option<Vec<IntegrityFinding>>,
pub tag_distribution: Option<Vec<TagDistribution>>,
pub tag_distribution_folded: Option<Vec<FoldedTag>>,
pub untagged_entities: Option<UntaggedStats>,
}Expand description
Aggregated health report for the whole graph.
Fields§
§stale_entities: Vec<StaleEntity>§missing_fields: Vec<HealthReport>§orphan_count: usize§stub_count: usize§warnings: Vec<WarningHint>Typed non-fatal issues visible to every caller of Engine::health().
Populated in two layers: Engine.load_warnings contributes drift
warnings surfaced during mem load / reload / attach
(SuspiciousNestedPrefix, future load-time checks); the MCP
handler additionally appends request-scoped warnings (unknown
include keys, clamped limit) on top of whatever the engine
merged. Empty on the happy path.
dangling_links: Option<Vec<DanglingLink>>Inline wiki-links in entity section bodies that resolve to stub
targets (no on-disk markdown file). Populated only when the caller
opts in via include=["dangling_links"]; None otherwise, so
absence-of-key means “not requested” and presence-of-empty-array
means “requested, zero findings”. Scan is handler-driven (same
pattern as warnings above), so non-MCP callers of
Engine::health() always see None unless they invoke
health::collect_dangling_links directly.
findings: Option<Vec<IntegrityFinding>>Integrity findings ({ id, axis, code, detail }) over the
conformance axis — and, under include=["integrity"], the
consistency axis too. Populated only when the caller opts in
via include=["conformance"] / include=["integrity"];
None otherwise (same handler-driven pattern as
dangling_links: absence means “not requested”, an empty
array means “requested, fully integral”).
tag_distribution: Option<Vec<TagDistribution>>Tag distribution (count per distinct tag, case-sensitive) over non-stub
entities. Populated only when the caller opts in via include=["tags"].
Case-variant drift is surfaced via the sibling field [tag_distribution_folded].
tag_distribution_folded: Option<Vec<FoldedTag>>Case-drift audit sidecar: entries where two or more casings of the same
canonical tag (lowercase) both appear in authored tags. Only entries with
variants.len() > 1 are returned — the default read of tag_distribution
stays untouched. Populated alongside tag_distribution.
untagged_entities: Option<UntaggedStats>Count of non-stub entities whose tags metadata is missing, empty,
or resolves to zero effective tags after splitting on , and trimming.
Populated alongside tag_distribution when include=["tags"].
Trait Implementations§
Source§impl Clone for HealthSummary
impl Clone for HealthSummary
Source§fn clone(&self) -> HealthSummary
fn clone(&self) -> HealthSummary
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for HealthSummary
impl Debug for HealthSummary
Source§impl Serialize for HealthSummary
impl Serialize for HealthSummary
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for HealthSummary
impl RefUnwindSafe for HealthSummary
impl Send for HealthSummary
impl Sync for HealthSummary
impl Unpin for HealthSummary
impl UnsafeUnpin for HealthSummary
impl UnwindSafe for HealthSummary
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<T> Fruit for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more