Skip to content

Architecture decision records

An architecture decision record (ADR) captures one significant decision: the context, the options that were considered, the choice that was made and its consequences. Together the records explain why Agoranomos is built the way it is. ADR-0001 describes which decisions are recorded and how.

Format

Records follow the MADR 4.0 format (Markdown Architectural Decision Records). Each record is one Markdown file named NNNN-title.md, with a short metadata block (status, date, decision-makers) and these sections:

  • Context and Problem Statement: what needs deciding and why.
  • Decision Drivers: the forces and concerns that matter.
  • Considered Options: the alternatives that were weighed.
  • Decision Outcome: the chosen option and its consequences, good and bad.
  • More Information: evidence, links and when to revisit the decision.

Statuses

The status in the metadata block of a record is one of these words, written in lowercase.

Status Meaning
proposed The decision is under discussion.
accepted The decision is in force.
rejected The proposal was considered and declined. The record stays, so that the question is not reopened without its context.
deprecated The decision no longer applies, and no other record replaces it.
superseded A newer record replaced the decision. The status is superseded, and a line Superseded by [ADR-0123](0123-title.md). under the title names the new record.

Accepted records keep their decision

An accepted record keeps its decision. Its status, the implementation status of what it decided (such as an "In place" or "Planned" list), factual corrections and editorial fixes may be edited, and the pull request says which. These edits leave the date unchanged: it is the day the decision was made or last changed. A changed decision needs a new ADR that supersedes the old one. The old record keeps its text. Its status becomes superseded, and one line under its title points to the new record; nothing else changes. That way the history of why things changed stays readable.

A superseded record starts like this:

---
status: superseded
date: 2026-10-02
decision-makers: Andrei Gromov
---

# Title of the old decision

Superseded by [ADR-0123](0123-title-of-the-new-decision.md).

All records

Agoranomos is pre-alpha. A record states a decision, and the components it describes arrive release by release.

ADR Title Status Date
0001 Record architecture decisions accepted 2026-10-04
0002 Orchestrate with Apache Airflow 3 accepted 2026-10-02
0003 Run two PostgreSQL instances accepted 2026-10-02
0004 Ingest data with dlt accepted 2026-10-02
0005 Transform data with dbt Core accepted 2026-10-02
0006 Use Metabase as the BI layer accepted 2026-10-02
0007 Give AI clients least-privilege access through MCP accepted 2026-10-02
0008 License under Apache-2.0 with DCO sign-off accepted 2026-10-02
0009 Write documentation with Zensical and Diátaxis accepted 2026-10-02
0010 Support amd64 and arm64 within a memory budget accepted 2026-10-02
0011 Support local and server modes accepted 2026-10-02
0012 Use Python 3.13 and a pinned toolchain accepted 2026-10-02
0013 Keep extensions apart from the base package accepted 2026-10-05
0014 Start the stack with one script and a generated .env file accepted 2026-10-05
0015 Run LocalExecutor by default accepted 2026-10-05
0016 Keep the metadata of the marts as code, with a deployment's overrides in extensions accepted 2026-10-07
0017 Set the access of AI clients in Metabase by levels accepted 2026-10-10
0018 Keep the content of the package in Metabase as code, and view-only accepted 2026-10-10
0019 Open only Metabase to the internet in server mode, through Caddy accepted 2026-10-09
0020 Back up the databases every day with pg_dump, into a folder of the host accepted 2026-10-09
0021 Leave the outgoing traffic of Metabase open, and close what relays it without a sign-in accepted 2026-10-09
0022 Budget the memory by variant and mode accepted 2026-10-09
0023 Give the network of the stack IPv6, so that Metabase sees the address of each client accepted 2026-10-11
0024 One deployment is one business, and clients group its ad accounts accepted 2026-10-12
0025 Model advertising statistics once, at the grain of a campaign and a day accepted 2026-10-12
0027 Load the dbt project into Cosmos from a manifest accepted 2026-10-12
0028 Build each node of dbt with its tests in one task accepted 2026-10-19
0029 Record the runs of dbt with elementary in the schema ops, and show them in the Ops collection accepted 2026-10-20
0030 Ship three MCP servers in v0.3.0, with the stdio servers in local mode only accepted 2026-10-21
0031 Register and revoke the OAuth clients of Metabase with the script, and close the rest at the proxy accepted 2026-10-21