@comfanion/workflow 4.1.2 → 4.3.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/README.md +1 -2
- package/bin/cli.js +2 -4
- package/package.json +1 -1
- package/src/build-info.json +1 -1
- package/src/opencode/ARCHITECTURE.md +7 -6
- package/src/opencode/FLOW.yaml +10 -10
- package/src/opencode/agents/coder.md +82 -0
- package/src/opencode/agents/dev.md +10 -0
- package/src/opencode/commands/architecture.md +1 -1
- package/src/opencode/commands/prd.md +1 -1
- package/src/opencode/config.yaml +1 -1
- package/src/opencode/skills/adr-writing/SKILL.md +122 -159
- package/src/opencode/skills/adr-writing/template.md +130 -0
- package/src/opencode/skills/architecture-design/SKILL.md +113 -107
- package/src/opencode/skills/architecture-design/template.md +212 -0
- package/src/opencode/skills/architecture-validation/SKILL.md +1 -1
- package/src/opencode/skills/changelog/template.md +23 -0
- package/src/opencode/skills/epic-writing/SKILL.md +116 -264
- package/src/opencode/skills/epic-writing/template.md +119 -0
- package/src/opencode/skills/prd-validation/SKILL.md +1 -1
- package/src/opencode/skills/prd-writing/SKILL.md +79 -43
- package/src/opencode/skills/prd-writing/template.md +147 -0
- package/src/opencode/skills/requirements-gathering/SKILL.md +128 -78
- package/src/opencode/skills/requirements-gathering/template.md +156 -0
- package/src/opencode/skills/story-writing/SKILL.md +106 -464
- package/src/opencode/skills/story-writing/template.md +214 -0
- package/src/opencode/skills/unit-writing/SKILL.md +185 -0
- package/src/opencode/skills/unit-writing/template.md +136 -0
- package/src/repo-structure/docs/README.md +5 -5
- package/src/repo-structure/docs/requirements/README.md +1 -1
- package/src/opencode/templates/CHANGELOG.md +0 -82
- package/src/opencode/templates/adr-template.md +0 -115
- package/src/opencode/templates/architecture-template.md +0 -362
- package/src/opencode/templates/epic-template.md +0 -166
- package/src/opencode/templates/prd-template.md +0 -479
- package/src/opencode/templates/requirements-template.md +0 -132
- package/src/opencode/templates/story-template.md +0 -182
- /package/src/opencode/{templates/prd-acceptance-criteria-template.md → skills/acceptance-criteria/template.md} +0 -0
- /package/src/opencode/{templates/change-proposal-template.md → skills/archiving/template-change-proposal.md} +0 -0
- /package/src/opencode/{templates/git-workflow-template.md → skills/coding-standards/template-git.md} +0 -0
- /package/src/opencode/{templates/testing-standards-template.md → skills/coding-standards/template-testing.md} +0 -0
- /package/src/opencode/{templates/jira-cache-template.yaml → skills/jira-integration/template-cache.yaml} +0 -0
- /package/src/opencode/{templates/module-index-template.md → skills/module-documentation/template.md} +0 -0
- /package/src/opencode/{templates/sprint-status-template.yaml → skills/sprint-planning/template.yaml} +0 -0
- /package/src/opencode/{templates/integration-tests-template.md → skills/test-design/template-integration.md} +0 -0
- /package/src/opencode/{templates/module-test-cases-template.md → skills/test-design/template-module.md} +0 -0
package/README.md
CHANGED
|
@@ -96,8 +96,7 @@ npx @comfanion/workflow config
|
|
|
96
96
|
├── config.yaml # Your configuration
|
|
97
97
|
├── FLOW.yaml # Workflow definition (v3.0)
|
|
98
98
|
├── agents/ # Agent personas
|
|
99
|
-
├── skills/ # Knowledge modules (25+)
|
|
100
|
-
├── templates/ # Document templates
|
|
99
|
+
├── skills/ # Knowledge modules with templates (25+)
|
|
101
100
|
├── workflows/ # Workflow instructions
|
|
102
101
|
├── checklists/ # Validation checklists
|
|
103
102
|
└── commands/ # Slash commands
|
package/bin/cli.js
CHANGED
|
@@ -259,7 +259,7 @@ program
|
|
|
259
259
|
// Create CHANGELOG.md if not exists
|
|
260
260
|
const changelogPath = path.join(process.cwd(), 'CHANGELOG.md');
|
|
261
261
|
if (!await fs.pathExists(changelogPath)) {
|
|
262
|
-
const changelogTemplate = path.join(targetDir, '
|
|
262
|
+
const changelogTemplate = path.join(targetDir, 'skills/changelog/template.md');
|
|
263
263
|
if (await fs.pathExists(changelogTemplate)) {
|
|
264
264
|
await fs.copy(changelogTemplate, changelogPath);
|
|
265
265
|
}
|
|
@@ -274,8 +274,7 @@ program
|
|
|
274
274
|
├── config.yaml # Your configuration
|
|
275
275
|
├── FLOW.yaml # Workflow definition
|
|
276
276
|
├── agents/ # Agent personas (analyst, pm, architect, sm, dev)
|
|
277
|
-
├── skills/ # Knowledge modules
|
|
278
|
-
├── templates/ # Document templates
|
|
277
|
+
├── skills/ # Knowledge modules (with templates)
|
|
279
278
|
├── workflows/ # Workflow instructions
|
|
280
279
|
└── checklists/ # Validation checklists
|
|
281
280
|
|
|
@@ -400,7 +399,6 @@ program
|
|
|
400
399
|
{ name: 'FLOW.yaml', path: '.opencode/FLOW.yaml', required: true },
|
|
401
400
|
{ name: 'agents/', path: '.opencode/agents', required: true },
|
|
402
401
|
{ name: 'skills/', path: '.opencode/skills', required: true },
|
|
403
|
-
{ name: 'templates/', path: '.opencode/templates', required: true },
|
|
404
402
|
{ name: 'docs/', path: 'docs', required: true },
|
|
405
403
|
{ name: 'docs/sprint-artifacts/', path: 'docs/sprint-artifacts', required: true },
|
|
406
404
|
{ name: 'docs/requirements/', path: 'docs/requirements', required: true },
|
package/package.json
CHANGED
package/src/build-info.json
CHANGED
|
@@ -186,12 +186,13 @@ prd-writing:
|
|
|
186
186
|
│ └── integration-testing/
|
|
187
187
|
│ └── SKILL.md
|
|
188
188
|
│
|
|
189
|
-
└──
|
|
190
|
-
├──
|
|
191
|
-
├──
|
|
192
|
-
|
|
193
|
-
├──
|
|
194
|
-
├──
|
|
189
|
+
└── skills/ # Skills with co-located templates
|
|
190
|
+
├── prd-writing/
|
|
191
|
+
│ ├── SKILL.md
|
|
192
|
+
│ └── template.md
|
|
193
|
+
├── architecture-design/
|
|
194
|
+
│ ├── SKILL.md
|
|
195
|
+
│ └── template.md
|
|
195
196
|
└── ...
|
|
196
197
|
```
|
|
197
198
|
|
package/src/opencode/FLOW.yaml
CHANGED
|
@@ -99,7 +99,7 @@ pipeline:
|
|
|
99
99
|
qa:
|
|
100
100
|
artifact: docs/prd-acceptance-criteria.md
|
|
101
101
|
description: Acceptance criteria for all FRs
|
|
102
|
-
template:
|
|
102
|
+
template: skills/acceptance-criteria/template.md
|
|
103
103
|
mandatory: true
|
|
104
104
|
next: coding-standards
|
|
105
105
|
|
|
@@ -143,7 +143,7 @@ pipeline:
|
|
|
143
143
|
qa:
|
|
144
144
|
artifact: docs/architecture-integration-tests.md
|
|
145
145
|
description: Integration test specifications
|
|
146
|
-
template:
|
|
146
|
+
template: skills/test-design/template-integration.md
|
|
147
147
|
mandatory: true
|
|
148
148
|
next: module-docs
|
|
149
149
|
|
|
@@ -777,41 +777,41 @@ commands:
|
|
|
777
777
|
artifacts:
|
|
778
778
|
requirements:
|
|
779
779
|
path: docs/requirements/requirements.md
|
|
780
|
-
template:
|
|
780
|
+
template: skills/requirements-gathering/template.md
|
|
781
781
|
|
|
782
782
|
prd:
|
|
783
783
|
path: docs/prd.md
|
|
784
|
-
template:
|
|
784
|
+
template: skills/prd-writing/template.md
|
|
785
785
|
|
|
786
786
|
prd-qa:
|
|
787
787
|
path: docs/prd-acceptance-criteria.md
|
|
788
|
-
template:
|
|
788
|
+
template: skills/acceptance-criteria/template.md
|
|
789
789
|
mandatory: true
|
|
790
790
|
|
|
791
791
|
architecture:
|
|
792
792
|
path: docs/architecture.md
|
|
793
|
-
template:
|
|
793
|
+
template: skills/architecture-design/template.md
|
|
794
794
|
|
|
795
795
|
architecture-qa:
|
|
796
796
|
path: docs/architecture-integration-tests.md
|
|
797
|
-
template:
|
|
797
|
+
template: skills/test-design/template-integration.md
|
|
798
798
|
mandatory: true
|
|
799
799
|
|
|
800
800
|
epic:
|
|
801
801
|
path: docs/sprint-artifacts/*/epic-*.md
|
|
802
|
-
template:
|
|
802
|
+
template: skills/epic-writing/template.md
|
|
803
803
|
naming: "epic-{NN}-{module}-{description}.md"
|
|
804
804
|
id_format: "{MODULE}-E{NN}"
|
|
805
805
|
|
|
806
806
|
story:
|
|
807
807
|
path: docs/sprint-artifacts/*/stories/story-*.md
|
|
808
|
-
template:
|
|
808
|
+
template: skills/story-writing/template.md
|
|
809
809
|
naming: "story-{EPIC}-{NN}-{description}.md"
|
|
810
810
|
id_format: "{MODULE}-S{EPIC}-{NN}"
|
|
811
811
|
|
|
812
812
|
sprint-status:
|
|
813
813
|
path: docs/sprint-artifacts/sprint-status.yaml
|
|
814
|
-
template:
|
|
814
|
+
template: skills/sprint-planning/template.yaml
|
|
815
815
|
format: yaml
|
|
816
816
|
|
|
817
817
|
# =============================================================================
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Fast Coder - Use for: quick implementation tasks, writing code, fixing bugs. Uses claude-haiku for speed."
|
|
3
|
+
mode: subagent
|
|
4
|
+
model: anthropic/claude-haiku-4-20250514
|
|
5
|
+
temperature: 0.1
|
|
6
|
+
tools:
|
|
7
|
+
write: true
|
|
8
|
+
edit: true
|
|
9
|
+
bash: true
|
|
10
|
+
glob: true
|
|
11
|
+
grep: true
|
|
12
|
+
read: true
|
|
13
|
+
permission:
|
|
14
|
+
bash:
|
|
15
|
+
"*": allow
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
<agent id="coder" name="Swift" title="Fast Coder" icon="⚡">
|
|
19
|
+
|
|
20
|
+
<activation>
|
|
21
|
+
<step n="1">Receive task from parent agent or user</step>
|
|
22
|
+
<step n="2">Read relevant files mentioned in task</step>
|
|
23
|
+
<step n="3">Implement solution following project patterns</step>
|
|
24
|
+
<step n="4">Run tests if applicable</step>
|
|
25
|
+
<step n="5">Report completion</step>
|
|
26
|
+
</activation>
|
|
27
|
+
|
|
28
|
+
<persona>
|
|
29
|
+
<role>Fast Implementation Specialist</role>
|
|
30
|
+
<identity>Quick executor for well-defined coding tasks. No planning, no questions - just code.</identity>
|
|
31
|
+
<communication_style>Minimal. Shows code, reports results. No explanations unless errors.</communication_style>
|
|
32
|
+
<principles>
|
|
33
|
+
- Execute task as specified, no improvisation
|
|
34
|
+
- Follow existing code patterns in project
|
|
35
|
+
- Write minimal code that solves the problem
|
|
36
|
+
- Report errors immediately if blocked
|
|
37
|
+
</principles>
|
|
38
|
+
</persona>
|
|
39
|
+
|
|
40
|
+
<rules>
|
|
41
|
+
<r>DO NOT ask clarifying questions - execute or fail</r>
|
|
42
|
+
<r>DO NOT refactor beyond task scope</r>
|
|
43
|
+
<r>DO NOT add features not requested</r>
|
|
44
|
+
<r>Follow existing patterns from AGENTS.md / CLAUDE.md</r>
|
|
45
|
+
<r>If task is unclear, report what's missing and stop</r>
|
|
46
|
+
</rules>
|
|
47
|
+
|
|
48
|
+
<when-to-use>
|
|
49
|
+
- Simple file creation/modification
|
|
50
|
+
- Bug fixes with clear reproduction
|
|
51
|
+
- Code following existing patterns
|
|
52
|
+
- Test writing for existing code
|
|
53
|
+
- Repetitive tasks across multiple files
|
|
54
|
+
</when-to-use>
|
|
55
|
+
|
|
56
|
+
<when-not-to-use>
|
|
57
|
+
- Architecture decisions (→ @architect)
|
|
58
|
+
- Complex multi-step features (→ @dev)
|
|
59
|
+
- Requirements unclear (→ @pm)
|
|
60
|
+
- New patterns needed (→ @dev)
|
|
61
|
+
</when-not-to-use>
|
|
62
|
+
|
|
63
|
+
</agent>
|
|
64
|
+
|
|
65
|
+
## Quick Reference
|
|
66
|
+
|
|
67
|
+
**Model:** claude-haiku (fast, cheap)
|
|
68
|
+
|
|
69
|
+
**What I Do:**
|
|
70
|
+
- Quick code implementation
|
|
71
|
+
- Bug fixes
|
|
72
|
+
- Test writing
|
|
73
|
+
- File operations
|
|
74
|
+
- Pattern replication
|
|
75
|
+
|
|
76
|
+
**What I Don't Do:**
|
|
77
|
+
- Planning or architecture
|
|
78
|
+
- Clarifying questions
|
|
79
|
+
- Scope expansion
|
|
80
|
+
- Complex decisions
|
|
81
|
+
|
|
82
|
+
**Invoke:** `@coder <task>` or let @dev delegate to me
|
|
@@ -69,6 +69,16 @@ permission:
|
|
|
69
69
|
<skill name="test-design">Test structure, coverage requirements</skill>
|
|
70
70
|
</skills>
|
|
71
71
|
|
|
72
|
+
<subagents>
|
|
73
|
+
<subagent name="coder" when="Delegate simple, well-defined tasks for faster execution">
|
|
74
|
+
- Simple file creation/modification
|
|
75
|
+
- Bug fixes with clear steps
|
|
76
|
+
- Test writing for existing code
|
|
77
|
+
- Repetitive tasks across files
|
|
78
|
+
- Code following existing patterns
|
|
79
|
+
</subagent>
|
|
80
|
+
</subagents>
|
|
81
|
+
|
|
72
82
|
<red-green-refactor>
|
|
73
83
|
<red>Write FAILING tests first for the task functionality</red>
|
|
74
84
|
<green>Implement MINIMAL code to make tests pass</green>
|
|
@@ -61,7 +61,7 @@ $ARGUMENTS
|
|
|
61
61
|
After architecture is complete, create QA artifact:
|
|
62
62
|
`docs/architecture-integration-tests.md`
|
|
63
63
|
|
|
64
|
-
Use template: `@.opencode/
|
|
64
|
+
Use template: `@.opencode/skills/test-design/template-integration.md`
|
|
65
65
|
|
|
66
66
|
## Next Step
|
|
67
67
|
|
|
@@ -56,7 +56,7 @@ Save to: `docs/prd.md`
|
|
|
56
56
|
After PRD is complete, create QA artifact:
|
|
57
57
|
`docs/prd-acceptance-criteria.md`
|
|
58
58
|
|
|
59
|
-
Use template: `@.opencode/
|
|
59
|
+
Use template: `@.opencode/skills/acceptance-criteria/template.md`
|
|
60
60
|
|
|
61
61
|
## Next Step
|
|
62
62
|
|
package/src/opencode/config.yaml
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# PROJECT CONFIGURATION
|
|
7
7
|
# =============================================================================
|
|
8
8
|
project_name: "ai-wf"
|
|
9
|
-
version: "4.1.
|
|
9
|
+
version: "4.1.3"
|
|
10
10
|
|
|
11
11
|
# =============================================================================
|
|
12
12
|
# USER CONFIGURATION
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
compatibility: opencode
|
|
6
6
|
metadata:
|
|
7
7
|
domain: software-architecture
|
|
8
|
-
artifacts: docs/architecture/adr
|
|
8
|
+
artifacts: docs/architecture/adr/*.md
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# ADR Writing Skill
|
|
@@ -15,227 +15,190 @@ metadata:
|
|
|
15
15
|
Use this skill when you need to:
|
|
16
16
|
- Document a significant architectural decision
|
|
17
17
|
- Record the rationale behind a technical choice
|
|
18
|
-
-
|
|
19
|
-
-
|
|
18
|
+
- Create a reference for future developers
|
|
19
|
+
- Track decision evolution over time
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## Template
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
- Choosing between multiple valid approaches
|
|
25
|
-
- Making a decision that affects multiple modules
|
|
26
|
-
- Selecting a technology or framework
|
|
27
|
-
- Defining a pattern to follow consistently
|
|
28
|
-
- Making a trade-off between quality attributes
|
|
23
|
+
Use template at: `@.opencode/skills/adr-writing/template.md`
|
|
29
24
|
|
|
30
|
-
## ADR
|
|
25
|
+
## ADR Structure (v2)
|
|
31
26
|
|
|
32
|
-
|
|
33
|
-
# ADR-NNN: [Decision Title]
|
|
34
|
-
|
|
35
|
-
**Status:** Proposed | Accepted | Deprecated | Superseded by ADR-XXX
|
|
36
|
-
**Date:** YYYY-MM-DD
|
|
37
|
-
**Deciders:** [Names of people involved]
|
|
38
|
-
**Technical Story:** [Link to epic/story if applicable]
|
|
39
|
-
|
|
40
|
-
## Context
|
|
41
|
-
|
|
42
|
-
[Describe the situation that led to this decision. What is the problem?
|
|
43
|
-
What forces are at play? What constraints exist?]
|
|
44
|
-
|
|
45
|
-
## Decision
|
|
27
|
+
### 1. Header
|
|
46
28
|
|
|
47
|
-
|
|
29
|
+
```yaml
|
|
30
|
+
id: ADR-{{N}}
|
|
31
|
+
status: proposed | accepted | deprecated | superseded
|
|
32
|
+
date: {{date}}
|
|
33
|
+
deciders: [{{names}}]
|
|
34
|
+
supersedes: ADR-{{X}} # if applicable
|
|
35
|
+
```
|
|
48
36
|
|
|
49
|
-
|
|
37
|
+
### 2. Context
|
|
50
38
|
|
|
51
|
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
39
|
+
Prose explaining:
|
|
40
|
+
- The situation and problem
|
|
41
|
+
- What decision is needed
|
|
42
|
+
- Why it's needed now
|
|
54
43
|
|
|
55
|
-
|
|
56
|
-
- [Drawback 1]
|
|
57
|
-
- [Drawback 2]
|
|
44
|
+
With **Forces:** (tensions/tradeoffs) and **Constraints:**
|
|
58
45
|
|
|
59
|
-
|
|
60
|
-
|
|
46
|
+
```markdown
|
|
47
|
+
## Context
|
|
61
48
|
|
|
62
|
-
|
|
49
|
+
We need to choose the primary database for the Task module.
|
|
63
50
|
|
|
64
|
-
|
|
65
|
-
[Brief description]
|
|
66
|
-
- **Pros:** [advantages]
|
|
67
|
-
- **Cons:** [disadvantages]
|
|
68
|
-
- **Rejected because:** [reason]
|
|
51
|
+
We need to decide now because development starts next sprint.
|
|
69
52
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
-
|
|
73
|
-
- **Cons:** [disadvantages]
|
|
74
|
-
- **Rejected because:** [reason]
|
|
53
|
+
**Forces:**
|
|
54
|
+
- Need ACID transactions — pushes toward relational
|
|
55
|
+
- Team expertise is SQL — reduces risk
|
|
75
56
|
|
|
76
|
-
|
|
57
|
+
**Constraints:**
|
|
58
|
+
- Must run on existing K8s cluster
|
|
59
|
+
```
|
|
77
60
|
|
|
78
|
-
|
|
79
|
-
- [Link to research or benchmarks]
|
|
61
|
+
### 3. Decision
|
|
80
62
|
|
|
81
|
-
|
|
63
|
+
Bold statement + brief explanation:
|
|
82
64
|
|
|
83
|
-
|
|
84
|
-
|
|
65
|
+
```markdown
|
|
66
|
+
## Decision
|
|
85
67
|
|
|
86
|
-
|
|
68
|
+
**We will use PostgreSQL as the primary database.**
|
|
87
69
|
|
|
70
|
+
This means all Task module data will be stored in PostgreSQL with JSONB for flexible attributes.
|
|
88
71
|
```
|
|
89
|
-
ADR-NNN-short-description.md
|
|
90
72
|
|
|
91
|
-
|
|
92
|
-
- ADR-001-use-postgresql.md
|
|
93
|
-
- ADR-002-event-driven-integration.md
|
|
94
|
-
- ADR-003-modular-monolith-architecture.md
|
|
95
|
-
```
|
|
73
|
+
### 4. Options Considered
|
|
96
74
|
|
|
97
|
-
|
|
75
|
+
For each option:
|
|
76
|
+
- Brief description
|
|
77
|
+
- Pros/Cons table
|
|
78
|
+
- Mark chosen with ✓
|
|
98
79
|
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
```
|
|
80
|
+
```markdown
|
|
81
|
+
### Option 1: MongoDB
|
|
102
82
|
|
|
103
|
-
|
|
104
|
-
- **Accepted:** Decision made and in effect
|
|
105
|
-
- **Deprecated:** No longer relevant (system changed)
|
|
106
|
-
- **Superseded:** Replaced by a newer ADR
|
|
83
|
+
Document database with flexible schema.
|
|
107
84
|
|
|
108
|
-
|
|
85
|
+
| Pros | Cons |
|
|
86
|
+
|------|------|
|
|
87
|
+
| Flexible schema | No ACID across documents |
|
|
109
88
|
|
|
110
|
-
###
|
|
89
|
+
### Option 2: PostgreSQL ✓ CHOSEN
|
|
111
90
|
|
|
112
|
-
|
|
113
|
-
# ADR-001: Use PostgreSQL as Primary Database
|
|
91
|
+
Relational database with JSON support.
|
|
114
92
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
93
|
+
| Pros | Cons |
|
|
94
|
+
|------|------|
|
|
95
|
+
| ACID transactions | Schema migrations needed |
|
|
96
|
+
| Team expertise | |
|
|
118
97
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
We need a primary database for the marketplace system.
|
|
122
|
-
Requirements:
|
|
123
|
-
- ACID transactions for orders
|
|
124
|
-
- Complex queries for product search
|
|
125
|
-
- JSON support for flexible attributes
|
|
126
|
-
- Proven reliability at scale
|
|
98
|
+
**Why chosen:** ACID critical for assignments. Team expertise reduces risk.
|
|
99
|
+
```
|
|
127
100
|
|
|
128
|
-
|
|
101
|
+
### 5. Consequences
|
|
129
102
|
|
|
130
|
-
|
|
103
|
+
Grouped by type:
|
|
104
|
+
- Positive (✓)
|
|
105
|
+
- Negative (✗)
|
|
106
|
+
- Risks (⚠)
|
|
131
107
|
|
|
108
|
+
```markdown
|
|
132
109
|
## Consequences
|
|
133
110
|
|
|
134
111
|
### Positive
|
|
135
|
-
-
|
|
136
|
-
-
|
|
137
|
-
- GIN indexes for full-text search
|
|
138
|
-
- Team expertise exists
|
|
112
|
+
- Single deploy = simple CI/CD
|
|
113
|
+
- Team already knows PostgreSQL
|
|
139
114
|
|
|
140
115
|
### Negative
|
|
141
|
-
-
|
|
142
|
-
- Scaling writes is harder than NoSQL
|
|
143
|
-
- AWS RDS costs
|
|
116
|
+
- Must manage migrations carefully
|
|
144
117
|
|
|
145
|
-
|
|
118
|
+
### Risks
|
|
119
|
+
- Schema evolution — mitigated by versioned migrations
|
|
120
|
+
```
|
|
146
121
|
|
|
147
|
-
###
|
|
148
|
-
- Pros: Simpler, cheaper
|
|
149
|
-
- Cons: Weaker JSON support, fewer features
|
|
150
|
-
- Rejected: JSON operations are critical for us
|
|
122
|
+
### 6. Implementation Notes (optional)
|
|
151
123
|
|
|
152
|
-
|
|
153
|
-
- Pros: Flexible schema, easy scaling
|
|
154
|
-
- Cons: No ACID across documents, eventual consistency
|
|
155
|
-
- Rejected: Need strong consistency for orders
|
|
156
|
-
```
|
|
124
|
+
Specific guidance for implementing the decision.
|
|
157
125
|
|
|
158
|
-
###
|
|
126
|
+
### 7. References
|
|
159
127
|
|
|
160
128
|
```markdown
|
|
161
|
-
|
|
129
|
+
→ Architecture: `docs/architecture.md`
|
|
130
|
+
→ Related ADR: → ADR: `ADR-002`
|
|
131
|
+
→ Affected Units: → Unit: `Task`
|
|
132
|
+
```
|
|
162
133
|
|
|
163
|
-
|
|
164
|
-
**Date:** 2026-01-16
|
|
165
|
-
**Deciders:** Architect, Tech Lead
|
|
134
|
+
## Reference Format
|
|
166
135
|
|
|
167
|
-
|
|
136
|
+
Always use `→` prefix:
|
|
168
137
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
138
|
+
```markdown
|
|
139
|
+
→ ADR: `ADR-001`
|
|
140
|
+
→ Unit: `Task`
|
|
141
|
+
→ Architecture: `docs/architecture.md`
|
|
142
|
+
```
|
|
173
143
|
|
|
174
|
-
##
|
|
144
|
+
## When to Write ADR
|
|
175
145
|
|
|
176
|
-
|
|
177
|
-
|
|
146
|
+
| Situation | Write ADR? |
|
|
147
|
+
|-----------|-----------|
|
|
148
|
+
| Database choice | Yes |
|
|
149
|
+
| Framework choice | Yes |
|
|
150
|
+
| Architecture pattern | Yes |
|
|
151
|
+
| API design decision | Yes |
|
|
152
|
+
| Library choice | Maybe (if significant) |
|
|
153
|
+
| Code style decision | No (use coding-standards) |
|
|
178
154
|
|
|
179
|
-
##
|
|
155
|
+
## ADR Lifecycle
|
|
180
156
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
### Negative
|
|
188
|
-
- Eventual consistency complexity
|
|
189
|
-
- Need idempotent consumers
|
|
190
|
-
- Additional infrastructure (Kafka)
|
|
191
|
-
- Harder to debug
|
|
157
|
+
```
|
|
158
|
+
proposed ──► accepted ──► deprecated
|
|
159
|
+
│
|
|
160
|
+
└──► superseded (by new ADR)
|
|
161
|
+
```
|
|
192
162
|
|
|
193
|
-
|
|
163
|
+
When superseding:
|
|
164
|
+
1. Create new ADR
|
|
165
|
+
2. Add `supersedes: ADR-XXX` to new ADR
|
|
166
|
+
3. Update old ADR status to `superseded`
|
|
167
|
+
4. Add `superseded_by: ADR-YYY` to old ADR
|
|
194
168
|
|
|
195
|
-
|
|
196
|
-
- Rejected: Creates tight coupling, cascading failures
|
|
197
|
-
```
|
|
169
|
+
## Naming Conventions
|
|
198
170
|
|
|
199
|
-
|
|
171
|
+
### File Names
|
|
200
172
|
|
|
201
173
|
```
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
└── README.md # Index of all ADRs
|
|
174
|
+
ADR-[NNN]-[short-title].md
|
|
175
|
+
|
|
176
|
+
Examples:
|
|
177
|
+
- ADR-001-postgresql-database.md
|
|
178
|
+
- ADR-002-hexagonal-architecture.md
|
|
208
179
|
```
|
|
209
180
|
|
|
210
|
-
|
|
181
|
+
### IDs
|
|
211
182
|
|
|
212
|
-
|
|
213
|
-
# Architecture Decision Records
|
|
214
|
-
|
|
215
|
-
| ADR | Title | Status | Date |
|
|
216
|
-
|-----|-------|--------|------|
|
|
217
|
-
| [ADR-001](ADR-001-use-postgresql.md) | Use PostgreSQL | Accepted | 2026-01-15 |
|
|
218
|
-
| [ADR-002](ADR-002-event-driven-integration.md) | Event-driven integration | Accepted | 2026-01-16 |
|
|
219
|
-
| [ADR-003](ADR-003-modular-monolith.md) | Modular monolith | Accepted | 2026-01-17 |
|
|
220
|
-
```
|
|
183
|
+
Sequential: `ADR-001`, `ADR-002`, ...
|
|
221
184
|
|
|
222
|
-
##
|
|
185
|
+
## Validation Checklist
|
|
223
186
|
|
|
224
|
-
Before finalizing ADR:
|
|
225
187
|
- [ ] Context explains the problem clearly
|
|
226
|
-
- [ ]
|
|
227
|
-
- [ ]
|
|
228
|
-
- [ ] At least 2
|
|
229
|
-
- [ ]
|
|
230
|
-
- [ ]
|
|
231
|
-
- [ ]
|
|
188
|
+
- [ ] Forces describe tensions/tradeoffs
|
|
189
|
+
- [ ] Decision is a clear statement
|
|
190
|
+
- [ ] At least 2 options were considered
|
|
191
|
+
- [ ] Chosen option is marked
|
|
192
|
+
- [ ] Rationale explains why chosen
|
|
193
|
+
- [ ] Consequences include positives AND negatives
|
|
194
|
+
- [ ] Uses `→` reference format
|
|
195
|
+
- [ ] Links to affected units
|
|
232
196
|
|
|
233
197
|
## Output
|
|
234
198
|
|
|
235
|
-
Save to: `docs/architecture/adr/ADR-NNN-
|
|
236
|
-
Update: `docs/architecture/adr/README.md` (index)
|
|
199
|
+
Save to: `docs/architecture/adr/ADR-[NNN]-[title].md`
|
|
237
200
|
|
|
238
201
|
## Related Skills
|
|
239
202
|
|
|
240
|
-
- `architecture-design` -
|
|
241
|
-
- `
|
|
203
|
+
- `architecture-design` - Creates ADRs for decisions
|
|
204
|
+
- `unit-writing` - ADRs affect units
|