One numbered Markdown file per decision, in the lightweight
Michael Nygard
format. Numbering is sequential and never reused or renumbered. Template:
template.md.
Open an ADR when a choice affects the public surface or compatibility, when two reasonable options exist and the rationale is non-obvious, when a design pattern is adopted, or when superseding a prior decision. Do not open one for routine implementation details or trivially reversible choices.
Status transitions: Proposed → Accepted → (Superseded by ADR-XXXX | Deprecated).
| ADR | Title | Status |
|---|---|---|
| 0001 | Record architecture decisions | Accepted |
| 0002 | Adopt the cross-language source layout | Accepted |
| 0003 | Automate PR metadata and enable a project board | Accepted |
| 0004 | Adopt a hybrid header-only + optional STATIC build model | Accepted |
| 0005 | UniqueRef<T> non-null unique-ownership semantics |
Accepted |
| 0006 | HeapArray<T> as a fixed-size restriction over std::vector |
Accepted |
| 0007 | StackAllocator<Size> bump-arena semantics |
Accepted |
| 0008 | Adopt the Object Pool pattern for ObjectPool<T> |
Accepted |
| 0009 | Adopt flat (sorted-contiguous) associative containers | Accepted |
| 0010 | FlatMap<Key, Value> constexpr support and construction strategy |
Accepted |
| 0011 | CircularBuffer<T> ring-buffer semantics |
Accepted |
| 0012 | StringFormatter compile-time format-string validation strategy |
Accepted |
| 0013 | Semaphore monitor-based implementation over mutex + condition variable |
Accepted |
| 0014 | ReaderWriterLock writer-preference policy over a monitor |
Accepted |
| 0015 | TaskFuture<T> lightweight promise/future design |
Accepted |
| 0016 | LockFreeQueue<T> bounded Vyukov MPMC design |
Accepted |
| 0017 | ThreadPool priority work pool design |
Accepted |
| 0018 | Stopwatch clock choice and accumulation semantics |
Accepted |
| 0019 | StackTrace compiled-tier capture with on-demand symbolization |
Accepted |
| 0020 | Logger asynchronous single-pump design with Strategy sinks |
Accepted |
| 0021 | CliParser typed variable-binding with a value-or-error boundary |
Accepted |
| 0022 | JsonParser non-allocating pull (SAX) event model over string views |
Accepted |
| 0023 | FileStream buffered OS-descriptor wrapper, single-direction, compiled tier |
Accepted |
| 0024 | BinarySerializer endianness-aware, header-only, span-based codec |
Accepted |
| 0025 | TcpSocket / TcpServer non-blocking sockets, poll-based readiness, compiled tier |
Accepted |
| 0026 | Freeze the 1.0 public API and enforce a warning-clean Doxygen build | Accepted |
| 0027 | Benchmark suite on a dependency-free Stopwatch harness | Accepted |
| 0028 | Line-coverage gate — gcovr in CI at ≥80%, OpenCppCoverage locally | Accepted |
| 0029 | Library-wide error-handling policy (value-or-error vs exceptions) | Accepted |
| 0030 | Distribution model & ABI-stability policy | Accepted |
| 0031 | Fuzz-testing harnesses & non-cryptographic hash scoping | Accepted |