Skip to main content

Tombstone

Struct Tombstone 

Source
pub struct Tombstone {
    pub id: String,
    pub deleted_at: DateTime<Utc>,
    pub author: Option<AuthorStamp>,
}
Expand description

A deletion, carried so a re-import can propagate it.

Import is otherwise additive: without this, deleting a vertex at the source and re-exporting leaves the deleted record alive at the destination forever, and the two stores silently diverge.

§Which planes can be tombstoned

Vertices and edges only. Those are the mutable graph planes — a vertex is a current-state record and deleting one is a normal operation.

Observations are append-only by design: an observation is a claim that something was seen at a time, and un-saying it would break the audit trail the format exists to carry. Evidence and beliefs are likewise not tombstoned here — evidence is the justification other records cite (deleting it would strand them, and the closure checker would rightly call the file broken), and beliefs are derived state that a re-materialisation regenerates. If retraction is ever needed on those planes it should be a RETRACTION record carrying a reason, not a delete — a different feature with different semantics.

§Conflict rules

  • Tombstone for an id that does not exist locally → no-op, not an error. Imports are meant to converge from any starting point, and a file may legitimately carry a deletion the destination never saw the creation of.
  • A live record NEWER than the tombstone → the record wins, the delete is ignored. deleted_at is compared against the live record’s last-write time; a stale tombstone must not resurrect a deletion that a later write already undid. This is last-write-wins on the same clock the rest of the store already uses.
  • Ties (equal timestamps) → the tombstone wins, so a delete is not lost to clock granularity.

Fields§

§id: String

Id of the deleted record, in its own plane’s namespace.

§deleted_at: DateTime<Utc>

When the deletion happened at the source. Drives the last-write-wins comparison above.

§author: Option<AuthorStamp>

Who deleted it, when the source knows. Advisory — carried for the audit trail, never used to decide the conflict.

Trait Implementations§

Source§

impl Clone for Tombstone

Source§

fn clone(&self) -> Tombstone

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 Tombstone

Source§

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

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

impl<'de> Deserialize<'de> for Tombstone

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Tombstone

Source§

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

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

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

Inequality operator !=. Read more
Source§

impl Serialize for Tombstone

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
Source§

impl StructuralPartialEq for Tombstone

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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.