# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Build Commands ```bash # Build (from repo root or this directory) cargo build -p kvbm-logical # Run all tests (263 tests) cargo test -p kvbm-logical --lib # Run a single test cargo test -p kvbm-logical --lib test_name # Run tests in a specific module cargo test -p kvbm-logical --lib registry::tests # Lint cargo clippy -p kvbm-logical --lib # Build with test utilities exposed (for downstream crates) cargo build -p kvbm-logical --features testing ``` ## Architecture **kvbm-logical** is the core logical block lifecycle manager for KVBM (KV Block Manager). It manages KV cache blocks for LLM inference through a type-safe state machine, registry, and pool system. ### Block Lifecycle (Type-State Pattern) Blocks use compile-time type states to enforce valid transitions: ``` MutableBlock → CompleteBlock → ImmutableBlock → WeakBlock (Reset) (Staged) (Registered) (Non-owning) ``` - **MutableBlock**: Allocated from `ResetPool`, writable. Drop returns to reset pool. - **CompleteBlock**: Staged via `stage()`/`complete()`. Drop returns to reset pool. - **ImmutableBlock**: Registered in the registry. Strong Arc reference prevents eviction. Drop moves to inactive pool. - **WeakBlock**: Non-owning reference. Does not prevent eviction. Two-stage upgrade (fast Weak::upgrade + slow pool search fallback). The type parameter `T: BlockMetadata` is a marker for the storage tier (G1=GPU, G2=CPU, G3=Disk, G4=External). ### Module Structure - **`manager/`** — `BlockManager`: Top-level orchestrator. Entry point for allocating, registering, matching, and evicting blocks. Uses builder pattern (`BlockManagerConfigBuilder`). - **`blocks/`** — RAII guard types for each lifecycle state. All guards auto-return blocks to the correct pool on drop. - **`registry/`** — `BlockRegistry`: Tracks registered blocks by `SequenceHash` in a `PositionalRadixTree`. Supports typed attachments, presence markers, and touch callbacks. Optional TinyLFU frequency tracking. - **`pools/`** — Three-tier pool system: - `ResetPool`: Free blocks (FIFO) - `ActivePool`: In-use registered blocks - `InactivePool`: Cached evictable blocks with pluggable backends - **`pools/inactive/backends/`** — Eviction strategies implementing `InactivePoolBackend`: `HashMapBackend`, `LruBackend`, `MultiLruBackend` (4-tier frequency-aware), `LineageBackend` (parent-chain aware). - **`events/`** — Block event pipeline with configurable emission policies, batching, and broadcast channels. - **`metrics/`** — Prometheus metrics with atomic counters (`BlockPoolMetrics`) and optional periodic sampling (`StatsCollector`). - **`tinylfu.rs`** — Count-Min Sketch frequency tracker (4 hash functions, configurable decay). - **`testing/`** — Test utilities (behind `testing` feature flag): `TestBlockBuilder`, `BlockSequenceBuilder`, `create_test_manager()`. ### Key Design Decisions - **Synchronous core with interior mutability**: Pool operations use `parking_lot` locks, no async channels. RAII returns execute inline. - **Registry uses weak references**: `PositionalRadixTree>`. Entries auto-clean when all strong refs drop. - **Attachment system**: Extensible typed metadata on `BlockRegistrationHandle` via `attach_unique()`/`attach()` — no struct modification needed. - **`docs/advancements.md`** contains the detailed design doc comparing v1 vs kvbm-logical architecture. ## Testing Tests use `rstest` for fixtures and `proptest` for property-based testing (`pools/block_proptest.rs`). Test utilities in `src/testing/` are gated behind the `testing` feature flag and are also available to downstream crates.