Architectural decision records
August 14, 2026 · View on GitHub
One line per ADR. Read this index before proposing a change; read an individual ADR only if it is relevant.
- ADR-0000 — template
- ADR-0001 — Accepted: matching moves in-memory; SQLite becomes an optional off-hot-path sink (its transition clause is superseded by ADR-0003)
- ADR-0002 — Superseded by ADR-0005: the ≥100x throughput target is measured with no sink attached; the sink-attached figure is reported but does not gate
- ADR-0003 — Accepted: the legacy SQL engine is retired; the differential oracle is replaced by a spec-derived reference matcher, not deleted (supersedes ADR-0001's transition clause)
- ADR-0004 — Accepted:
Tradeis a NamedTuple, not a frozen dataclass (a measured 9% of the sinkless hot path); the type widens to a tuple - ADR-0005 — Accepted: throughput is judged against a calibration-normalised baseline, not a ratio to the deleted legacy engine (supersedes ADR-0002)
- ADR-0006 — Accepted: there is no
reset()andclose()clears nothing; an episode is a freshOrderBook, which is measured faster and is the only bounded arrangement - ADR-0007 — Accepted: sink readers accept a schema-version window (
MIN_READABLE_SCHEMA_VERSION) so an additive bump does not strand existing recordings; the writer stays exact - ADR-0008 — Accepted: an additive event field that no replay path reads does not bump
STREAM_VERSION;decode_eventrefuses unknown fields instead, which buys the same clean failure without stranding every recording (the stream-side sibling of ADR-0007)