Architecture decision records

All decisions for orbit-rs and for Symphony live here. Symphony’s repository holds no copy; it points to this folder. Each record states one decision, why it was made, and what it commits us to. They are the single source for how the project describes itself: README, specifications, whitepapers and release notes quote them and must not contradict them.

Index

One series for orbit-rs and Symphony. Scope says which project a record governs.

ADR Title Scope Status Date
0001 The goal is full compatibility with PostgreSQL 18 orbit-rs Accepted 2026-10-24
0002 Compatibility is stated only as a conformance pass rate orbit-rs Accepted 2026-10-24
0003 Schemas are first-class catalog namespaces orbit-rs Accepted 2026-10-24
0004 PostgreSQL SQL runs on a durable RocksDB engine replicated by Raft orbit-rs Accepted 2026-10-23
0005 Each wire protocol is a separate compatibility layer with its own conformance corpus orbit-rs Accepted 2026-10-24
0006 Reference server and version for each protocol layer orbit-rs Accepted 2026-10-24
0007 The desktop app stays on SQLite with no Postgres dependency Symphony Accepted 2026-10-23
0008 orbit-rs is adopted for hosted data only after an exit gate passes Symphony Accepted 2026-10-23
0009 Tenant databases on orbit-rs are isolated by schema Symphony Accepted 2026-10-24
0010 Hosted recovery does not use a Queues write-ahead log or multi-master sync Symphony Accepted 2026-10-23
0011 Symphony describes orbit-rs with the orbit-rs wording Symphony Accepted 2026-10-24
0012 pg_catalog and information_schema are real catalog schemas orbit-rs Accepted 2026-10-24
0013 Roles, ownership and privileges follow PostgreSQL both Accepted 2026-10-24
0014 Schema records are emitted only when the operator attests every node can apply them orbit-rs Accepted 2026-10-24
0015 A maturity label is earned by a checklist, not asserted orbit-rs Proposed 2026-10-25
0016 A performance number is quoted only with its reproducible benchmark orbit-rs Proposed 2026-10-25
0017 One project statement, and counts come from a script orbit-rs Proposed 2026-10-25
0018 The Redis layer gets a keyspace engine before more commands orbit-rs Proposed 2026-10-25

Rules

  1. Statuses: Proposed, Accepted, Superseded, Deprecated, Rejected. Only the owner moves a record to Accepted; an assistant drafts records as Proposed.
  2. A record is never rewritten to change its meaning. To change a decision, add a new record that supersedes it: set the old one to Superseded with a **Superseded by:** ADR NNNN line, and give the new one **Supersedes:** ADR NNNN. Typo and link fixes are fine. A narrow change to one item of an accepted record may instead be an amendment: the new record carries **Amends:** ADR NNNN and names the item, and the old record gets an **Amended by:** ADR NNNN line and stays Accepted.
  3. Change code or claims that touch a decision in the same change as its record. If a pull request changes what the project says about PostgreSQL compatibility, replication, storage or schemas, it updates or adds the record.
  4. Quote, don’t paraphrase. Each record has a Canonical wording section. Documents reuse that wording.
  5. Retire wording mechanically. When a decision forbids a claim, add its pattern to RETIRED in scripts/check_adr.py.
  6. Run make adr-check before committing. Symphony runs the same script from its own make adr-check, which also scans Symphony’s Markdown for retired wording. It verifies the format, that every record is in this index with the right status, that cross-references resolve, and that no tracked Markdown file uses retired wording.

New record: copy TEMPLATE.md to NNNN-short-title.md, number it next, and add an index row.