//! Write-Ahead Log (WAL) and durability primitives for Episteme.
//!
//! This crate provides the foundational durability layer, ensuring that
//! assertions are safely persisted to disk before being acknowledged.
//!
//! # Record Format (v2)
//!
//! Each record is stored as: `[payload_len:u32_LE][crc32c:u32][blake3:32][payload:N]`
//!
//! - CRC32C provides fast integrity checking to detect torn writes
//! - BLAKE3 provides content-addressed verification
//!
//! # Crash Recovery
//!
//! The WAL provides crash recovery guarantees via immediate fsync. When a
//! record is appended with `DurabilityLevel::Immediate` (the default), it
//! is guaranteed to survive process crashes or power failures.
//!
//! On open, the journal scans all records across all segments, verifying
//! CRC32C and BLAKE3. Any corrupt or partial records at the tail are truncated.
//!
//! # Log Rotation
//!
//! Segment files are named `{base_offset:016x}.wal`. When the current segment
//! exceeds the configured max size, a new segment is created. Old segments
//! can be cleaned up once all consumers have advanced past them.

pub mod durability;
/// Error types and Result wrapper for WAL operations.
pub mod error;
/// Binary format for WAL records and headers.
pub mod format;
/// The main Journal API.
pub mod journal;
/// Crash recovery: file scanning, validation, and truncation.
pub mod recovery;
/// Log rotation via segment files.
pub mod segment;

/// Group commit buffer for batching fsync operations.
#[cfg(feature = "group-commit")]
pub mod group_commit;

pub use durability::{DurabilityLevel, FsyncGuard};
pub use error::{QuarantineError, Result};
pub use format::{FileHeader, Record, HEADER_SIZE, RECORD_OVERHEAD};
pub use journal::Journal;
pub use recovery::RecoveryReport;
pub use segment::{Segment, SegmentManager};
