pub struct Classification {
pub point_type: ConvergencePointType,
pub substrate: SubstrateType,
pub horizon: Horizon,
pub calm: CalmClassification,
pub data_classification: DataClassification,
}Expand description
Lattice position of a Process — six orthogonal axes.
Fields§
§point_type: ConvergencePointType§substrate: SubstrateType§horizon: Horizon§calm: CalmClassification§data_classification: DataClassificationImplementations§
Source§impl Classification
impl Classification
Sourcepub fn gate_compute() -> Self
pub fn gate_compute() -> Self
The workspace-baseline classification — a ConvergencePointType::Gate
point on the SubstrateType::Compute substrate with every other axis
at its Default. The (Gate, Compute) pair names an unremarkable
barrier point in the Compute plane: no domain-specific structural
claim (no fan-out / fan-in / broadcast / observation semantics beyond
the barrier gate) and no domain-specific substrate claim (no
Financial / Network / Storage / Security / Identity /
Observability / Regulatory plane bringing in its own compliance
baselines). The three defaulted axes ride at the intentional
workspace baseline the sibling closed-set primitives already own:
Horizon at HorizonKind::Bounded (terminates naturally, no
asymptotic metric axes required), CalmClassification::Monotone
(no coordination required per CALM), and
DataClassification::Internal (access-controlled but not
externally regulated).
Pre-lift the six-line Classification { point_type: Gate, substrate: Compute, horizon: Default::default(), calm: Default::default(), data_classification: Default::default() } struct-literal recurred
at TEN sites past the ★★ PRIME-DIRECTIVE ≥ 2 duplication threshold
— one production consumer plus nine test-fixture callsites spread
across four crates, each restating the SAME (Gate, Compute)
baseline verbatim:
crate::ephemeral::default_ephemeral_class— the substitute [EphemeralSpec::into::<crate::crd::ProcessSpec>] fills intocrate::crd::ProcessSpec::classificationwhen the operator omits an explicit:classificationslot on(defephemeral …). The one PRODUCTION consumer of the shape — a regression that drifted its point-type or substrate axis silently retargets every unadorned ephemeral to a different plane.crate::crd’s +crate::lib’s +crate::lifetime_clock’s +tatara_reconciler::{claim,render}’s +tatara_pool_reconciler:: controller_pool’sempty_spec/empty_process_spec/ephemeral_process/permanent_processtest-fixture helpers + inlineProcessSpecliterals — nine test-fixture callsites restating the SAME six-line struct-literal at the same shape.
Post-lift every callsite reads Classification::gate_compute();
a future workspace-wide baseline shift (a new Horizon default,
a promotion of Compute to a compound baseline that pre-fills a
canonical CalmClassification, a per-baseline compliance overlay
stamping through the classification, or a rename of either axis
enum) lands at ONE substrate function here and every downstream
consumer inherits the upgrade mechanically. The current pin ties
the three defaulted axes to the sibling closed-set defaults
(HorizonKind::Bounded, CalmClassification::Monotone,
DataClassification::Internal) so a future change to any sibling
default surfaces at this primitive’s tests rather than as silent
drift across ten independent callsites.
Sibling to the _or_default / _or_placeholder primitive family on
crate::prelude::Process on the (return-form × axis) axis — those
primitives own the borrow-form projections off a live Process;
this one owns the construction shape for a fresh
crate::crd::ProcessSpec whose classification axis is
unremarkable. A future peer Classification::observe_observability()
or similar named variant lands as a sibling method here when a
second unremarkable-baseline shape opens.
Theory anchor: THEORY.md §VI.1 (generation over composition — the six-line struct-literal shape recurred at TEN hand-authored sites past the ★★ PRIME-DIRECTIVE ≥ 2 duplication trigger and is lifted onto ONE workspace-wide owner here). THEORY.md §II.1 invariant 5 (composition preserves proofs — a regression that drifted the baseline axis choice at only one consumer, or that broke the sibling-default correspondence, surfaces at this primitive’s tests rather than as silent operator-visible skew between the ephemeral sugar substitute and the ten downstream test-fixtures whose assertions depend on the shape).
Sourcepub fn has_point_type(&self, kind: ConvergencePointType) -> bool
pub fn has_point_type(&self, kind: ConvergencePointType) -> bool
Closed-set-driven presence probe — does this Classification
carry the given ConvergencePointType discriminator on its
Self::point_type slot? The ONE substrate primitive that owns
the (Classification, ConvergencePointType) -> bool
scalar-carrier walk shape.
§Third scalar-carrier peer on the presence-probe axis
Peer of crate::spec::SignalPolicy::has_sighup_strategy and
crate::encapsulates::EncapsulatesSpec::has_mode — all three
probe a scalar closed-set-discriminator field on an inner
crate::crd::ProcessSpec struct via a one-line
self.<field> == kind body. Together they compose the
SCALAR-CARRIER stratum of the workspace-wide closed-set-driven
presence-probe algebra (the workspace-wide algebra spans three
underlying representation kinds — Option-slot, slice, scalar —
see the crate::spec::SignalPolicy::has_sighup_strategy
docstring for the full-shape rundown; this method is the third
scalar-carrier instance).
§Semantics — VARIANT match, not POPULATED slot
has_point_type(kind) returns true iff self.point_type == kind. Distinct from BOTH prior scalar-carrier peers on the
(parent-shape × child-shape) axis:
crate::spec::SignalPolicy::has_sighup_strategylives on a non-Option, DEFAULTED parent (SignalPolicy: Default) with a defaulted scalar child (SighupStrategy: Default = Reconverge) — a default carrier readstruefor the default variant only.crate::encapsulates::EncapsulatesSpec::has_modelives on an OPTION parent (spec.encapsulates: Option<EncapsulatesSpec>) with a defaulted scalar child (EncapsulationMode: Default = Manage) — a bareNoneparent readsfalsefor every variant.has_point_typelives on a REQUIRED, non-Option, NON-DEFAULT parent (Classificationhas noimpl Default) with a NON-DEFAULT scalar child (ConvergencePointTypehas noimpl Default) — every well-formedcrate::crd::ProcessSpeccarries aClassificationwhosepoint_typeslot is deliberately chosen by the operator, so the probe returnstrueon exactly ONE variant per spec andfalseon the other seven, with no default-arm short-circuit shortcut.
This closes the (required-parent × required-scalar-child) corner of the workspace-wide closed-set-driven presence-probe algebra at its first substrate primitive.
§Compounding
A future closed-set-discriminator scalar field on
Classification (a peer has_substrate, has_calm,
has_data_classification — the four remaining
classification-axis closed sets) lands as ONE peer inherent
method with the same one-line self.<field> == kind body and
routes through the same strip_and_classify_prefixed_kind::<K, _> shape in tatara-check. A future
ConvergencePointType variant (a hypothetical Demux /
Mux / Pipeline for finer topology carving) reaches every
downstream through ONE ALL entry on the closed set with the
probe body untouched.
Theory anchor: THEORY.md §II.1 invariant 5 — composition preserves
proofs; the scalar-carrier presence-probe body lives at ONE
substrate site so every downstream (point-type-<kind>
require-tag family in tatara-check, closed-set audit
dispatchers, future variant additions on
ConvergencePointType) binds through the SAME shape rather
than restating the classification.point_type == kind closure
body at each callsite. THEORY.md §VI.1 — generation over
composition; a future ConvergencePointType variant lands at
ONE ALL entry + ONE as_str arm on the closed set and the
probe picks it up mechanically without further per-consumer
edits.
Sourcepub fn has_substrate(&self, kind: SubstrateType) -> bool
pub fn has_substrate(&self, kind: SubstrateType) -> bool
Closed-set-driven presence probe — does this Classification
carry the given SubstrateType discriminator on its
Self::substrate slot? The ONE substrate primitive that
owns the (Classification, SubstrateType) -> bool
scalar-carrier walk shape.
§Fourth scalar-carrier peer on the presence-probe axis
Peer of crate::spec::SignalPolicy::has_sighup_strategy,
crate::encapsulates::EncapsulatesSpec::has_mode, and
Self::has_point_type — all four probe a scalar closed-set-
discriminator field on an inner crate::crd::ProcessSpec
struct via a one-line self.<field> == kind body. Together
they compose the SCALAR-CARRIER stratum of the workspace-wide
closed-set-driven presence-probe algebra (the workspace-wide
algebra spans three underlying representation kinds — Option-
slot, slice, scalar — see the
crate::spec::SignalPolicy::has_sighup_strategy docstring
for the full-shape rundown; this method is the fourth scalar-
carrier instance).
§Semantics — VARIANT match, not POPULATED slot
has_substrate(kind) returns true iff self.substrate == kind. FIRST co-tenant on the (required-parent × required-
scalar-child) corner of the algebra with Self::has_point_type
— both probe REQUIRED, non-Option, NON-DEFAULT slots on the
same Classification parent whose two required axes carry
no Default impl, so exactly ONE of the eight SubstrateType
variants and exactly ONE of the eight ConvergencePointType
variants answer true per well-formed crate::crd::ProcessSpec,
with no default-arm short-circuit shortcut. Distinct from the
two prior scalar-carrier peers on the (parent-shape × child-
shape) axis: has_sighup_strategy lives on a non-Option,
DEFAULTED parent (crate::spec::SignalPolicy carries
#[derive(Default)]) with a defaulted scalar child
(crate::signal::SighupStrategy defaults to
crate::signal::SighupStrategy::Reconverge); has_mode
lives on an OPTION parent (spec.encapsulates: Option<EncapsulatesSpec>) with a defaulted scalar child
(crate::encapsulates::EncapsulationMode defaults to
crate::encapsulates::EncapsulationMode::Manage).
This POPULATES the (required-parent × required-scalar-child)
corner of the workspace-wide closed-set-driven presence-probe
algebra at its SECOND substrate primitive after
Self::has_point_type opened the corner, pinning the corner
as a proven-repeatable primitive shape rather than a single-
example curiosity.
§Compounding
A future closed-set-discriminator scalar field on
Classification (a peer has_calm on CalmClassification,
has_data_classification on DataClassification — the two
remaining defaulted-scalar-child classification-axis closed
sets) lands as ONE peer inherent method with the same one-line
self.<field> == kind body and routes through the same
strip_and_classify_prefixed_kind::<K, _> shape in
tatara-check. A future SubstrateType variant (a
hypothetical Consensus for governance substrates, Physical
for hardware substrates, Cache for ephemeral memoization
substrates) reaches every downstream through ONE ALL entry
on the closed set with the probe body untouched.
Theory anchor: THEORY.md §II.1 invariant 5 — composition preserves
proofs; the scalar-carrier presence-probe body lives at ONE
substrate site so every downstream (substrate-<kind>
require-tag family in tatara-check, closed-set audit
dispatchers, future variant additions on SubstrateType)
binds through the SAME shape rather than restating the
classification.substrate == kind closure body at each
callsite. THEORY.md §VI.1 — generation over composition; a
future SubstrateType variant lands at ONE ALL entry +
ONE as_str arm on the closed set and the probe picks it up
mechanically without further per-consumer edits.
Trait Implementations§
Source§impl Clone for Classification
impl Clone for Classification
Source§fn clone(&self) -> Classification
fn clone(&self) -> Classification
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 Classification
impl Debug for Classification
Source§impl<'de> Deserialize<'de> for Classification
impl<'de> Deserialize<'de> for Classification
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for Classification
impl JsonSchema for Classification
Source§fn schema_name() -> String
fn schema_name() -> String
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn is_referenceable() -> bool
fn is_referenceable() -> bool
$ref keyword. Read moreSource§impl PartialEq for Classification
impl PartialEq for Classification
Source§impl Serialize for Classification
impl Serialize for Classification
impl StructuralPartialEq for Classification
Auto Trait Implementations§
impl Freeze for Classification
impl RefUnwindSafe for Classification
impl Send for Classification
impl Sync for Classification
impl Unpin for Classification
impl UnsafeUnpin for Classification
impl UnwindSafe for Classification
Blanket Implementations§
impl<T> AppData for Twhere
T: OptionalSend + OptionalSync + 'static + OptionalSerde,
impl<T> AppDataResponse for Twhere
T: OptionalSend + OptionalSync + 'static + OptionalSerde,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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> 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 moreimpl<T> OptionalSend for T
impl<T> OptionalSync for T
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);