alkstore 0.1.0

The alkstore contract crate: one reactive store trait surface — notify, streams, durable queues, TTL locks, outbox, scheduler — implemented by the alkstore-sqlite/-postgres/-mem engine crates; no driver dependencies
Documentation
//! Wake value (ADR-008 §3): the `listen(channel)` channel-carried
//! hint.
//!
//! `#[non_exhaustive]` per ADR-017 §3 — consumers read but never
//! construct.

/// A wake: the one piece of semantic content the wake contract allows
/// — the channel name. No payload is surfaced (honker's
/// `Notification { id, channel, payload }` is not); consumers needing
/// content use streams (the guarantee split, ADR-006). Wakes are
/// hints: their multiplicity is not part of the contract (coalescing
/// on SQLite, per-notify on Postgres).
///
/// The Postgres engine's synthetic reconnect-wake arrives as
/// `Wake { channel: RESERVED_LISTENER_RECONNECTED }` on every
/// subscriber's receiver after a watcher reconnect.
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub struct Wake {
    /// The channel the wake was delivered on.
    pub channel: String,
}

impl Wake {
    /// Engine-construction-only constructor taking the full field set.
    ///
    /// # Contract posture
    ///
    /// Not consumer API and not part of the contract surface: engines
    /// (in-repo, lockstep-updated with core) use it to build [`Wake`]
    /// values (including the Postgres engine's synthetic reconnect
    /// wake), since `#[non_exhaustive]` (ADR-017 §3) bans
    /// struct-literal construction downstream. Not covered by
    /// ADR-017's semver-minor field-addition promise — a `Wake` field
    /// addition changes this signature, which is an engine breaking
    /// change under a core change and a lockstep-duty event
    /// (ADR-017 §5). Hidden from consumer-facing docs.
    #[doc(hidden)]
    pub fn new(channel: String) -> Self {
        Self { channel }
    }
}