Skip to main content

ProjectionDelta

Struct ProjectionDelta 

Source
pub struct ProjectionDelta {
    pub built: Vec<String>,
    pub dropped: Vec<String>,
    pub deferred: Vec<String>,
    pub unchanged: bool,
    pub vector_unsupported_kinds: Vec<String>,
}
Expand description

0.8.20 Slice 15d (R-20-PR) — the diff Engine::configure_projections applied. Idempotent re-registration yields unchanged == true with all vecs empty (the “re-registration is a no-op” acceptance signal). A destructive change without an explicit drop is an Err, not a delta.

Fields§

§built: Vec<String>

Attribute names whose same-transaction projections (EAV / property-FTS) were (re)built by this apply.

§dropped: Vec<String>

Attribute names dropped (explicit drop list) — their EAV + property-FTS rows and registry row removed.

§deferred: Vec<String>

Attribute names whose declared roles were persisted but NOT built: rankable (F9 not yet live) and the searchable→vector sub-target (Slice 20). These graft on a future idempotent apply. No error.

§unchanged: bool

True iff nothing was built, dropped, or newly deferred — the whole apply diffed to a no-op.

§vector_unsupported_kinds: Vec<String>

0.8.20 Slice 22 (R-20-VC / TC-67) — node KINDS, not attribute names. The vector-eligible node kinds present in the corpus that the vector writer can NEVER commit, so no searchable→vector declaration will ever produce an embedding for them.

§Why this field exists — the silence it replaces

[kind_is_vector_committable] (Slice 20c fix-2) restricted enrolment to the kinds [resolve_source_type] maps, because enrolling any other kind is a permanent liveness wedge. That fix was correct and is unchanged — but it made the exclusion silent: the declaration persists, its name is pushed onto ProjectionDelta::deferred, and the caller cannot tell “waiting on the embedder” (transient) from “this kind will never be embedded” (permanent). Per the HITL ruling on TC-67 the remedy is option (c) REPORT — the vocabulary is NOT grown and the Pack-1 D3 partition-key lock is NOT touched (dev/design/0.7.0-vector-quant-pack1.md).

§Axis, and why the name is what it is

built / dropped / deferred are all lists of projection attribute names. This one is a list of node kinds — a different axis entirely, so the name says kinds explicitly and is prefixed vector_ to bind it to the dense arm (an unsupported kind is still fully FTS/lexically searchable). Sorted and de-duplicated (SELECT DISTINCT … ORDER BY kind).

§It is a STATE report, not a diff

Unlike the other three vectors it does not describe what this call changed; it describes the corpus as it stands. So it is populated on an idempotent re-apply too (where unchanged == true and the other three are empty), and it deliberately does NOT feed ProjectionDelta::unchanged. That is what makes the declare-time residual cheap to live with: to refresh the report after writing new kinds, re-apply the same spec — a no-op that still returns a current report.

§Independent of the embedder

Computed whenever a searchable→vector projection is declared, whether or not this session has a live embedder. The vocabulary is static, so “this kind can never be embedded” is true in a no-embedder session too — and must not be conflated with the Q6a graceful-absent deferral, which is transient and is reported through deferred.

Empty (never absent) when there is nothing to report.

Trait Implementations§

Source§

impl Clone for ProjectionDelta

Source§

fn clone(&self) -> ProjectionDelta

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 ProjectionDelta

Source§

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

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

impl Default for ProjectionDelta

Source§

fn default() -> ProjectionDelta

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

impl Eq for ProjectionDelta

Source§

impl PartialEq for ProjectionDelta

Source§

fn eq(&self, other: &ProjectionDelta) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ProjectionDelta

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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<T> Same for T

Source§

type Output = T

Should always be Self
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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.