claude-blueprint 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +26 -0
- package/LICENSE +21 -0
- package/README.md +387 -0
- package/agents/adr-architect-cartographer.md +179 -0
- package/agents/adr-bug-surface-mapper.md +154 -0
- package/agents/adr-compliance-auditor.md +146 -0
- package/agents/adr-consistency-auditor.md +131 -0
- package/agents/adr-conways-law-analyzer.md +170 -0
- package/agents/adr-devils-advocate.md +161 -0
- package/agents/adr-impact-analyzer.md +135 -0
- package/agents/adr-maintainability-assessor.md +162 -0
- package/agents/adr-researcher.md +134 -0
- package/agents/adr-retrospective.md +204 -0
- package/agents/adr-testing-strategy-evaluator.md +164 -0
- package/agents/persona.md +36 -0
- package/bin/cli.js +33 -0
- package/commands/architect.md +66 -0
- package/commands/audit.md +41 -0
- package/commands/blueprint.md +63 -0
- package/commands/debt.md +102 -0
- package/commands/digest.md +106 -0
- package/commands/drift.md +104 -0
- package/commands/eli5.md +149 -0
- package/commands/evaluate.md +61 -0
- package/commands/fitness.md +119 -0
- package/commands/guard.md +102 -0
- package/commands/health.md +139 -0
- package/commands/help.md +119 -0
- package/commands/hooks.md +131 -0
- package/commands/impact.md +38 -0
- package/commands/init.md +229 -0
- package/commands/list.md +51 -0
- package/commands/new.md +74 -0
- package/commands/rearchitect.md +45 -0
- package/commands/retro.md +50 -0
- package/commands/review.md +50 -0
- package/commands/search.md +28 -0
- package/commands/status.md +189 -0
- package/commands/timeline.md +113 -0
- package/commands/transition.md +83 -0
- package/config/lifecycle.toml +71 -0
- package/config/relationships.toml +22 -0
- package/config/state.toml +21 -0
- package/config/taxonomy.toml +118 -0
- package/package.json +27 -0
- package/src/claude-md.js +57 -0
- package/src/install.js +83 -0
- package/src/paths.js +25 -0
- package/src/verify.js +95 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: blueprint:status
|
|
3
|
+
description: >
|
|
4
|
+
Architecture governance dashboard with visual knowledge graph. Shows ADR status overview,
|
|
5
|
+
decision debt score, operation history, relationship graph, and governance health metrics
|
|
6
|
+
in an IDE-like interface. Use when: "blueprint status", "architecture dashboard", "show
|
|
7
|
+
governance health", "adr graph", "decision graph", "how are our decisions?", or just
|
|
8
|
+
"status".
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Architecture Governance Dashboard
|
|
12
|
+
|
|
13
|
+
Renders a rich, visual governance dashboard with a knowledge graph of ADR relationships.
|
|
14
|
+
Two output modes: terminal (structured text) and browser (interactive HTML).
|
|
15
|
+
|
|
16
|
+
## Shared Context
|
|
17
|
+
|
|
18
|
+
Read from parent `blueprint/` skill directory:
|
|
19
|
+
- `config/state.toml` — last operation dates, ADR directory
|
|
20
|
+
- `config/relationships.toml` — ADR dependency graph
|
|
21
|
+
- `config/lifecycle.toml` — status definitions
|
|
22
|
+
- `config/taxonomy.toml` — severity levels, categories
|
|
23
|
+
|
|
24
|
+
## Process
|
|
25
|
+
|
|
26
|
+
### Step 1: Gather All Metrics
|
|
27
|
+
|
|
28
|
+
**ADR inventory:**
|
|
29
|
+
- Read all ADR files, extract status, date, category, severity
|
|
30
|
+
- Count by status: Accepted, Proposed, Rejected, Deferred, Deprecated, Superseded
|
|
31
|
+
- Identify the most recent ADR and oldest unreviewed Proposed ADR
|
|
32
|
+
|
|
33
|
+
**Decision debt:**
|
|
34
|
+
- Count Deferred ADRs
|
|
35
|
+
- For each, check trigger conditions against codebase (same logic as `/blueprint:debt`)
|
|
36
|
+
- Calculate debt score: Σ(severity × age_months × dependency_count)
|
|
37
|
+
- Flag any with triggered conditions
|
|
38
|
+
|
|
39
|
+
**Operations recency:**
|
|
40
|
+
- From `config/state.toml`: last audit, evaluation, retro, drift check dates
|
|
41
|
+
- Calculate days since each
|
|
42
|
+
|
|
43
|
+
**Relationship graph:**
|
|
44
|
+
- From `config/relationships.toml`: nodes (ADRs) and edges (dependencies, conflicts, supersessions)
|
|
45
|
+
- If graph is empty/sparse, suggest running `/blueprint:impact` on key ADRs to populate it
|
|
46
|
+
|
|
47
|
+
**Fitness function coverage:**
|
|
48
|
+
- Glob for `tests/architecture/` or equivalent
|
|
49
|
+
- Count how many accepted ADRs have corresponding fitness functions
|
|
50
|
+
- Calculate coverage percentage
|
|
51
|
+
|
|
52
|
+
**Guard status:**
|
|
53
|
+
- Check if pre-commit hook is installed (grep settings.json or .git/hooks/)
|
|
54
|
+
|
|
55
|
+
### Step 2: Render Terminal Dashboard
|
|
56
|
+
|
|
57
|
+
Always display this first:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
61
|
+
BLUEPRINT ► STATUS
|
|
62
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
63
|
+
|
|
64
|
+
## Decisions
|
|
65
|
+
|
|
66
|
+
Accepted ██████████████████████████████ 28
|
|
67
|
+
Proposed ██ 2 ← needs review
|
|
68
|
+
Deferred █ 1 ← 1 trigger met
|
|
69
|
+
Rejected ░ 0
|
|
70
|
+
Superseded ░ 0
|
|
71
|
+
Total: 31
|
|
72
|
+
|
|
73
|
+
## Governance Health
|
|
74
|
+
|
|
75
|
+
| Metric | Value | Status |
|
|
76
|
+
|---------------------|-------------|--------|
|
|
77
|
+
| Decision debt score | 14 | ⚠ |
|
|
78
|
+
| Last audit | 12 days ago | ✓ |
|
|
79
|
+
| Last evaluation | never | ✗ |
|
|
80
|
+
| Last retro | 3 days ago | ✓ |
|
|
81
|
+
| Last drift check | never | ✗ |
|
|
82
|
+
| Fitness coverage | 8/12 (67%) | ⚠ |
|
|
83
|
+
| Guard hook | not installed| ✗ |
|
|
84
|
+
|
|
85
|
+
## Relationship Graph (text)
|
|
86
|
+
|
|
87
|
+
ADR-0002 (React+FastAPI) ◄── ADR-0003 (two-stage pipeline)
|
|
88
|
+
│ │
|
|
89
|
+
└── ADR-0008 (constrain └── ADR-0005 (persona)
|
|
90
|
+
to ICD-10-AM)
|
|
91
|
+
|
|
92
|
+
ADR-0006 (defer auth) ···· DEFERRED [trigger: user count >50]
|
|
93
|
+
|
|
94
|
+
Clusters: 3 connected components, 2 isolated ADRs
|
|
95
|
+
|
|
96
|
+
## Suggested Actions
|
|
97
|
+
|
|
98
|
+
1. /blueprint:review 29 — Proposed ADR awaiting review
|
|
99
|
+
2. /blueprint:evaluate — No evaluation on record
|
|
100
|
+
3. /blueprint:debt — 1 deferred trigger appears met
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Step 3: Generate Interactive HTML Dashboard
|
|
104
|
+
|
|
105
|
+
After the terminal display, generate an interactive HTML file with a visual knowledge
|
|
106
|
+
graph and offer to open it:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# Write to a temp file and open
|
|
110
|
+
/tmp/blueprint-dashboard-{timestamp}.html
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**The HTML dashboard includes:**
|
|
114
|
+
|
|
115
|
+
**Tab 1: Knowledge Graph (main view)**
|
|
116
|
+
|
|
117
|
+
An interactive graph visualization using inline JavaScript (no external dependencies):
|
|
118
|
+
- **Nodes** = ADRs, colored by status:
|
|
119
|
+
- Accepted: blue
|
|
120
|
+
- Proposed: yellow
|
|
121
|
+
- Deferred: orange
|
|
122
|
+
- Rejected: gray
|
|
123
|
+
- Deprecated: faded gray
|
|
124
|
+
- Superseded: gray with strikethrough
|
|
125
|
+
- **Node size** = severity (High = large, Medium = medium, Low = small)
|
|
126
|
+
- **Edges** = relationships, styled by type:
|
|
127
|
+
- DEPENDS_ON: solid arrow
|
|
128
|
+
- CONFLICTS: red dashed line
|
|
129
|
+
- SUPERSEDES: thick arrow with ×
|
|
130
|
+
- MODIFIES_SCOPE: dotted arrow
|
|
131
|
+
- RELATED: thin gray line
|
|
132
|
+
- **Hover** on a node: show ADR title, status, date, category
|
|
133
|
+
- **Click** on a node: show full ADR summary in a side panel
|
|
134
|
+
- **Clusters** visually grouped by category (Technology, Architecture, etc.)
|
|
135
|
+
- **Force-directed layout** using simple physics simulation
|
|
136
|
+
|
|
137
|
+
Use a self-contained SVG or Canvas renderer — no D3.js or external CDN.
|
|
138
|
+
The file must work offline with zero dependencies.
|
|
139
|
+
|
|
140
|
+
**Tab 2: Decision Timeline**
|
|
141
|
+
|
|
142
|
+
Horizontal timeline showing ADRs by date:
|
|
143
|
+
- Color-coded by status
|
|
144
|
+
- Supersession chains shown as connecting arcs
|
|
145
|
+
- Hover for details
|
|
146
|
+
|
|
147
|
+
**Tab 3: Governance Metrics**
|
|
148
|
+
|
|
149
|
+
The same metrics as the terminal dashboard but with:
|
|
150
|
+
- Sparkline-style history (from state.toml evaluation/retro history)
|
|
151
|
+
- Color-coded health indicators
|
|
152
|
+
- Clickable actions that copy the relevant `/blueprint:` command
|
|
153
|
+
|
|
154
|
+
**Tab 4: Decision Debt**
|
|
155
|
+
|
|
156
|
+
Table of deferred decisions with:
|
|
157
|
+
- Trigger conditions and their status (met/approaching/not yet)
|
|
158
|
+
- Debt score with color coding
|
|
159
|
+
- Age in days
|
|
160
|
+
- Dependency count
|
|
161
|
+
|
|
162
|
+
### Step 4: Open Dashboard
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# Write HTML to temp file
|
|
166
|
+
# Open in browser (platform-specific)
|
|
167
|
+
open /tmp/blueprint-dashboard-{timestamp}.html # macOS
|
|
168
|
+
xdg-open /tmp/blueprint-dashboard-{timestamp}.html # Linux
|
|
169
|
+
start /tmp/blueprint-dashboard-{timestamp}.html # Windows
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Tell the user: "Dashboard opened in your browser. The terminal summary above is always
|
|
173
|
+
available without the browser."
|
|
174
|
+
|
|
175
|
+
### Step 5: Update State
|
|
176
|
+
|
|
177
|
+
Set `last_status_check` in `config/state.toml` to today.
|
|
178
|
+
|
|
179
|
+
## Fallback
|
|
180
|
+
|
|
181
|
+
If the project has no ADRs yet, show:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
185
|
+
BLUEPRINT ► STATUS
|
|
186
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
187
|
+
|
|
188
|
+
No ADRs found. Run /blueprint:init to bootstrap from existing context.
|
|
189
|
+
```
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: blueprint:timeline
|
|
3
|
+
description: >
|
|
4
|
+
Generate a narrative timeline of architectural evolution through ADR history. Shows how
|
|
5
|
+
decisions built on each other, when things changed, and the arc of the architecture. Use
|
|
6
|
+
when: "show architecture timeline", "decision history", "how did we get here?", "architecture
|
|
7
|
+
evolution", "timeline of decisions", or for onboarding and strategic planning.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Architecture Evolution Timeline
|
|
11
|
+
|
|
12
|
+
The story of how the architecture evolved, told through its decisions. Not a git log —
|
|
13
|
+
the narrative arc that explains how each decision enabled or constrained the next.
|
|
14
|
+
|
|
15
|
+
## Shared Context
|
|
16
|
+
|
|
17
|
+
Read from parent `blueprint/` skill directory:
|
|
18
|
+
- `config/state.toml` — ADR directory
|
|
19
|
+
- `config/relationships.toml` — supersession chains, dependencies
|
|
20
|
+
|
|
21
|
+
## Process
|
|
22
|
+
|
|
23
|
+
### Step 1: Read and Sort
|
|
24
|
+
|
|
25
|
+
Read all ADR files. Extract:
|
|
26
|
+
- ADR number, title, status
|
|
27
|
+
- Date proposed and date decided
|
|
28
|
+
- Supersedes/superseded-by relationships
|
|
29
|
+
- Category from taxonomy
|
|
30
|
+
|
|
31
|
+
Sort chronologically by date proposed.
|
|
32
|
+
|
|
33
|
+
### Step 2: Identify Eras
|
|
34
|
+
|
|
35
|
+
Group decisions into eras — periods where related decisions clustered:
|
|
36
|
+
|
|
37
|
+
- **Foundation era:** First decisions that established the base (stack, architecture, deployment)
|
|
38
|
+
- **Feature eras:** Groups of decisions related to specific capabilities
|
|
39
|
+
- **Pivot points:** Superseded decisions that mark a change in direction
|
|
40
|
+
- **Current era:** Recent and pending decisions
|
|
41
|
+
|
|
42
|
+
### Step 3: Build the Narrative
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
46
|
+
BLUEPRINT ► ARCHITECTURE TIMELINE
|
|
47
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
48
|
+
|
|
49
|
+
## [Era 1: Foundation] — [date range]
|
|
50
|
+
|
|
51
|
+
[Narrative paragraph: what was decided and why, how decisions
|
|
52
|
+
connected to each other]
|
|
53
|
+
|
|
54
|
+
[date] ── ADR-0001: [title] ✓ Accepted
|
|
55
|
+
└── ADR-0002: [title] ✓ Accepted
|
|
56
|
+
└── ADR-0003: [title] ✓ Accepted
|
|
57
|
+
└── ADR-0008: [title] (depends on) ✓ Accepted
|
|
58
|
+
|
|
59
|
+
[1-2 sentences: what this era established and what it enabled]
|
|
60
|
+
|
|
61
|
+
## [Era 2: ...] — [date range]
|
|
62
|
+
|
|
63
|
+
[date] ── ADR-0009: [title] ✓ Accepted
|
|
64
|
+
[date] ── ADR-0010: [title] ✗ Rejected
|
|
65
|
+
└── ADR-0011: [title] (replaced 0010) ✓ Accepted
|
|
66
|
+
|
|
67
|
+
[Note rejections and supersessions — these are the most interesting
|
|
68
|
+
parts of the story. Why did the team change direction?]
|
|
69
|
+
|
|
70
|
+
## Pivot Points
|
|
71
|
+
|
|
72
|
+
[Decisions that marked a significant change in direction:]
|
|
73
|
+
|
|
74
|
+
- **[date]: ADR-NNNN superseded ADR-MMMM** — [why the original decision
|
|
75
|
+
was replaced and what changed in the understanding]
|
|
76
|
+
|
|
77
|
+
## Current State
|
|
78
|
+
|
|
79
|
+
Active decisions: [N]
|
|
80
|
+
Pending review: [M]
|
|
81
|
+
Deferred: [K] (with triggers)
|
|
82
|
+
Superseded: [J]
|
|
83
|
+
|
|
84
|
+
## What's Next
|
|
85
|
+
|
|
86
|
+
[Based on deferred decisions, pending proposals, and decision debt:]
|
|
87
|
+
- [Decision that's coming up]
|
|
88
|
+
- [Trigger that's approaching]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Step 4: Visualize Supersession Chains
|
|
92
|
+
|
|
93
|
+
If any ADRs have been superseded, show the chain:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
ADR-0003 (original) ──superseded by──→ ADR-0015 ──superseded by──→ ADR-0022 (current)
|
|
97
|
+
"Use Redis" "Use Memcached" "Use built-in cache"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
These chains tell the story of how understanding evolved.
|
|
101
|
+
|
|
102
|
+
### Step 5: Connect to Relationship Graph
|
|
103
|
+
|
|
104
|
+
Use `config/relationships.toml` to show dependency clusters — groups of
|
|
105
|
+
ADRs that must be considered together. A dependency cluster is a set
|
|
106
|
+
of decisions where changing one requires reviewing all the others.
|
|
107
|
+
|
|
108
|
+
## Tone
|
|
109
|
+
|
|
110
|
+
This is a story, not a report. It should read like a project retrospective
|
|
111
|
+
written by someone who understands why things happened, not just what happened.
|
|
112
|
+
The senior engineer persona applies but with a historian's perspective —
|
|
113
|
+
connecting cause and effect across time.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: blueprint:transition
|
|
3
|
+
description: >
|
|
4
|
+
Direct lifecycle transitions for ADRs — accept, reject, defer, or deprecate without spawning
|
|
5
|
+
agents. Use when: "accept adr N", "reject adr N", "defer adr N", "deprecate adr N". For
|
|
6
|
+
review with devil's advocate challenge, use /blueprint:review instead. For superseding, use
|
|
7
|
+
/blueprint:rearchitect instead.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# ADR Lifecycle Transitions
|
|
11
|
+
|
|
12
|
+
Handle simple status transitions inline — no agent spawning. Read the state machine from
|
|
13
|
+
`config/lifecycle.toml` to validate transitions and requirements.
|
|
14
|
+
|
|
15
|
+
## Shared Context
|
|
16
|
+
|
|
17
|
+
Read from parent `adr/` directory:
|
|
18
|
+
- `config/lifecycle.toml` — valid transitions, requirements, error messages
|
|
19
|
+
- `config/state.toml` — ADR directory location
|
|
20
|
+
- `config/relationships.toml` — for updating edges on supersession
|
|
21
|
+
|
|
22
|
+
## Supported Transitions
|
|
23
|
+
|
|
24
|
+
### Accept (`/blueprint:transition accept N`)
|
|
25
|
+
|
|
26
|
+
Proposed → Accepted per `lifecycle.toml`.
|
|
27
|
+
|
|
28
|
+
1. Read the ADR, verify status is Proposed
|
|
29
|
+
2. Set status to `Accepted`
|
|
30
|
+
3. Set `Date decided` to today
|
|
31
|
+
4. Update README.md index
|
|
32
|
+
5. Commit: `docs(adr): accept ADR-NNNN <title>`
|
|
33
|
+
|
|
34
|
+
### Reject (`/blueprint:transition reject N`)
|
|
35
|
+
|
|
36
|
+
Proposed → Rejected per `lifecycle.toml`.
|
|
37
|
+
|
|
38
|
+
1. Read the ADR, verify status is Proposed
|
|
39
|
+
2. Ask for rejection reason
|
|
40
|
+
3. Append reason to Consequences section
|
|
41
|
+
4. Set status to `Rejected`
|
|
42
|
+
5. Update README.md index
|
|
43
|
+
6. Commit: `docs(adr): reject ADR-NNNN <title>`
|
|
44
|
+
|
|
45
|
+
### Defer (`/blueprint:transition defer N`)
|
|
46
|
+
|
|
47
|
+
Proposed → Deferred per `lifecycle.toml`.
|
|
48
|
+
|
|
49
|
+
1. Read the ADR, verify status is Proposed
|
|
50
|
+
2. Ask for trigger condition (when to revisit)
|
|
51
|
+
3. Add trigger to metadata
|
|
52
|
+
4. Set status to `Deferred`
|
|
53
|
+
5. Update README.md index
|
|
54
|
+
6. Commit: `docs(adr): defer ADR-NNNN <title>`
|
|
55
|
+
|
|
56
|
+
### Deprecate (`/blueprint:transition deprecate N`)
|
|
57
|
+
|
|
58
|
+
Accepted → Deprecated per `lifecycle.toml`.
|
|
59
|
+
|
|
60
|
+
1. Read the ADR, verify status is Accepted
|
|
61
|
+
2. Ask for deprecation reason
|
|
62
|
+
3. Add deprecation note with date
|
|
63
|
+
4. Set status to `Deprecated`
|
|
64
|
+
5. Update README.md index
|
|
65
|
+
6. Commit: `docs(adr): deprecate ADR-NNNN <title>`
|
|
66
|
+
|
|
67
|
+
## Invalid Transitions
|
|
68
|
+
|
|
69
|
+
Read `lifecycle.toml.invalid_transitions` for error messages. Present the message and
|
|
70
|
+
suggest the correct action:
|
|
71
|
+
- Rejected → Accepted: "Create a new ADR instead"
|
|
72
|
+
- Proposed → Superseded: "Accept or reject first, then use /blueprint:rearchitect"
|
|
73
|
+
- Proposed → Deprecated: "Use /blueprint:transition reject instead"
|
|
74
|
+
|
|
75
|
+
## Index Management
|
|
76
|
+
|
|
77
|
+
Every transition updates the README.md index table. Preserve all other content (lifecycle
|
|
78
|
+
diagram, process docs, etc.). Only modify the row for the affected ADR.
|
|
79
|
+
|
|
80
|
+
## Shorthand Support
|
|
81
|
+
|
|
82
|
+
Users may say "accept adr 3" without the full `/blueprint:transition accept 3` path. The root
|
|
83
|
+
`/blueprint` skill should route these to this sub-skill.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# ADR Lifecycle State Machine
|
|
2
|
+
# Agents read this instead of hardcoding lifecycle rules in prose.
|
|
3
|
+
|
|
4
|
+
[statuses.Proposed]
|
|
5
|
+
description = "Decision is drafted and open for discussion. Not yet binding."
|
|
6
|
+
terminal = false
|
|
7
|
+
requires_review = true
|
|
8
|
+
|
|
9
|
+
[statuses.Accepted]
|
|
10
|
+
description = "Decision has been reviewed, approved, and is in effect."
|
|
11
|
+
terminal = false
|
|
12
|
+
|
|
13
|
+
[statuses.Rejected]
|
|
14
|
+
description = "Decision was considered but not adopted. Context preserved."
|
|
15
|
+
terminal = true
|
|
16
|
+
|
|
17
|
+
[statuses.Deferred]
|
|
18
|
+
description = "Decision acknowledged but postponed. Revisit at trigger point."
|
|
19
|
+
terminal = false
|
|
20
|
+
requires_trigger = true
|
|
21
|
+
|
|
22
|
+
[statuses.Deprecated]
|
|
23
|
+
description = "Decision was once accepted but is no longer relevant."
|
|
24
|
+
terminal = true
|
|
25
|
+
requires_reason = true
|
|
26
|
+
|
|
27
|
+
[statuses.Superseded]
|
|
28
|
+
description = "Decision has been replaced by a newer ADR."
|
|
29
|
+
terminal = true
|
|
30
|
+
requires_successor = true
|
|
31
|
+
|
|
32
|
+
# Valid transitions: "From -> To"
|
|
33
|
+
|
|
34
|
+
[transitions."Proposed -> Accepted"]
|
|
35
|
+
action = "accept"
|
|
36
|
+
requires = ["review_or_explicit_accept"]
|
|
37
|
+
side_effects = ["set_date_decided", "update_index"]
|
|
38
|
+
|
|
39
|
+
[transitions."Proposed -> Rejected"]
|
|
40
|
+
action = "reject"
|
|
41
|
+
requires = ["rejection_reason"]
|
|
42
|
+
side_effects = ["append_reason_to_consequences", "update_index"]
|
|
43
|
+
|
|
44
|
+
[transitions."Proposed -> Deferred"]
|
|
45
|
+
action = "defer"
|
|
46
|
+
requires = ["trigger_condition"]
|
|
47
|
+
side_effects = ["add_trigger_to_metadata", "update_index"]
|
|
48
|
+
|
|
49
|
+
[transitions."Accepted -> Deprecated"]
|
|
50
|
+
action = "deprecate"
|
|
51
|
+
requires = ["deprecation_reason"]
|
|
52
|
+
side_effects = ["add_deprecation_note", "update_index"]
|
|
53
|
+
|
|
54
|
+
[transitions."Accepted -> Superseded"]
|
|
55
|
+
action = "supersede"
|
|
56
|
+
requires = ["successor_adr_number"]
|
|
57
|
+
side_effects = ["cross_link_adrs", "update_index_both"]
|
|
58
|
+
|
|
59
|
+
[transitions."Deferred -> Proposed"]
|
|
60
|
+
action = "revisit"
|
|
61
|
+
requires = ["trigger_met"]
|
|
62
|
+
side_effects = ["update_index"]
|
|
63
|
+
|
|
64
|
+
# Invalid transitions with error messages
|
|
65
|
+
|
|
66
|
+
[invalid_transitions]
|
|
67
|
+
"Rejected -> Accepted" = "Cannot accept a rejected ADR. Create a new one instead."
|
|
68
|
+
"Proposed -> Superseded" = "Cannot supersede a proposed ADR. Accept or reject it first."
|
|
69
|
+
"Proposed -> Deprecated" = "Cannot deprecate a proposed ADR. Reject it instead."
|
|
70
|
+
"Deprecated -> Accepted" = "Cannot re-accept a deprecated ADR. Create a new one."
|
|
71
|
+
"Superseded -> Accepted" = "Cannot un-supersede an ADR. The successor is the active decision."
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# ADR Relationship Graph
|
|
2
|
+
# Built incrementally by the impact analyzer and lifecycle transitions.
|
|
3
|
+
# Run /adr:impact to rebuild edges for a specific ADR.
|
|
4
|
+
|
|
5
|
+
# Edge types:
|
|
6
|
+
# DEPENDS_ON = "Target ADR assumes this ADR remains valid"
|
|
7
|
+
# CONFLICTS = "Target ADR contradicts this ADR"
|
|
8
|
+
# MODIFIES_SCOPE = "Target ADR changes or narrows scope of this ADR"
|
|
9
|
+
# SUPERSEDES = "Target ADR replaces this ADR"
|
|
10
|
+
# RELATED = "ADRs are topically related but independent"
|
|
11
|
+
|
|
12
|
+
# Nodes are added when ADRs are created:
|
|
13
|
+
# [nodes.ADR-0001]
|
|
14
|
+
# title = "Use ADRs for architectural decisions"
|
|
15
|
+
# status = "Accepted"
|
|
16
|
+
|
|
17
|
+
# Edges are added by impact analyzer:
|
|
18
|
+
# [[edges]]
|
|
19
|
+
# from = "ADR-0003"
|
|
20
|
+
# to = "ADR-0008"
|
|
21
|
+
# type = "DEPENDS_ON"
|
|
22
|
+
# detail = "Code constraint ADR depends on pipeline architecture ADR"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# ADR System State
|
|
2
|
+
# Auto-updated by ADR skill commands. Do not edit manually unless resetting state.
|
|
3
|
+
|
|
4
|
+
adr_directory = ""
|
|
5
|
+
project_root = ""
|
|
6
|
+
|
|
7
|
+
[last_operations]
|
|
8
|
+
last_audit = ""
|
|
9
|
+
last_evaluation = ""
|
|
10
|
+
last_retro = ""
|
|
11
|
+
last_adr_created = ""
|
|
12
|
+
|
|
13
|
+
# Append entries as: [[evaluation_history]]
|
|
14
|
+
# date = "2026-03-30"
|
|
15
|
+
# dimensions = ["consistency", "bugs", "maintainability", "testing", "conways"]
|
|
16
|
+
# health_score = "ADEQUATE"
|
|
17
|
+
|
|
18
|
+
# Append entries as: [[retro_history]]
|
|
19
|
+
# date = "2026-03-30"
|
|
20
|
+
# verdict = "BAND-AID"
|
|
21
|
+
# adr_created = "0009"
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# ADR Domain Taxonomy
|
|
2
|
+
# Extensible classification system used by agents. Add categories as the project evolves.
|
|
3
|
+
|
|
4
|
+
# --- Root Cause Categories (used by /adr:retro) ---
|
|
5
|
+
|
|
6
|
+
[root_causes.missing_validation]
|
|
7
|
+
label = "Missing Validation"
|
|
8
|
+
description = "Input wasn't checked at a boundary"
|
|
9
|
+
examples = ["No null check on API response", "Missing schema validation on webhook payload"]
|
|
10
|
+
prevention = "Validation layer at system boundaries"
|
|
11
|
+
|
|
12
|
+
[root_causes.implicit_contract]
|
|
13
|
+
label = "Implicit Contract"
|
|
14
|
+
description = "Two modules depended on undocumented behavior"
|
|
15
|
+
examples = ["Service A assumed Service B always returns arrays", "Module depends on import side effects"]
|
|
16
|
+
prevention = "Explicit interfaces with typed contracts"
|
|
17
|
+
|
|
18
|
+
[root_causes.state_management]
|
|
19
|
+
label = "State Management"
|
|
20
|
+
description = "Mutable state got out of sync"
|
|
21
|
+
examples = ["Cache held stale config after update", "Race condition between concurrent writes"]
|
|
22
|
+
prevention = "Immutable state or explicit synchronization"
|
|
23
|
+
|
|
24
|
+
[root_causes.error_swallowing]
|
|
25
|
+
label = "Error Swallowing"
|
|
26
|
+
description = "Error was caught and silently ignored"
|
|
27
|
+
examples = ["catch (e) {} hiding connection failures", "Promise without .catch()"]
|
|
28
|
+
prevention = "Explicit error handling with logging at every catch"
|
|
29
|
+
|
|
30
|
+
[root_causes.missing_abstraction]
|
|
31
|
+
label = "Missing Abstraction"
|
|
32
|
+
description = "Same logic duplicated, one copy drifted"
|
|
33
|
+
examples = ["Three files parsing dates differently", "Duplicated auth checks with different rules"]
|
|
34
|
+
prevention = "Single source of truth for shared logic"
|
|
35
|
+
|
|
36
|
+
[root_causes.wrong_abstraction]
|
|
37
|
+
label = "Wrong Abstraction"
|
|
38
|
+
description = "Abstraction doesn't fit the actual use case"
|
|
39
|
+
examples = ["Generic handler that special-cases 80% of inputs", "Base class with one implementation"]
|
|
40
|
+
prevention = "Refactor when abstraction obscures more than it simplifies"
|
|
41
|
+
|
|
42
|
+
[root_causes.configuration_drift]
|
|
43
|
+
label = "Configuration Drift"
|
|
44
|
+
description = "Environment-specific behavior not captured in code"
|
|
45
|
+
examples = ["Works locally, breaks in prod", "Hardcoded dev URLs in config"]
|
|
46
|
+
prevention = "Environment parity with infrastructure-as-code"
|
|
47
|
+
|
|
48
|
+
[root_causes.dependency_coupling]
|
|
49
|
+
label = "Dependency Coupling"
|
|
50
|
+
description = "Change in dependency broke assumptions"
|
|
51
|
+
examples = ["Library update changed default behavior", "Transitive dependency conflict"]
|
|
52
|
+
prevention = "Pin versions, wrap external dependencies, test upgrades"
|
|
53
|
+
|
|
54
|
+
[root_causes.missing_test]
|
|
55
|
+
label = "Missing Test"
|
|
56
|
+
description = "No test existed for this scenario"
|
|
57
|
+
examples = ["Happy path tested, error path not", "No regression test after previous fix"]
|
|
58
|
+
prevention = "Anti-pattern tests and boundary testing"
|
|
59
|
+
|
|
60
|
+
[root_causes.architectural_gap]
|
|
61
|
+
label = "Architectural Gap"
|
|
62
|
+
description = "System structure makes this bug class inevitable"
|
|
63
|
+
examples = ["No validation layer between external data and business logic", "No circuit breaker on external calls"]
|
|
64
|
+
prevention = "ADR to address the structural gap"
|
|
65
|
+
|
|
66
|
+
# --- Evaluation Dimensions (used by /adr:evaluate) ---
|
|
67
|
+
|
|
68
|
+
[eval_dimensions.consistency]
|
|
69
|
+
label = "Structural Consistency"
|
|
70
|
+
agent = "adr-consistency-auditor"
|
|
71
|
+
aspects = ["naming", "module_structure", "dependency_direction", "error_handling", "api_patterns", "configuration"]
|
|
72
|
+
|
|
73
|
+
[eval_dimensions.bugs]
|
|
74
|
+
label = "Bug Surface"
|
|
75
|
+
agent = "adr-bug-surface-mapper"
|
|
76
|
+
aspects = ["complexity_hotspots", "coupling", "boundary_integrity", "state_management", "implicit_contracts"]
|
|
77
|
+
|
|
78
|
+
[eval_dimensions.maintainability]
|
|
79
|
+
label = "Maintainability"
|
|
80
|
+
agent = "adr-maintainability-assessor"
|
|
81
|
+
aspects = ["dependency_health", "abstraction_quality", "change_amplification", "cognitive_complexity", "documentation", "technical_debt"]
|
|
82
|
+
|
|
83
|
+
[eval_dimensions.testing]
|
|
84
|
+
label = "Testing Strategy"
|
|
85
|
+
agent = "adr-testing-strategy-evaluator"
|
|
86
|
+
aspects = ["pyramid_health", "risk_coverage", "antipattern_tests", "test_quality", "test_architecture"]
|
|
87
|
+
|
|
88
|
+
[eval_dimensions.conways]
|
|
89
|
+
label = "Conway's Law Alignment"
|
|
90
|
+
agent = "adr-conways-law-analyzer"
|
|
91
|
+
aspects = ["ownership_alignment", "friction_points", "orphaned_modules", "bottlenecks", "scaling_readiness"]
|
|
92
|
+
|
|
93
|
+
# --- Decision Categories ---
|
|
94
|
+
|
|
95
|
+
decision_categories = [
|
|
96
|
+
"Technology Choice",
|
|
97
|
+
"Architecture Pattern",
|
|
98
|
+
"Data Model",
|
|
99
|
+
"API Design",
|
|
100
|
+
"Deployment Strategy",
|
|
101
|
+
"Authentication / Authorization",
|
|
102
|
+
"Integration Strategy",
|
|
103
|
+
"Performance / Scaling",
|
|
104
|
+
"Security / Compliance",
|
|
105
|
+
"Testing Strategy",
|
|
106
|
+
"Process / Workflow",
|
|
107
|
+
]
|
|
108
|
+
|
|
109
|
+
# --- Severity Levels ---
|
|
110
|
+
|
|
111
|
+
[severity.High]
|
|
112
|
+
description = "Core architectural constraint. Affects multiple components, expensive to reverse."
|
|
113
|
+
|
|
114
|
+
[severity.Medium]
|
|
115
|
+
description = "Significant technical decision. Affects one subsystem, moderately reversible."
|
|
116
|
+
|
|
117
|
+
[severity.Low]
|
|
118
|
+
description = "Local decision. Affects one module, easily reversed."
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "claude-blueprint",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Architecture Decision Records with teeth — lifecycle management, devil's advocate review, architecture evaluation team, post-fix retrospectives, and compliance auditing for Claude Code.",
|
|
6
|
+
"bin": {
|
|
7
|
+
"blueprint": "./bin/cli.js",
|
|
8
|
+
"claude-blueprint": "./bin/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"bin/",
|
|
12
|
+
"src/",
|
|
13
|
+
".claude-plugin/",
|
|
14
|
+
"commands/",
|
|
15
|
+
"agents/",
|
|
16
|
+
"config/"
|
|
17
|
+
],
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18.0.0"
|
|
20
|
+
},
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@inquirer/prompts": "^7.0.0",
|
|
24
|
+
"commander": "^13.0.0",
|
|
25
|
+
"ora": "^8.0.0"
|
|
26
|
+
}
|
|
27
|
+
}
|