Design records¶
One record per decision, written when it was taken and not edited afterwards except by an amendment. They explain why the code is the way it is; Architecture and the reference pages describe what it does today.
| # | Decision | Status |
|---|---|---|
| 0001 | Fixed-point int64 for Price and Qty |
accepted |
| 0002 | Exceptions and RTTI stay enabled, but off the hot path | accepted |
| 0003 | #pragma once instead of include guards |
accepted |
| 0004 | doctest over GoogleTest | accepted |
| 0005 | CPM.cmake over submodules, Conan or vcpkg | accepted |
| 0006 | Static libraries with LTO | accepted |
| 0007 | A hand-written network stack over Boost.Asio and libwebsockets | accepted |
| 0008 | The simulated exchange speaks the Binance protocol | accepted |
| 0009 | CRTP strategies over virtual interfaces | accepted |
| 0010 | The .fmj journal format |
accepted; amended by format versions 2 and 3 |
| 0011 | scikit-build-core for Python packaging | accepted |
| 0012 | Strategy developer experience | accepted; section 7 superseded by 0013 |
| 0013 | Python strategies in live trading | accepted |
| 0014 | US equities | accepted, not implemented: the page is a plan, not the code |
| 0015 | UDP multicast market data and kernel-bypass receive | accepted; amends 0014's market-data scope |
| 0016 | Pluggable storage backends, SQLite first | accepted |