minerva 0.2.0

Causal ordering for distributed systems
use crate::metis::Dot;

/// The rejected outcome of [`DotMap::from_disjoint`](super::DotMap::from_disjoint):
/// two different keys' stores share a dot, so the batch has no honest map and
/// nothing was built.
///
/// A dot names one write and cannot straddle two keys (trait law 1), so a
/// batch whose entries collide has no disjoint map to build.
///
/// The witness names the first colliding dot in iteration order: the material a
/// caller needs to find which two keys claimed one write and repair the batch.
///
/// The witness is evidence about a *held* identity, never a refused raw
/// coordinate, so it carries a [`Dot`] rather than the parts (ruling R-91).
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct DotCollision {
    /// The colliding dot, shared across two keys.
    pub dot: Dot,
}