Create ADR
Create a new Architecture Decision Record with the next sequential number, register it in the AgentDB graph, and link it to related ADRs.
When to use
When a significant architectural decision needs to be recorded -- new technology adoption, API design choices, data model changes, infrastructure decisions, or any cross-cutting concern that affects multiple components.
Format
ADRs follow canonical MADR 4.x (https://adr.github.io/madr/) with two project extensions:
- A
tags: frontmatter field for cross-cutting categorisation
- Three typed-relation frontmatter slots:
supersedes:, depends-on:, implements:
DACI fields (decision-makers:, consulted:, informed:) are NOT emitted (dropped per Council 415, 2026-05-09 — git log is the canonical authorship surface).
- Filename:
docs/adr/ADR-NNNN-<slug>.md — the project-canonical form. Every ADR file carries the ADR- prefix to make references unambiguous (both ADR and ODR corpora share the same numeric range; the prefix disambiguates without requiring context). 4-digit zero-padded number, lowercase kebab-case slug derived from the title.
- This deviates slightly from canonical MADR (which uses bare
NNNN-slug.md); the deviation is deliberate. Symmetric with docs/ontology/odr/ODR-NNNN-<slug>.md on the ODR side.
- H1:
# <Title> — title only, NO ADR-NNNN: prefix. The number lives in the filename.
- Metadata: YAML frontmatter (NOT bullet-list metadata under H1).
- Status enum:
proposed | accepted | rejected | deprecated | superseded by ADR-NNNN. Lowercase exactly as listed.
- Required sections:
## Context and Problem Statement, ## Considered Options (bullet list), ## Decision Outcome containing ### Consequences (flat bullets) and ### Confirmation.
- Optional sections:
## Decision Drivers, ## Pros and Cons of the Options (with ### {Option} per option), ## More Information.
- Optional named extensions (after
## More Information in trailing position, project-specific): ## Rules, ## Vote and Dissent, ## Amendments, ## Mapping. Use sparingly; the canonical sections do most of the work.
Typed-relation frontmatter (Council 414, 2026-05-09)
The three predicates are flat lists of record IDs:
| Slot |
Semantics |
Cross-corpus rule |
supersedes: |
Replaces — kills the prior |
Intra-corpus only (ADR↔ADR; ODR↔ODR) |
depends-on: |
Cites — correctness/coherence requires the cited record to hold |
Cross-corpus allowed (ADR↔ODR) |
implements: |
Realises — this ADR is the technical artefact realising a parent decision |
Intra-corpus only (ADR→ADR) |
Predicates dropped during the deliberation: related (Council 411 — too vague), the kind: qualifier on depends-on (Council 413 — record-type prefix already encodes the distinction), amends and refines (Council 414 — supersedes already covers the modifying case; ## Supersession scope: body subsection captures partial supersession).
Inverse properties (superseded-by, depended-on-by, implemented-by) are derived at index time by adr-index from the forward-direction edges. Authoring inverses in frontmatter is forbidden — single source of truth.
For partial supersession, the superseding record carries a ## Supersession scope: subsection inside ## Decision Outcome describing what survives.
Steps
Find next number -- Glob for docs/adr/ADR-*.md and parse the 4-digit number (after the ADR- prefix) from each filename to determine the next sequential ID (e.g. 0226 if the highest existing is 0225). Filter out non-ADR files (README.md, INDEX.md, _template.md) and subdirectories. Create docs/adr/ if it does not exist.
Slugify title -- Convert the title argument to a lowercase, hyphen-separated slug (e.g., "Use PostgreSQL for persistence" becomes use-postgresql-for-persistence). Drop punctuation; collapse runs of hyphens.
Create ADR file -- Write the file at docs/adr/ADR-NNNN-<slug>.md (with the ADR- prefix) using the canonical MADR template:
---
status: proposed
date: <today's date YYYY-MM-DD>
tags: []
supersedes: []
depends-on: []
implements: []
---
# <Title>
## Context and Problem Statement
<!-- What is the issue that motivates this decision? Describe the situation and the question. -->
## Decision Drivers
<!-- Optional. Forces shaping the decision: constraints, qualities, stakeholder concerns. Bullet list. -->
* <driver 1>
* <driver 2>
## Considered Options
<!-- Bullet list of alternatives evaluated. One option per line. List the chosen option alongside rejected ones. -->
* <Option A> — <brief description>
* <Option B> — <brief description>
## Decision Outcome
Chosen option: "<Option A>", because <justification — why this option meets the decision drivers, satisfies the K.O. criteria, or comes out best>.
### Consequences
<!-- Flat bullet list. Use canonical phrasing: "* Good, because …" / "* Bad, because …" / "* Neutral, because …" -->
* Good, because <positive consequence>
* Bad, because <negative consequence>
* Neutral, because <neutral consequence>
### Confirmation
<!-- Optional. How compliance with this decision is verified (review, ArchUnit test, lint rule, etc.). -->
## Pros and Cons of the Options
<!-- Optional. Per-option deliberation detail. H3 per option. -->
### <Option A>
* Good, because <argument>
* Bad, because <argument>
### <Option B>
* Good, because <argument>
* Bad, because <argument>
## More Information
<!-- Optional. Links, related ADRs, supporting evidence. -->
Store in AgentDB -- Call mcp__ruflo__agentdb_hierarchical-store with:
- path:
adr/ADR-NNNN
- value:
{ "id": "ADR-NNNN", "title": "<title>", "status": "proposed", "date": "<today>", "tags": [], "supersedes": [], "depends-on": [], "implements": [], "file": "docs/adr/ADR-NNNN-<slug>.md" }
Find related ADRs -- Call mcp__ruflo__memory_search with the title as query in namespace adr-patterns to find related decisions. If matches found, add them to the ## More Information section as human-readable references AND, if the match represents a typed dependency the new ADR will rely on, suggest adding the cited ADR to depends-on: or implements: (as appropriate).
Store pattern -- Call mcp__ruflo__memory_store in namespace adr-patterns with key ADR-NNNN and the title + context as value for future semantic search.
Report -- Output the created file path, ADR number, and any related ADRs found.
Notes
- The
tags frontmatter field is a project extension to canonical MADR for cross-cutting categorisation (e.g. tags: [security, infrastructure]). Optional — leave as [] if unused.
- For supersession, set
status: superseded AND list the superseding ADR's ID in the new ADR's supersedes: slot. Reference the superseded ADR in ## More Information. Both directions of the edge are derived by adr-index from supersedes: (forward) and emitted as superseded-by (inverse).
- The
### Confirmation section is optional in canonical MADR but recommended — it answers "how do we know this decision is being followed?"
- If an ADR has only one viable option, list it alone in
## Considered Options and explain in ## Decision Outcome why no alternatives were considered.
- DACI fields (
decision-makers, consulted, informed) are intentionally NOT emitted. Authorship is git's job (git log --follow <file>); single-author projects gain zero marginal information from per-record DACI block. If a project genuinely needs multi-decision-maker attestation, record it in ## More Information body prose, not frontmatter.
- The cross-corpus modifying-relations rule is enforced by
adr-review (and odr-review on the ODR side): supersedes: and implements: MUST be intra-corpus; depends-on: MAY cross corpora. The lint blocks PRs/commits that violate this.
- The
ADR- filename prefix is project-canonical, deviating from MADR's bare NNNN- form. The deviation buys unambiguous cross-corpus references (every ADR-NNNN and ODR-NNNN is self-identifying without context). Symmetric with the ODR side.
1---2name: adr-create3description: Create a new Architecture Decision Record with sequential numbering (ADR- prefixed filename) and AgentDB registration4---56# Create ADR78Create a new Architecture Decision Record with the next sequential number, register it in the AgentDB graph, and link it to related ADRs.910## When to use1112When a significant architectural decision needs to be recorded -- new technology adoption, API design choices, data model changes, infrastructure decisions, or any cross-cutting concern that affects multiple components.1314## Format1516ADRs follow canonical MADR 4.x (https://adr.github.io/madr/) with two project extensions:1718- A `tags:` frontmatter field for cross-cutting categorisation19- Three typed-relation frontmatter slots: `supersedes:`, `depends-on:`, `implements:`2021DACI fields (`decision-makers:`, `consulted:`, `informed:`) are NOT emitted (dropped per Council 415, 2026-05-09 — git log is the canonical authorship surface).2223- **Filename**: `docs/adr/ADR-NNNN-<slug>.md` — the project-canonical form. Every ADR file carries the `ADR-` prefix to make references unambiguous (both ADR and ODR corpora share the same numeric range; the prefix disambiguates without requiring context). 4-digit zero-padded number, lowercase kebab-case slug derived from the title.24 - This deviates slightly from canonical MADR (which uses bare `NNNN-slug.md`); the deviation is deliberate. Symmetric with `docs/ontology/odr/ODR-NNNN-<slug>.md` on the ODR side.25- **H1**: `# <Title>` — title only, NO `ADR-NNNN:` prefix. The number lives in the filename.26- **Metadata**: YAML frontmatter (NOT bullet-list metadata under H1).27- **Status enum**: `proposed | accepted | rejected | deprecated | superseded by ADR-NNNN`. Lowercase exactly as listed.28- **Required sections**: `## Context and Problem Statement`, `## Considered Options` (bullet list), `## Decision Outcome` containing `### Consequences` (flat bullets) and `### Confirmation`.29- **Optional sections**: `## Decision Drivers`, `## Pros and Cons of the Options` (with `### {Option}` per option), `## More Information`.30- **Optional named extensions** (after `## More Information` in trailing position, project-specific): `## Rules`, `## Vote and Dissent`, `## Amendments`, `## Mapping`. Use sparingly; the canonical sections do most of the work.3132## Typed-relation frontmatter (Council 414, 2026-05-09)3334The three predicates are flat lists of record IDs:3536| Slot | Semantics | Cross-corpus rule |37|---|---|---|38| `supersedes:` | Replaces — kills the prior | Intra-corpus only (ADR↔ADR; ODR↔ODR) |39| `depends-on:` | Cites — correctness/coherence requires the cited record to hold | Cross-corpus allowed (ADR↔ODR) |40| `implements:` | Realises — this ADR is the technical artefact realising a parent decision | Intra-corpus only (ADR→ADR) |4142Predicates dropped during the deliberation: `related` (Council 411 — too vague), the `kind:` qualifier on `depends-on` (Council 413 — record-type prefix already encodes the distinction), `amends` and `refines` (Council 414 — `supersedes` already covers the modifying case; `## Supersession scope:` body subsection captures partial supersession).4344Inverse properties (`superseded-by`, `depended-on-by`, `implemented-by`) are derived at index time by `adr-index` from the forward-direction edges. **Authoring inverses in frontmatter is forbidden** — single source of truth.4546For partial supersession, the superseding record carries a `## Supersession scope:` subsection inside `## Decision Outcome` describing what survives.4748## Steps49501. **Find next number** -- `Glob` for `docs/adr/ADR-*.md` and parse the 4-digit number (after the `ADR-` prefix) from each filename to determine the next sequential ID (e.g. `0226` if the highest existing is `0225`). Filter out non-ADR files (`README.md`, `INDEX.md`, `_template.md`) and subdirectories. Create `docs/adr/` if it does not exist.51522. **Slugify title** -- Convert the title argument to a lowercase, hyphen-separated slug (e.g., "Use PostgreSQL for persistence" becomes `use-postgresql-for-persistence`). Drop punctuation; collapse runs of hyphens.53543. **Create ADR file** -- `Write` the file at `docs/adr/ADR-NNNN-<slug>.md` (with the `ADR-` prefix) using the canonical MADR template:5556 ```markdown57 ---58 status: proposed59 date: <today's date YYYY-MM-DD>60 tags: []61 supersedes: []62 depends-on: []63 implements: []64 ---6566 # <Title>6768 ## Context and Problem Statement6970 <!-- What is the issue that motivates this decision? Describe the situation and the question. -->7172 ## Decision Drivers7374 <!-- Optional. Forces shaping the decision: constraints, qualities, stakeholder concerns. Bullet list. -->7576 * <driver 1>77 * <driver 2>7879 ## Considered Options8081 <!-- Bullet list of alternatives evaluated. One option per line. List the chosen option alongside rejected ones. -->8283 * <Option A> — <brief description>84 * <Option B> — <brief description>8586 ## Decision Outcome8788 Chosen option: "<Option A>", because <justification — why this option meets the decision drivers, satisfies the K.O. criteria, or comes out best>.8990 ### Consequences9192 <!-- Flat bullet list. Use canonical phrasing: "* Good, because …" / "* Bad, because …" / "* Neutral, because …" -->9394 * Good, because <positive consequence>95 * Bad, because <negative consequence>96 * Neutral, because <neutral consequence>9798 ### Confirmation99100 <!-- Optional. How compliance with this decision is verified (review, ArchUnit test, lint rule, etc.). -->101102 ## Pros and Cons of the Options103104 <!-- Optional. Per-option deliberation detail. H3 per option. -->105106 ### <Option A>107108 * Good, because <argument>109 * Bad, because <argument>110111 ### <Option B>112113 * Good, because <argument>114 * Bad, because <argument>115116 ## More Information117118 <!-- Optional. Links, related ADRs, supporting evidence. -->119 ```1201214. **Store in AgentDB** -- Call `mcp__ruflo__agentdb_hierarchical-store` with:122 - path: `adr/ADR-NNNN`123 - value: `{ "id": "ADR-NNNN", "title": "<title>", "status": "proposed", "date": "<today>", "tags": [], "supersedes": [], "depends-on": [], "implements": [], "file": "docs/adr/ADR-NNNN-<slug>.md" }`1241255. **Find related ADRs** -- Call `mcp__ruflo__memory_search` with the title as query in namespace `adr-patterns` to find related decisions. If matches found, add them to the `## More Information` section as human-readable references AND, if the match represents a typed dependency the new ADR will rely on, suggest adding the cited ADR to `depends-on:` or `implements:` (as appropriate).1261276. **Store pattern** -- Call `mcp__ruflo__memory_store` in namespace `adr-patterns` with key `ADR-NNNN` and the title + context as value for future semantic search.1281297. **Report** -- Output the created file path, ADR number, and any related ADRs found.130131## Notes132133- The `tags` frontmatter field is a project extension to canonical MADR for cross-cutting categorisation (e.g. `tags: [security, infrastructure]`). Optional — leave as `[]` if unused.134- For supersession, set `status: superseded` AND list the superseding ADR's ID in the new ADR's `supersedes:` slot. Reference the superseded ADR in `## More Information`. Both directions of the edge are derived by `adr-index` from `supersedes:` (forward) and emitted as `superseded-by` (inverse).135- The `### Confirmation` section is optional in canonical MADR but recommended — it answers "how do we know this decision is being followed?"136- If an ADR has only one viable option, list it alone in `## Considered Options` and explain in `## Decision Outcome` why no alternatives were considered.137- DACI fields (`decision-makers`, `consulted`, `informed`) are intentionally NOT emitted. Authorship is git's job (`git log --follow <file>`); single-author projects gain zero marginal information from per-record DACI block. If a project genuinely needs multi-decision-maker attestation, record it in `## More Information` body prose, not frontmatter.138- The cross-corpus modifying-relations rule is enforced by `adr-review` (and `odr-review` on the ODR side): `supersedes:` and `implements:` MUST be intra-corpus; `depends-on:` MAY cross corpora. The lint blocks PRs/commits that violate this.139- The `ADR-` filename prefix is project-canonical, deviating from MADR's bare `NNNN-` form. The deviation buys unambiguous cross-corpus references (every `ADR-NNNN` and `ODR-NNNN` is self-identifying without context). Symmetric with the ODR side.