# Architecture decision records

One record per decision that would be expensive to reverse. Each states what was chosen, what was
rejected, and what it costs — the rejected options matter as much as the choice, because the next
person to question a decision deserves to know it was already considered.

| # | Decision | Status |
|---|---|---|
| [0001](https://codna.me/docs/adr/0001-record-architecture-decisions.md) | Record architecture decisions | Accepted |
| [0002](https://codna.me/docs/adr/0002-single-org-per-deployment.md) | Single org per deployment | Accepted |
| [0003](https://codna.me/docs/adr/0003-go-single-binary.md) | Go, shipped as a single static binary | Accepted |
| [0004](https://codna.me/docs/adr/0004-three-spaces.md) | Three spaces: raw, wiki, output | Accepted |
| [0005](https://codna.me/docs/adr/0005-postgres-source-of-truth.md) | Postgres is truth, Typesense is derived | Accepted |
| [0006](https://codna.me/docs/adr/0006-inline-markdown-links.md) | Inline markdown links with relative `.md` hrefs | Accepted |
| [0007](https://codna.me/docs/adr/0007-quickjs-sandbox.md) | QuickJS on wazero for user automations | Accepted |
| [0008](https://codna.me/docs/adr/0008-tombstone-deletion.md) | Tombstone deletion with pending link decisions | Accepted |
| [0009](https://codna.me/docs/adr/0009-transactional-outbox.md) | Transactional outbox for all derived state | Accepted |
| [0010](https://codna.me/docs/adr/0010-mcp-first-no-llm-inside.md) | CoDNA does not call an LLM | Accepted |
| [0011](https://codna.me/docs/adr/0011-oci-containers-and-deployment.md) | OCI containers, Podman first, three deployment strategies | Accepted |
| [0012](https://codna.me/docs/adr/0012-mcp-oauth-resource-server.md) | MCP authenticates via OAuth against your IdP | Accepted |
| [0013](https://codna.me/docs/adr/0013-no-administrators.md) | No administrators; management is a token, not a person | Accepted |
| [0014](https://codna.me/docs/adr/0014-standing-folder-shares.md) | Standing folder shares | Accepted |
| [0015](https://codna.me/docs/adr/0015-page-owned-files.md) | Images and files belong to a page | Accepted |
| [0016](https://codna.me/docs/adr/0016-imports-into-raw.md) | An export is imported into raw, and a newer export adds versions | Accepted |
| [0017](https://codna.me/docs/adr/0017-recordings-become-raw-transcripts.md) | Recordings become raw transcripts, through a transcription service | Accepted |
| [0018](https://codna.me/docs/adr/0018-meetings-recorded-per-person.md) | Meetings are held through a meetings service and recorded one person to a track | Accepted |
| [0019](https://codna.me/docs/adr/0019-diagrams-are-mermaid-text.md) | Diagrams are Mermaid text, drawn by the web UI | Accepted |
| [0020](https://codna.me/docs/adr/0020-editors-can-share.md) | Anyone who can edit a page can share it | Accepted |
| [0021](https://codna.me/docs/adr/0021-agents-are-members.md) | An agent is a member of an instance, and knows what is shared with it | Accepted |
| [0022](https://codna.me/docs/adr/0022-skills-are-wiki-pages.md) | A skill is a page in the wiki's skills folder, and agents are told which they can read | Accepted |

Format: Context · Decision · Consequences · Alternatives rejected.
