pub struct Args {
pub mem_name: String,
pub observations: Option<PathBuf>,
}Expand description
Verify every anchor in a mem against its declared source. Per
anchor: resolves (source present, hash matches), drifted
(present, hash differs, stability says drifted), recheck (hash
differs under unstable, or a hash is missing on either side),
unresolvable (the source artifact is GONE: a measured failure), or
unobserved (the pass could not observe the anchor at all, so
nothing about it was measured) — honestly, never fabricating a
state. The last two shared one bucket until consistency-sweep 03/05,
which is why this surface, the one you reach without a binding,
could not tell a measured failure from an absent measurement. Works
on a hand-authored mem with no binding at all; on a binding-backed
mem it reports the same states the binding verify sees (one shared
resolution mechanism). No entity changes; findings are recorded for
the measured conditions only, since a finding asserts something that
was measured.
A row whose ENTITY the mem no longer holds is reported as dangling,
its own class beside the states above: those describe the artifact
end, and a vanished entity says nothing about the source. Nothing
repairs it. Where the entity end could not be reconciled at all, the
output says so rather than showing clean counts over state it never
examined.
The counts never travel alone: every rendering states the
population they were computed over and whether the axis was
fully_adjudicated, because a resolution figure read on its own is
read as health. A sidecar the engine cannot read is a typed refusal
(ANCHORS_SIDECAR_UNREADABLE, the mem and the parse reason named,
fully_adjudicated: false in its details), never zero rows: nothing
is recorded for a pass that measured nothing.
Fields§
§mem_name: StringWhich mem to verify (by name).
observations: Option<PathBuf>JSON file of observer-supplied observations for the anchors the
engine cannot observe itself (url grain; the engine never fetches).
Either a bare array or {"observations": [...]}; each row is
{"artifact": "<url>", "hash": "<prepared-content hash>" | "content": "<retrieved text>" | "absent": true, "observed_at": "<ISO-8601>"?}
— exactly one of hash / content / absent, observed_at
defaulting to now. content is hashed under the same rule the write
path applies to an anchor’s content. A url row with a supplied
observation adjudicates like a file anchor (equal hash resolves,
differing hash drifted under stable and recheck under
unstable, absent → recheck); a url row without one stays
unobserved. Matched observations are recorded on the sidecar rows
as last_observed, so later runs and every anchor surface show how
long each row has gone unobserved. Rows naming no url anchor of the
mem are reported as unmatched and change nothing. A malformed row
refuses the whole run with INVALID_OBSERVATION before any state
changes.
Trait Implementations§
Source§impl Args for Args
impl Args for Args
Source§fn augment_args<'b>(__clap_app: Command) -> Command
fn augment_args<'b>(__clap_app: Command) -> Command
Source§fn augment_args_for_update<'b>(__clap_app: Command) -> Command
fn augment_args_for_update<'b>(__clap_app: Command) -> Command
Command so it can instantiate self via
FromArgMatches::update_from_arg_matches_mut Read moreSource§impl CommandFactory for Args
impl CommandFactory for Args
Source§impl FromArgMatches for Args
impl FromArgMatches for Args
Source§fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
Source§fn from_arg_matches_mut(
__clap_arg_matches: &mut ArgMatches,
) -> Result<Self, Error>
fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>
Source§fn update_from_arg_matches(
&mut self,
__clap_arg_matches: &ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§fn update_from_arg_matches_mut(
&mut self,
__clap_arg_matches: &mut ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches_mut( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§impl Parser for Args
impl Parser for Args
Source§fn parse_from<I, T>(itr: I) -> Self
fn parse_from<I, T>(itr: I) -> Self
Source§fn try_parse_from<I, T>(itr: I) -> Result<Self, Error>
fn try_parse_from<I, T>(itr: I) -> Result<Self, Error>
Source§fn update_from<I, T>(&mut self, itr: I)
fn update_from<I, T>(&mut self, itr: I)
Auto Trait Implementations§
impl Freeze for Args
impl RefUnwindSafe for Args
impl Send for Args
impl Sync for Args
impl Unpin for Args
impl UnsafeUnpin for Args
impl UnwindSafe for Args
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> 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