Use when PRD/TRD contains architectural decisions to document - extracts decisions from refined requirements (architecture choices, data model decisions, API patterns, technology selections,...
Extract architectural decisions from PRDs/TRDs and generate MADR (Markdown Any Decision Record) format ADR documents.
Step 1: Find the source PRD/TRD
Read the PRD directory or file provided by user.
Step 2: Check for existing ADRs
# Look for existing ADR directory at project level
ls -la <project>/adrs/ <project>/docs/adrs/ 2>/dev/null
If ADRs exist, determine next sequence number. If not, start at 0001.
Step 3: Determine output location
ADRs go in <project>/adrs/ directory (project level, NOT inside PRD folder).
Example: PRD at /Works/tada/bridge/agent-workflow/requirements/ → ADRs at /Works/tada/bridge/adrs/
Scan PRD for decision patterns. See references/decision-patterns.md for full taxonomy.
Decision Types to Extract:
| Type | Signals | Often Missed? |
|---|---|---|
| Architecture | ASCII diagrams, "→", "async vs sync" | No |
| Data Model | "Key Design Decision", schema diagrams | No |
| API Design | "Internal API", auth patterns | Yes |
| Technology | "Uses Redis", TTL values | No |
| Integration | "Each X in own transaction", retry patterns | Yes |
| Business Logic | "Before/After", "Once per X not Y" | No |
| Reuse Patterns | "Hybrid approach", "Reuse existing" | Yes |
Critical: Check for commonly missed decisions:
For each decision, assess if it warrants own ADR:
Create separate ADR when:
Combine into single ADR when:
Skip ADR when:
Use MADR format from references/madr-template.md.
Required sections (baseline test showed these are often missing):
---
status: accepted
date: YYYY-MM-DD
---
# ADR-NNNN: Title
## Status
{proposed | accepted | deprecated | superseded by ADR-XXXX}
## Context and Problem Statement
{WHY was this decision needed - 2-3 sentences}
## Decision Drivers
- {Driver 1}
- {Driver 2}
## Considered Options
1. {Option 1}
2. {Option 2}
## Decision Outcome
Chosen option: "{Option X}", because {justification}.
### Consequences
- Good, because {positive impact}
- Bad, because {negative impact}
- Neutral, because {neutral impact}
Consequence format is critical - always use:
Good, because {specific positive}Bad, because {specific negative}Neutral, because {neither positive nor negative}Generate adrs/README.md:
# Architecture Decision Records
| ID | Title | Status | Date |
|----|-------|--------|------|
| [ADR-0001](ADR-0001-decision-title.md) | Decision Title | Accepted | YYYY-MM-DD |
| [ADR-0002](ADR-0002-another-decision.md) | Another Decision | Accepted | YYYY-MM-DD |
Directory structure:
<project>/adrs/
README.md # Index
ADR-0001-first-decision.md
ADR-0002-second-decision.md
Naming convention:
ADR-0001 not ADR-001ADR-0001-use-async-queue.md# ADR-0001: Use Async Queue| Aspect | Correct | Incorrect |
|---|---|---|
| Location | <project>/adrs/ |
<prd-folder>/adr/ |
| Numbering | ADR-0001 (4 digits) |
ADR-001 (3 digits) |
| Consequences | Good, because... |
Free-form text |
| Frontmatter | Include status, date |
None |
| Options | At least 2 listed | Only chosen option |
| Mistake | Fix |
|---|---|
| Missing "Considered Options" | Always list 2+ options, even if one was obvious |
| Free-form consequences | Use "Good/Bad/Neutral, because" format |
| Missing reuse decisions | Check for "hybrid", "reuse", "thin wrapper" |
| ADRs in PRD folder | Put at project level <project>/adrs/ |
| 3-digit numbering | Use 4 digits: ADR-0001 |
| Missing context | Explain WHY decision was needed, not just what |
references/madr-template.md - Full and minimal templatesreferences/decision-patterns.md - How to identify decisionsreferences/extraction-examples.md - PRD → ADR transformations