//! Signal ledger: top-level coordinator for hot-tier decay scores and
//! warm-tier bucketed counters across all active entities.
//!
//! `SignalLedger` is the single entry point for signal state management.
//! It owns a `DashMap<(EntityId, SignalTypeId), EntitySignalEntry>` that
//! provides concurrent access to per-entity signal state.
//!
//! # WAL integration
//!
//! Every `record_signal()` call first appends the event to the WAL via the
//! `WalWriter` trait. Only after the WAL confirms durability does the ledger
//! update in-memory state. This ensures signals survive crashes.
//!
//! # Concurrency
//!
//! Multiple threads can write signals to different entities simultaneously.
//! Writes to the same entity contend on the `DashMap` shard lock only for entry
//! lookup; the actual state update (CAS on hot tier, atomic increment on warm
//! tier) is lock-free once the entry reference is obtained.

pub mod core;
pub mod types;

pub use core::SignalLedger;
pub use types::{EntitySignalEntry, NoopWalWriter, WalWriter};
