Docs / Decisions / Decision records
Overview For everyone

Decision records

One file per decision that shapes the code and would be expensive to reverse. Each says what was decided, why, and what it costs — so that the next person who wants to change it argues with the reason rather than with the code.

# Decision Status
0001 The contract is the source of truth; SQL is derived Accepted
0002 The control plane is a database of its own, apart from the warehouse Accepted
0003 Server-rendered Flask, no build step Accepted
0004 The workflow is a validated file, not code Accepted
0005 Agents propose; named people decide Accepted
0006 The headless API reads and does not write Accepted

Writing one

Copy docs/decisions/template.md to the next number, keep it to a page, and open it in the same pull request as the change it records. A decision that is replaced is not deleted: mark it Superseded by NNNN and leave the text, because the old reason is part of why the new one exists.

Documentation for version 0.2.0 Reviewed 2026-10-04