Generate Architectural Decision Records (ADRs) following the MADR template with systematic completeness checking.
text
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ SEQUENCE │ ──▶ │ EXPLORE │ ──▶ │ FILL │
│ (get next │ │ (context, │ │ (template │
│ number) │ │ ADRs) │ │ sections) │
└─────────────┘ └──────────────┘ └─────────────┘
│ │
│ ▼
│ ┌─────────────┐
│ │ VERIFY │
│ │ (DoD │
└─────────────────────────────────│ checklist)│
└─────────────┘
Advance to the next step only when the pass condition holds. These replace “I explored” / “I verified” with checkable artifacts.
AfterPass conditionStep 2Pass: You have a written list (bullets in draft preamble, scratch notes, or the ADR body) of ≥0 paths under docs/adrs/ you consulted for related/superseded ADRs, or you explicitly record that docs/adrs/ is missing or empty after checking. And you list ≥1 repo path for related code or N/A with one-line reason.Step 5Pass: For each E, C, A, D, R in references/definition-of-done.md, the draft either meets that letter’s checklist or contains an [INVESTIGATE: …] marker scoped to that gap.Step 7Pass: The ADR file exists at docs/adrs/NNNN-slugified-title.md, and a read of the file shows line 1 is --- and frontmatter parses as YAML.
If a number was pre-assigned (e.g., when called from /beagle:write-adr with parallel writes):
If no number was pre-assigned (standalone use):
bash
python scripts/next_adr_number.py
This outputs the next available ADR number (e.g., 0003).
For parallel allocation (used by parent commands):
bash
python scripts/next_adr_number.py --count 3
# Outputs: 0003, 0004, 0005 (one per line)
Before writing, gather additional context:
docs/adrs/ for related or superseded decisionsGate: Meet the Step 2 row in Gates (objective pass conditions) before Step 3.
Load references/madr-template.md for the official MADR structure.
Populate each section from your decision data:
SectionSourceTitleDecision summary (imperative mood)StatusAlways draft initiallyContextProblem statement, constraintsDecision DriversPrioritized requirementsConsidered OptionsAll viable alternativesDecision OutcomeChosen option with rationaleConsequencesGood, bad, neutral impacts
Load references/definition-of-done.md and verify E.C.A.D.R. criteria:
Gate: Meet the Step 5 row in Gates (objective pass conditions) before Step 6 (use [INVESTIGATE: …] where data is missing).
For sections that cannot be filled from available data, insert investigation prompts:
markdown
* [INVESTIGATE: Review PR #42 discussion for additional drivers]
* [INVESTIGATE: Confirm with security team on compliance requirements]
* [INVESTIGATE: Benchmark performance of Option 2 vs Option 3]
These prompts signal incomplete sections for later follow-up.
IMPORTANT: Every ADR MUST start with YAML frontmatter.
The frontmatter block is REQUIRED and must include at minimum:
yaml
---
status: draft
date: YYYY-MM-DD
---
Full frontmatter template:
yaml
---
status: draft
date: 2024-01-15
decision-makers: [alice, bob]
consulted: []
informed: []
---
Validation: Before writing the file, verify the content starts with --- followed by valid YAML frontmatter. If frontmatter is missing, add it before writing.
Gate: After write, meet the Step 7 row in Gates (objective pass conditions) (file on disk, YAML frontmatter present).
Save to docs/adrs/NNNN-slugified-title.md:
text
docs/adrs/0003-use-postgresql-for-user-data.md
docs/adrs/0004-adopt-event-sourcing-pattern.md
docs/adrs/0005-migrate-to-kubernetes.md
After writing, confirm the file:
--- on the first linestatus: draft (or other valid status)date: YYYY-MM-DD with actual date--- before the titleFormat: NNNN-slugified-title.md
ComponentRuleNNNNZero-padded sequence number from script-Separatorslugified-titleLowercase, hyphens, no special characters.mdMarkdown extension
references/madr-template.md - Official MADR template structurereferences/definition-of-done.md - E.C.A.D.R. quality criteriamarkdown
---
status: draft
date: 2024-01-15
decision-makers: [alice, bob]
---
# Use PostgreSQL for User Data Storage
## Context and Problem Statement
We need a database for user account data...
## Decision Drivers
* Data integrity requirements
* Query flexibility needs
* [INVESTIGATE: Confirm scaling projections with infrastructure team]
## Considered Options
* PostgreSQL
* MongoDB
* CockroachDB
## Decision Outcome
Chosen option: PostgreSQL, because...
## Consequences
### Good
* ACID compliance ensures data integrity
### Bad
* Requires more upfront schema design
### Neutral
* Team has moderate PostgreSQL experience