ELIPS keeps an ADR log under docs/adr/. The cards below distil each record into the choice it made. They are listed roughly in the order the runtime was built.
Core ADRs
ELIPS targets C++23 to use std::span, structured bindings, designated initialisers, and concepts. The Core Guidelines are non-negotiable.
No server, no daemon. A database is a directory, a process opens it, and a file lock coordinates writers.
Hierarchical Navigable Small World offers the best recall / latency trade-off at the embedded scale ELIPS targets.
Record-framed with CRC32C. Recovery truncates at the first invalid record. Logical, not physical.
Single-writer, multi-reader. Atomic batched transactions buffer in memory and commit at once.
Lightweight, zero-overhead bindings that mirror the C++ surface 1:1 plus a typed wrapper for ergonomics.
The snapshot is the consistent baseline; the WAL is the log of mutations since. Together they make checkpoint atomic.
flock-based advisory locks. RAII-bound. No background coordination.
Payloads are typed variants, not a fixed schema. Filters operate on the same type system.
A small expression-oriented language with a lexer, parser, AST, and executor. EQL output is the same Filter / QueryPlan the SDK produces.
GPU ADRs
CUDA, Metal, and a portable fallback live behind GpuPort. Backend selection happens once at startup.
Custom kernels for distance math, cuVS for graph traversal where it is the right tool.
Index build can use the GPU even when serving stays on CPU. The transfer manager handles the handoff.
A pool allocator keeps allocations stable across queries; the memory manager owns the lifetime.
The batcher coalesces concurrent queries into a single launch to amortise kernel overhead.
When the platform offers it, ELIPS skips host↔device copies entirely.
FP32 by default; mixed precision is opt-in per index, never silent.
Backend → device → CPU. The runtime always lands on a working path.
Where SYCL fits, it stays behind the same port — never visible to domain code.
Vulkan compute provides a backstop on platforms without CUDA or Metal.
Reading the ADRs in the repo
The originals live under docs/adr/ on GitHub and use a consistent template — context, decision, status, consequences. They are the canonical source whenever this page summarises something.