Skip to main content

ImpactClosureFacts

Struct ImpactClosureFacts 

Source
pub struct ImpactClosureFacts {
    pub affected_count: usize,
    pub affected_not_shown: Vec<String>,
    pub affected_by_dir: Vec<AffectedDirectory>,
    pub affected_by_dir_omitted: usize,
    pub coordination_gap: Vec<CoordinationGapFact>,
    pub co_change_gap: Vec<CoChangeGapFact>,
    pub co_change_gap_count: usize,
    pub search_gap: Option<SearchGapFacts>,
}
Expand description

Stage 3 of the brief: the impact closure. The transitive affected-but-not-in-diff set plus the coordination gap. The differentiator a diff tool fundamentally cannot do, because it has no graph.

Honest scope (ADR-001, syntactic): the coordination gap is an attention pointer at the exact inter-module failure mode, NOT a correctness proof.

Fields§

§affected_count: usize

The FULL number of files transitively affected by the changeset (reverse-deps + re-export chains) that are NOT in the diff. Computed BEFORE affected_not_shown is capped to a sample, so it is always the true magnitude of the blast radius.

§affected_not_shown: Vec<String>

A capped, path-sorted sample of the affected root-relative paths (at most AFFECTED_SAMPLE_CAP), deduped. The full count lives in affected_count and the distribution in affected_by_dir; use this list to jump to representative files, NEVER to enumerate the blast radius or to infer its shape. Because it is a prefix of the sorted set, it clusters in whichever directory sorts first. To reconstruct the full set, run fallow check --impact-closure <path> once per changed file and union the results: that flag seeds from a single file, so no single command reproduces this changeset-wide union.

§affected_by_dir: Vec<AffectedDirectory>

The blast radius rolled up by parent directory: how the affected files distribute, heaviest directory first, ties broken by directory path so the order is deterministic. This is the SHAPE signal, and unlike affected_not_shown its counts are exact for every directory it lists. At most AFFECTED_DIR_CAP entries.

§affected_by_dir_omitted: usize

How many directories did not fit within AFFECTED_DIR_CAP and are absent from affected_by_dir. They are the lightest ones; their files are still counted in affected_count. Zero when nothing was omitted. Add this to affected_by_dir.len() for the true number of directories the change reaches.

§coordination_gap: Vec<CoordinationGapFact>

Coordination gaps: a changed file exports a contract consumed by a module absent from the diff. One entry per (changed file, consumer) pair. NOT a subset of affected_not_shown: the gap deliberately skips story and test consumers that the affected set counts.

§co_change_gap: Vec<CoChangeGapFact>

Co-change gaps: a changed file has a hidden change-coupling partner that is absent from the diff. The two files changed together in most commits of the history window, but no import or re-export chain connects them, so the graph facts above cannot point at the partner. Advisory, never gates. Omitted when empty. At most 10 entries (CO_CHANGE_GAP_CAP), strongest degree first.

§co_change_gap_count: usize

All co-change gaps, before the cap cuts co_change_gap. Omitted when zero.

§search_gap: Option<SearchGapFacts>

Consumers that a whole-word text search for a changed export name does not find (missed), or finds only under another local name (renamed). Only exports whose declaration statement overlaps an added diff line count, and only consumers outside the diff. Absent when no such consumer exists.

Implementations§

Source§

impl ImpactClosureFacts

Source

pub fn set_co_change_gaps(&mut self, gaps: &[CoChangeGapFact])

Set the co-change gaps: keep the first CO_CHANGE_GAP_CAP entries and record the full count.

Source

pub fn new( affected: &[String], coordination_gap: Vec<CoordinationGapFact>, ) -> Self

Build the facts from the full closure, capping the file sample and the directory rollup while preserving the exact total.

affected must arrive deduped and path-sorted (the engine closure guarantees both); the sample is its prefix.

Trait Implementations§

Source§

impl Clone for ImpactClosureFacts

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ImpactClosureFacts

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ImpactClosureFacts

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Serialize for ImpactClosureFacts

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<'a, T> FromIn<'a, T> for T

Source§

fn from_in(t: T, _: &'a Allocator) -> T

Converts to this type from the input type within the given allocator.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<'a, T, U> IntoIn<'a, U> for T
where U: FromIn<'a, T>,

Source§

fn into_in(self, allocator: &'a Allocator) -> U

Converts this type into the (usually inferred) input type within the given allocator.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more