pub struct Fingerprint {
pub wire_version: u32,
pub eventlog_schema: u32,
pub crd_api_version: String,
pub tool_catalog_hash: String,
}Expand description
The compatibility fingerprint of a build: the four axes that decide whether two builds interoperate and can read one another’s data.
Only equality matters — the numeric versions are compared for identity, not ordering, because any difference on a format axis is a coordinated move regardless of direction.
Fields§
§wire_version: u32Protobuf/wire descriptor version the build speaks.
eventlog_schema: u32Event-log schema version the build reads and writes.
crd_api_version: StringCRD apiVersion the controller reconciles (e.g. polychrome.dev/v1).
tool_catalog_hash: StringHash over the tool catalog — the config-as-data surface (prompts, persona defs, model routing) that moves without a binary change.
Implementations§
Source§impl Fingerprint
impl Fingerprint
Sourcepub fn new(
wire_version: u32,
eventlog_schema: u32,
crd_api_version: impl Into<String>,
tool_catalog_hash: impl Into<String>,
) -> Self
pub fn new( wire_version: u32, eventlog_schema: u32, crd_api_version: impl Into<String>, tool_catalog_hash: impl Into<String>, ) -> Self
Build a fingerprint from its four axes.
Sourcepub fn runtime_target(&self) -> RuntimeTarget
pub fn runtime_target(&self) -> RuntimeTarget
The format-axis subset of this fingerprint — the runtime a config-as-data bundle must pin to ride on top of this build.
Sourcepub fn classify(&self, available: &Self) -> Compatibility
pub fn classify(&self, available: &Self) -> Compatibility
Classify available relative to this (the running) build.
The result names the least-disruptive move that applies the available
release: Compatibility::Cold when a format axis moved,
Compatibility::Hot when only the config-as-data surface moved, and
Compatibility::Warm when the fingerprint is otherwise identical (a
wire- and schema-compatible binary swap). This path never refuses — a
full release brings its own binary, so a format change is a coordinated
redeploy rather than an incompatibility. See StagedBundle::evaluate
for the refuse-incompatible interlock on config-as-data bundles.
Trait Implementations§
Source§impl Clone for Fingerprint
impl Clone for Fingerprint
Source§fn clone(&self) -> Fingerprint
fn clone(&self) -> Fingerprint
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 Fingerprint
impl Debug for Fingerprint
impl Eq for Fingerprint
Source§impl PartialEq for Fingerprint
impl PartialEq for Fingerprint
impl StructuralPartialEq for Fingerprint
Auto Trait Implementations§
impl Freeze for Fingerprint
impl RefUnwindSafe for Fingerprint
impl Send for Fingerprint
impl Sync for Fingerprint
impl Unpin for Fingerprint
impl UnsafeUnpin for Fingerprint
impl UnwindSafe for Fingerprint
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
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,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request