[package]
name = "levcs-store"
version.workspace = true
edition.workspace = true
license.workspace = true
authors.workspace = true
description = "Durable transaction spine for LeVCS instances: journal, recovery, index, and snapshots."

[features]
default = []

# Deterministic crash-injection points. Compiled out entirely in release; see
# `failpoints.rs`. Required by the crash matrix (scope 4-A3).
failpoints = []

# Journal-level drive API (`drive.rs`) used by the crash driver and the
# P1-micro benchmark before `StoreEngine::submit` exists. Test/bench seam only;
# never enabled in a release binary. See scope 2.1.
store-internals = []

# Gates construction of `ValidatedTransaction`. Enabled only by validated
# ingest (`levcs-instance`), this crate's own recovery path, and the Phase 2
# migrator. Deliberately NOT reachable from `&StoreEngine`; see scope 2.2.
store-privileged = []

# Long-run benchmark harness dependencies.
bench-harness = ["dep:hdrhistogram", "dep:ed25519-dalek", "dep:rand_core"]

[dependencies]
levcs-core = { workspace = true }
levcs-protocol = { workspace = true }
blake3 = { workspace = true }
thiserror = { workspace = true }
hex = { workspace = true }
arc-swap = { workspace = true }
crossbeam-channel = { workspace = true }
im = { workspace = true }
rustix = { workspace = true }
libc = { workspace = true }
memmap2 = { workspace = true }
hdrhistogram = { workspace = true, optional = true }
# Benchmark-only. The P2 bundle needs a real Ed25519 attestation and section 5.2
# requires P2 to measure real signing cost, but the store may not call into
# levcs-identity. The harness therefore implements CommitEvidenceSigner itself;
# the library never sees these.
ed25519-dalek = { workspace = true, optional = true }
rand_core = { workspace = true, optional = true }

[dev-dependencies]
tempfile = { workspace = true }
serde_json = { workspace = true }
proptest = { workspace = true }
criterion = { workspace = true }

[[bin]]
name = "store-crash-driver"
path = "src/bin/store-crash-driver.rs"
required-features = ["failpoints", "store-internals", "store-privileged"]

[[bin]]
name = "store-bench"
path = "src/bin/store-bench.rs"
required-features = ["bench-harness", "store-internals", "store-privileged"]

[[bench]]
name = "durable_ingest"
harness = false
required-features = ["store-internals"]
