@mytechtoday/augment-extensions 1.3.0 → 1.4.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.
Files changed (232) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +105 -6
  3. package/augment-extensions/domain-rules/software-architecture/README.md +143 -143
  4. package/augment-extensions/domain-rules/software-architecture/examples/banking-layered.md +961 -961
  5. package/augment-extensions/domain-rules/software-architecture/examples/ecommerce-microservices.md +990 -990
  6. package/augment-extensions/domain-rules/software-architecture/examples/iot-eventdriven.md +882 -882
  7. package/augment-extensions/domain-rules/software-architecture/examples/monolith-to-microservices-migration.md +703 -703
  8. package/augment-extensions/domain-rules/software-architecture/examples/serverless-imageprocessing.md +957 -957
  9. package/augment-extensions/domain-rules/software-architecture/examples/trading-eventdriven.md +747 -747
  10. package/augment-extensions/domain-rules/software-architecture/module.json +119 -119
  11. package/augment-extensions/domain-rules/software-architecture/rules/challenges-solutions.md +763 -763
  12. package/augment-extensions/domain-rules/software-architecture/rules/definitions-terminology.md +409 -409
  13. package/augment-extensions/domain-rules/software-architecture/rules/design-principles.md +684 -684
  14. package/augment-extensions/domain-rules/software-architecture/rules/evaluation-testing.md +1381 -1381
  15. package/augment-extensions/domain-rules/software-architecture/rules/event-driven-architecture.md +616 -616
  16. package/augment-extensions/domain-rules/software-architecture/rules/fundamentals.md +306 -306
  17. package/augment-extensions/domain-rules/software-architecture/rules/industry-architectures.md +554 -554
  18. package/augment-extensions/domain-rules/software-architecture/rules/layered-architecture.md +776 -776
  19. package/augment-extensions/domain-rules/software-architecture/rules/microservices-architecture.md +503 -503
  20. package/augment-extensions/domain-rules/software-architecture/rules/modeling-documentation.md +1199 -1199
  21. package/augment-extensions/domain-rules/software-architecture/rules/monolithic-architecture.md +351 -351
  22. package/augment-extensions/domain-rules/software-architecture/rules/principles.md +556 -556
  23. package/augment-extensions/domain-rules/software-architecture/rules/quality-attributes.md +797 -797
  24. package/augment-extensions/domain-rules/software-architecture/rules/scalability-performance.md +1345 -1345
  25. package/augment-extensions/domain-rules/software-architecture/rules/security-architecture.md +1039 -1039
  26. package/augment-extensions/domain-rules/software-architecture/rules/serverless-architecture.md +711 -711
  27. package/augment-extensions/domain-rules/software-architecture/rules/skills-development.md +568 -568
  28. package/augment-extensions/domain-rules/software-architecture/rules/tools-methodologies.md +961 -961
  29. package/augment-extensions/visual-design/CHANGELOG.md +132 -132
  30. package/augment-extensions/visual-design/README.md +255 -255
  31. package/augment-extensions/visual-design/__tests__/README.md +119 -119
  32. package/augment-extensions/visual-design/__tests__/style-selector.test.ts +172 -172
  33. package/augment-extensions/visual-design/__tests__/vendor-styles.test.ts +214 -214
  34. package/augment-extensions/visual-design/domains/other/ai-prompt-helper.ts +157 -157
  35. package/augment-extensions/visual-design/domains/other/dotnet-application.ts +156 -156
  36. package/augment-extensions/visual-design/domains/other/linux-platform.ts +156 -156
  37. package/augment-extensions/visual-design/domains/other/mobile-application.ts +157 -157
  38. package/augment-extensions/visual-design/domains/other/motion-picture.ts +156 -156
  39. package/augment-extensions/visual-design/domains/other/os-application.ts +156 -156
  40. package/augment-extensions/visual-design/domains/other/print-campaigns.ts +158 -158
  41. package/augment-extensions/visual-design/domains/other/web-app.ts +157 -157
  42. package/augment-extensions/visual-design/domains/other/website.ts +161 -161
  43. package/augment-extensions/visual-design/domains/other/windows-platform.ts +156 -156
  44. package/augment-extensions/visual-design/domains/web-page-styles/amazon-cloudscape.ts +506 -506
  45. package/augment-extensions/visual-design/domains/web-page-styles/google-modern.ts +615 -615
  46. package/augment-extensions/visual-design/domains/web-page-styles/microsoft-fluent.ts +531 -531
  47. package/augment-extensions/visual-design/examples/README.md +97 -97
  48. package/augment-extensions/visual-design/examples/ai-prompt-generation.md +233 -233
  49. package/augment-extensions/visual-design/examples/basic-usage.md +216 -216
  50. package/augment-extensions/visual-design/examples/domain-workflows.md +257 -257
  51. package/augment-extensions/visual-design/examples/vendor-comparison.md +247 -247
  52. package/augment-extensions/visual-design/module.json +78 -78
  53. package/augment-extensions/visual-design/style-selector.ts +177 -177
  54. package/augment-extensions/visual-design/types.ts +302 -302
  55. package/augment-extensions/visual-design/visual-design-core.ts +469 -469
  56. package/augment-extensions/workflows/adr-support/README.md +227 -227
  57. package/augment-extensions/workflows/adr-support/__tests__/adr-validator.test.ts +203 -203
  58. package/augment-extensions/workflows/adr-support/adr-validator.ts +162 -162
  59. package/augment-extensions/workflows/adr-support/examples/complete-lifecycle-example.md +449 -449
  60. package/augment-extensions/workflows/adr-support/examples/integration-example.md +580 -580
  61. package/augment-extensions/workflows/adr-support/examples/superseding-example.md +436 -436
  62. package/augment-extensions/workflows/adr-support/module.json +112 -112
  63. package/augment-extensions/workflows/adr-support/rules/adr-creation.md +372 -372
  64. package/augment-extensions/workflows/adr-support/rules/beads-integration.md +443 -443
  65. package/augment-extensions/workflows/adr-support/rules/conflict-detection.md +486 -486
  66. package/augment-extensions/workflows/adr-support/rules/decision-detection.md +362 -362
  67. package/augment-extensions/workflows/adr-support/rules/lifecycle-management.md +427 -427
  68. package/augment-extensions/workflows/adr-support/rules/openspec-integration.md +465 -465
  69. package/augment-extensions/workflows/adr-support/rules/template-selection.md +405 -405
  70. package/augment-extensions/workflows/adr-support/rules/validation-rules.md +543 -543
  71. package/augment-extensions/workflows/adr-support/schemas/adr-config.json +191 -191
  72. package/augment-extensions/workflows/adr-support/schemas/adr-metadata.json +172 -172
  73. package/augment-extensions/workflows/adr-support/templates/business-case.md +235 -235
  74. package/augment-extensions/workflows/adr-support/templates/madr-elaborate.md +197 -197
  75. package/augment-extensions/workflows/adr-support/templates/madr-simple.md +68 -68
  76. package/augment-extensions/workflows/adr-support/templates/nygard.md +84 -84
  77. package/augment-extensions/writing-standards/screenplay/rules/file-organization.md +213 -213
  78. package/augment-extensions/writing-standards/screenplay/utils/__tests__/file-organization.test.ts +169 -169
  79. package/augment-extensions/writing-standards/screenplay/utils/file-organization.ts +165 -165
  80. package/cli/dist/commands/agent.d.ts +37 -0
  81. package/cli/dist/commands/agent.d.ts.map +1 -0
  82. package/cli/dist/commands/agent.js +222 -0
  83. package/cli/dist/commands/agent.js.map +1 -0
  84. package/cli/dist/commands/beads.d.ts +64 -0
  85. package/cli/dist/commands/beads.d.ts.map +1 -0
  86. package/cli/dist/commands/beads.js +377 -0
  87. package/cli/dist/commands/beads.js.map +1 -0
  88. package/cli/dist/commands/change.d.ts +54 -0
  89. package/cli/dist/commands/change.d.ts.map +1 -0
  90. package/cli/dist/commands/change.js +243 -0
  91. package/cli/dist/commands/change.js.map +1 -0
  92. package/cli/dist/commands/clean.d.ts +15 -0
  93. package/cli/dist/commands/clean.d.ts.map +1 -0
  94. package/cli/dist/commands/clean.js +63 -0
  95. package/cli/dist/commands/clean.js.map +1 -0
  96. package/cli/dist/commands/clone.d.ts +15 -0
  97. package/cli/dist/commands/clone.d.ts.map +1 -0
  98. package/cli/dist/commands/clone.js +49 -0
  99. package/cli/dist/commands/clone.js.map +1 -0
  100. package/cli/dist/commands/config.d.ts +33 -0
  101. package/cli/dist/commands/config.d.ts.map +1 -0
  102. package/cli/dist/commands/config.js +166 -0
  103. package/cli/dist/commands/config.js.map +1 -0
  104. package/cli/dist/commands/context.d.ts +38 -0
  105. package/cli/dist/commands/context.d.ts.map +1 -0
  106. package/cli/dist/commands/context.js +205 -0
  107. package/cli/dist/commands/context.js.map +1 -0
  108. package/cli/dist/commands/create.d.ts +18 -0
  109. package/cli/dist/commands/create.d.ts.map +1 -0
  110. package/cli/dist/commands/create.js +178 -0
  111. package/cli/dist/commands/create.js.map +1 -0
  112. package/cli/dist/commands/diff.d.ts +19 -0
  113. package/cli/dist/commands/diff.d.ts.map +1 -0
  114. package/cli/dist/commands/diff.js +104 -0
  115. package/cli/dist/commands/diff.js.map +1 -0
  116. package/cli/dist/commands/doctor.d.ts +14 -0
  117. package/cli/dist/commands/doctor.d.ts.map +1 -0
  118. package/cli/dist/commands/doctor.js +62 -0
  119. package/cli/dist/commands/doctor.js.map +1 -0
  120. package/cli/dist/commands/export.d.ts +28 -0
  121. package/cli/dist/commands/export.d.ts.map +1 -0
  122. package/cli/dist/commands/export.js +135 -0
  123. package/cli/dist/commands/export.js.map +1 -0
  124. package/cli/dist/commands/import.d.ts +23 -0
  125. package/cli/dist/commands/import.d.ts.map +1 -0
  126. package/cli/dist/commands/import.js +118 -0
  127. package/cli/dist/commands/import.js.map +1 -0
  128. package/cli/dist/commands/prompt.d.ts +45 -0
  129. package/cli/dist/commands/prompt.d.ts.map +1 -0
  130. package/cli/dist/commands/prompt.js +223 -0
  131. package/cli/dist/commands/prompt.js.map +1 -0
  132. package/cli/dist/commands/spec.d.ts +57 -0
  133. package/cli/dist/commands/spec.d.ts.map +1 -0
  134. package/cli/dist/commands/spec.js +279 -0
  135. package/cli/dist/commands/spec.js.map +1 -0
  136. package/cli/dist/commands/stats.d.ts +18 -0
  137. package/cli/dist/commands/stats.d.ts.map +1 -0
  138. package/cli/dist/commands/stats.js +85 -0
  139. package/cli/dist/commands/stats.js.map +1 -0
  140. package/cli/dist/commands/task.d.ts +65 -0
  141. package/cli/dist/commands/task.d.ts.map +1 -0
  142. package/cli/dist/commands/task.js +282 -0
  143. package/cli/dist/commands/task.js.map +1 -0
  144. package/cli/dist/commands/template.d.ts +17 -0
  145. package/cli/dist/commands/template.d.ts.map +1 -0
  146. package/cli/dist/commands/template.js +55 -0
  147. package/cli/dist/commands/template.js.map +1 -0
  148. package/cli/dist/utils/agent-config.d.ts +129 -0
  149. package/cli/dist/utils/agent-config.d.ts.map +1 -0
  150. package/cli/dist/utils/agent-config.js +297 -0
  151. package/cli/dist/utils/agent-config.js.map +1 -0
  152. package/cli/dist/utils/auto-sync.js +19 -19
  153. package/cli/dist/utils/beads-graph.d.ts +17 -0
  154. package/cli/dist/utils/beads-graph.d.ts.map +1 -0
  155. package/cli/dist/utils/beads-graph.js +150 -0
  156. package/cli/dist/utils/beads-graph.js.map +1 -0
  157. package/cli/dist/utils/beads-integration.d.ts +112 -0
  158. package/cli/dist/utils/beads-integration.d.ts.map +1 -0
  159. package/cli/dist/utils/beads-integration.js +312 -0
  160. package/cli/dist/utils/beads-integration.js.map +1 -0
  161. package/cli/dist/utils/beads-reporter.d.ts +17 -0
  162. package/cli/dist/utils/beads-reporter.d.ts.map +1 -0
  163. package/cli/dist/utils/beads-reporter.js +160 -0
  164. package/cli/dist/utils/beads-reporter.js.map +1 -0
  165. package/cli/dist/utils/cache-manager.d.ts +55 -0
  166. package/cli/dist/utils/cache-manager.d.ts.map +1 -0
  167. package/cli/dist/utils/cache-manager.js +150 -0
  168. package/cli/dist/utils/cache-manager.js.map +1 -0
  169. package/cli/dist/utils/change-manager.d.ts +70 -0
  170. package/cli/dist/utils/change-manager.d.ts.map +1 -0
  171. package/cli/dist/utils/change-manager.js +412 -0
  172. package/cli/dist/utils/change-manager.js.map +1 -0
  173. package/cli/dist/utils/config-manager-enhanced.d.ts +66 -0
  174. package/cli/dist/utils/config-manager-enhanced.d.ts.map +1 -0
  175. package/cli/dist/utils/config-manager-enhanced.js +77 -0
  176. package/cli/dist/utils/config-manager-enhanced.js.map +1 -0
  177. package/cli/dist/utils/context-manager.d.ts +96 -0
  178. package/cli/dist/utils/context-manager.d.ts.map +1 -0
  179. package/cli/dist/utils/context-manager.js +258 -0
  180. package/cli/dist/utils/context-manager.js.map +1 -0
  181. package/cli/dist/utils/diff-engine.d.ts +78 -0
  182. package/cli/dist/utils/diff-engine.d.ts.map +1 -0
  183. package/cli/dist/utils/diff-engine.js +233 -0
  184. package/cli/dist/utils/diff-engine.js.map +1 -0
  185. package/cli/dist/utils/export-system.d.ts +101 -0
  186. package/cli/dist/utils/export-system.d.ts.map +1 -0
  187. package/cli/dist/utils/export-system.js +289 -0
  188. package/cli/dist/utils/export-system.js.map +1 -0
  189. package/cli/dist/utils/health-checker.d.ts +66 -0
  190. package/cli/dist/utils/health-checker.d.ts.map +1 -0
  191. package/cli/dist/utils/health-checker.js +285 -0
  192. package/cli/dist/utils/health-checker.js.map +1 -0
  193. package/cli/dist/utils/import-system.d.ts +74 -0
  194. package/cli/dist/utils/import-system.d.ts.map +1 -0
  195. package/cli/dist/utils/import-system.js +317 -0
  196. package/cli/dist/utils/import-system.js.map +1 -0
  197. package/cli/dist/utils/module-cloner.d.ts +40 -0
  198. package/cli/dist/utils/module-cloner.d.ts.map +1 -0
  199. package/cli/dist/utils/module-cloner.js +136 -0
  200. package/cli/dist/utils/module-cloner.js.map +1 -0
  201. package/cli/dist/utils/prompt-manager.d.ts +90 -0
  202. package/cli/dist/utils/prompt-manager.d.ts.map +1 -0
  203. package/cli/dist/utils/prompt-manager.js +302 -0
  204. package/cli/dist/utils/prompt-manager.js.map +1 -0
  205. package/cli/dist/utils/spec-manager.d.ts +65 -0
  206. package/cli/dist/utils/spec-manager.d.ts.map +1 -0
  207. package/cli/dist/utils/spec-manager.js +329 -0
  208. package/cli/dist/utils/spec-manager.js.map +1 -0
  209. package/cli/dist/utils/stats-collector.d.ts +74 -0
  210. package/cli/dist/utils/stats-collector.d.ts.map +1 -0
  211. package/cli/dist/utils/stats-collector.js +164 -0
  212. package/cli/dist/utils/stats-collector.js.map +1 -0
  213. package/cli/dist/utils/template-engine.d.ts +47 -0
  214. package/cli/dist/utils/template-engine.d.ts.map +1 -0
  215. package/cli/dist/utils/template-engine.js +204 -0
  216. package/cli/dist/utils/template-engine.js.map +1 -0
  217. package/package.json +12 -3
  218. package/augment-extensions/workflows/openspec/README.md +0 -96
  219. package/augment-extensions/workflows/openspec/examples/complete-change-example.md +0 -244
  220. package/augment-extensions/workflows/openspec/module.json +0 -54
  221. package/augment-extensions/workflows/openspec/rules/best-practices.md +0 -272
  222. package/augment-extensions/workflows/openspec/rules/manual-setup.md +0 -231
  223. package/augment-extensions/workflows/openspec/rules/spec-format.md +0 -236
  224. package/augment-extensions/workflows/openspec/rules/workflow.md +0 -214
  225. package/cli/dist/utils/__tests__/adr-validator.example.d.ts +0 -6
  226. package/cli/dist/utils/__tests__/adr-validator.example.d.ts.map +0 -1
  227. package/cli/dist/utils/__tests__/adr-validator.example.js +0 -148
  228. package/cli/dist/utils/__tests__/adr-validator.example.js.map +0 -1
  229. package/cli/dist/utils/adr-validator.d.ts +0 -65
  230. package/cli/dist/utils/adr-validator.d.ts.map +0 -1
  231. package/cli/dist/utils/adr-validator.js +0 -203
  232. package/cli/dist/utils/adr-validator.js.map +0 -1
@@ -1,486 +1,486 @@
1
- # Conflict Detection Rules
2
-
3
- ## Overview
4
-
5
- This document defines how to detect and resolve conflicts between Architecture Decision Records (ADRs), including analysis methods, detection criteria, conflict types, and resolution workflows.
6
-
7
- ## Conflict Types
8
-
9
- ### 1. Direct Conflicts
10
-
11
- **Definition:** Two ADRs make contradictory decisions about the same topic.
12
-
13
- **Example:**
14
- - ADR-0042: "Use PostgreSQL for all databases"
15
- - ADR-0055: "Use MongoDB for user data storage"
16
-
17
- **Detection:**
18
- - Same domain/category
19
- - Contradictory decisions
20
- - Overlapping scope
21
-
22
- ### 2. Implicit Conflicts
23
-
24
- **Definition:** ADRs don't directly contradict but create incompatible system states.
25
-
26
- **Example:**
27
- - ADR-0030: "Use synchronous REST APIs for all services"
28
- - ADR-0048: "Implement event-driven architecture with message queues"
29
-
30
- **Detection:**
31
- - Different approaches to same problem
32
- - Incompatible architectural patterns
33
- - Conflicting assumptions
34
-
35
- ### 3. Supersession Conflicts
36
-
37
- **Definition:** New ADR supersedes old one but supersession not properly documented.
38
-
39
- **Example:**
40
- - ADR-0010: "Use MySQL" (status: implemented)
41
- - ADR-0025: "Migrate to PostgreSQL" (status: approved)
42
- - ADR-0010 should be marked as superseded
43
-
44
- **Detection:**
45
- - New ADR replaces old decision
46
- - Old ADR still marked as active
47
- - Missing supersedes/superseded_by links
48
-
49
- ### 4. Scope Conflicts
50
-
51
- **Definition:** ADRs have overlapping but not identical scopes.
52
-
53
- **Example:**
54
- - ADR-0020: "Use Redis for all caching"
55
- - ADR-0035: "Use Memcached for session caching"
56
-
57
- **Detection:**
58
- - Overlapping domains
59
- - Different specificity levels
60
- - Unclear precedence
61
-
62
- ## Detection Methods
63
-
64
- ### Automated Detection
65
-
66
- #### Keyword Analysis
67
-
68
- ```typescript
69
- function detectKeywordConflicts(adr: ADR, allADRs: ADR[]): Conflict[] {
70
- const conflicts = [];
71
- const keywords = extractKeywords(adr);
72
-
73
- allADRs.forEach(otherADR => {
74
- if (otherADR.id === adr.id) return;
75
- if (otherADR.status === 'superseded' || otherADR.status === 'sunset') return;
76
-
77
- const otherKeywords = extractKeywords(otherADR);
78
- const overlap = keywords.filter(k => otherKeywords.includes(k));
79
-
80
- if (overlap.length > 2) {
81
- // Significant keyword overlap, potential conflict
82
- conflicts.push({
83
- type: 'potential',
84
- adr1: adr.id,
85
- adr2: otherADR.id,
86
- reason: `Significant keyword overlap: ${overlap.join(', ')}`,
87
- severity: 'medium'
88
- });
89
- }
90
- });
91
-
92
- return conflicts;
93
- }
94
- ```
95
-
96
- #### Category Analysis
97
-
98
- ```typescript
99
- function detectCategoryConflicts(adr: ADR, allADRs: ADR[]): Conflict[] {
100
- const conflicts = [];
101
- const categories = extractCategories(adr);
102
-
103
- allADRs.forEach(otherADR => {
104
- if (otherADR.id === adr.id) return;
105
- if (otherADR.status === 'superseded' || otherADR.status === 'sunset') return;
106
-
107
- const otherCategories = extractCategories(otherADR);
108
- const overlap = categories.filter(c => otherCategories.includes(c));
109
-
110
- if (overlap.length > 0) {
111
- // Same category, check for contradictions
112
- const contradiction = detectContradiction(adr, otherADR);
113
- if (contradiction) {
114
- conflicts.push({
115
- type: 'direct',
116
- adr1: adr.id,
117
- adr2: otherADR.id,
118
- reason: contradiction,
119
- severity: 'high'
120
- });
121
- }
122
- }
123
- });
124
-
125
- return conflicts;
126
- }
127
- ```
128
-
129
- #### Technology Stack Analysis
130
-
131
- ```typescript
132
- function detectTechnologyConflicts(adr: ADR, allADRs: ADR[]): Conflict[] {
133
- const conflicts = [];
134
- const technologies = extractTechnologies(adr);
135
-
136
- allADRs.forEach(otherADR => {
137
- if (otherADR.id === adr.id) return;
138
- if (otherADR.status === 'superseded' || otherADR.status === 'sunset') return;
139
-
140
- const otherTechnologies = extractTechnologies(otherADR);
141
-
142
- // Check for mutually exclusive technologies
143
- const mutuallyExclusive = checkMutualExclusion(technologies, otherTechnologies);
144
- if (mutuallyExclusive) {
145
- conflicts.push({
146
- type: 'direct',
147
- adr1: adr.id,
148
- adr2: otherADR.id,
149
- reason: `Mutually exclusive technologies: ${mutuallyExclusive}`,
150
- severity: 'high'
151
- });
152
- }
153
- });
154
-
155
- return conflicts;
156
- }
157
- ```
158
-
159
- ### Manual Detection
160
-
161
- #### Review Checklist
162
-
163
- When creating or reviewing ADR, check for conflicts:
164
-
165
- - [ ] Search for ADRs in same category
166
- - [ ] Review ADRs with similar keywords
167
- - [ ] Check for technology overlaps
168
- - [ ] Verify no contradictory decisions
169
- - [ ] Confirm supersession properly documented
170
-
171
- #### Peer Review
172
-
173
- During ADR review, reviewers should:
174
-
175
- 1. **Search Related ADRs**
176
- ```bash
177
- # Search for related ADRs
178
- grep -r "database" adr/
179
- grep -r "PostgreSQL\|MySQL\|MongoDB" adr/
180
- ```
181
-
182
- 2. **Compare Decisions**
183
- - Read related ADRs
184
- - Identify potential conflicts
185
- - Raise concerns in review
186
-
187
- 3. **Validate Supersession**
188
- - Check if new ADR supersedes old ones
189
- - Verify supersession links
190
- - Ensure old ADRs updated
191
-
192
- ## Conflict Severity Levels
193
-
194
- ### High Severity
195
-
196
- **Characteristics:**
197
- - Direct contradiction
198
- - Same scope
199
- - Both ADRs active
200
- - Incompatible implementation
201
-
202
- **Action Required:**
203
- - Immediate resolution
204
- - Block new ADR until resolved
205
- - Update one or both ADRs
206
-
207
- **Example:**
208
- ```
209
- CONFLICT: High Severity
210
- ADR-0042: Use PostgreSQL for all databases (status: implemented)
211
- ADR-0055: Use MongoDB for user database (status: proposed)
212
-
213
- Resolution Required: Decide which database to use for user data.
214
- ```
215
-
216
- ### Medium Severity
217
-
218
- **Characteristics:**
219
- - Implicit conflict
220
- - Overlapping scope
221
- - May be resolvable
222
- - Requires clarification
223
-
224
- **Action Required:**
225
- - Review before approval
226
- - Clarify scope boundaries
227
- - Document relationship
228
-
229
- **Example:**
230
- ```
231
- CONFLICT: Medium Severity
232
- ADR-0030: Use REST APIs for services (status: implemented)
233
- ADR-0048: Use event-driven architecture (status: proposed)
234
-
235
- Resolution: Clarify when to use REST vs events. May coexist.
236
- ```
237
-
238
- ### Low Severity
239
-
240
- **Characteristics:**
241
- - Potential conflict
242
- - Different scopes
243
- - May be complementary
244
- - Needs verification
245
-
246
- **Action Required:**
247
- - Review during approval
248
- - Document relationship
249
- - No blocking required
250
-
251
- **Example:**
252
- ```
253
- CONFLICT: Low Severity
254
- ADR-0020: Use Redis for caching (status: implemented)
255
- ADR-0035: Use CDN for static assets (status: proposed)
256
-
257
- Resolution: Different types of caching, likely complementary.
258
- ```
259
-
260
- ## Resolution Workflows
261
-
262
- ### Workflow 1: Supersession
263
-
264
- **Use when:** New ADR replaces old decision.
265
-
266
- ```
267
- 1. Identify old ADR to be superseded
268
- 2. Update new ADR metadata:
269
- supersedes: [adr-0042]
270
- 3. Update old ADR metadata:
271
- status: superseded
272
- superseded_by: adr-0055
273
- superseded_date: 2026-02-05
274
- 4. Update coordination manifest
275
- 5. Close related tasks for old ADR
276
- ```
277
-
278
- **Example:**
279
- ```yaml
280
- # New ADR (adr-0055)
281
- ---
282
- id: adr-0055
283
- title: "Migrate to MongoDB for User Data"
284
- status: proposed
285
- supersedes: [adr-0042]
286
- ---
287
-
288
- # Old ADR (adr-0042)
289
- ---
290
- id: adr-0042
291
- title: "Use PostgreSQL for All Databases"
292
- status: superseded
293
- superseded_by: adr-0055
294
- superseded_date: 2026-02-05
295
- ---
296
- ```
297
-
298
- ### Workflow 2: Scope Clarification
299
-
300
- **Use when:** ADRs can coexist with clear boundaries.
301
-
302
- ```
303
- 1. Identify scope overlap
304
- 2. Clarify boundaries in both ADRs
305
- 3. Add cross-references
306
- 4. Document relationship
307
- 5. Update coordination manifest
308
- ```
309
-
310
- **Example:**
311
- ```markdown
312
- # ADR-0020: Use Redis for Caching
313
-
314
- ## Scope
315
-
316
- This ADR covers **application-level caching** including:
317
- - Session data
318
- - API response caching
319
- - Database query caching
320
-
321
- **Out of Scope:** Static asset caching (see ADR-0035)
322
-
323
- ## Related Decisions
324
-
325
- - [ADR-0035: Use CDN for Static Assets](./0035-use-cdn-static-assets.md) - Complementary caching strategy
326
- ```
327
-
328
- ### Workflow 3: Consolidation
329
-
330
- **Use when:** Multiple ADRs should be merged into one.
331
-
332
- ```
333
- 1. Create new consolidated ADR
334
- 2. Reference all previous ADRs
335
- 3. Mark previous ADRs as superseded
336
- 4. Update all related specs/tasks
337
- 5. Update coordination manifest
338
- ```
339
-
340
- **Example:**
341
- ```yaml
342
- # New consolidated ADR
343
- ---
344
- id: adr-0060
345
- title: "Unified Caching Strategy"
346
- status: proposed
347
- supersedes: [adr-0020, adr-0035, adr-0041]
348
- ---
349
-
350
- ## Context
351
-
352
- This ADR consolidates previous caching decisions:
353
- - ADR-0020: Redis for application caching
354
- - ADR-0035: CDN for static assets
355
- - ADR-0041: Browser caching headers
356
-
357
- ## Decision
358
-
359
- [Unified caching strategy...]
360
- ```
361
-
362
- ### Workflow 4: Rejection
363
-
364
- **Use when:** New ADR conflicts and should not proceed.
365
-
366
- ```
367
- 1. Document conflict
368
- 2. Reject new ADR
369
- 3. Add comment explaining conflict
370
- 4. Suggest alternative approach
371
- ```
372
-
373
- **Example:**
374
- ```yaml
375
- ---
376
- id: adr-0055
377
- title: "Use MongoDB for User Data"
378
- status: rejected
379
- rejected_date: 2026-02-05
380
- rejected_reason: "Conflicts with ADR-0042 (Use PostgreSQL). Team decided to maintain PostgreSQL for consistency."
381
- ---
382
- ```
383
-
384
- ## Prevention Strategies
385
-
386
- ### 1. Pre-Creation Search
387
-
388
- Before creating ADR, search for related decisions:
389
-
390
- ```bash
391
- # Search by keyword
392
- grep -ri "database" adr/
393
-
394
- # Search by technology
395
- grep -ri "postgresql\|mysql\|mongodb" adr/
396
-
397
- # Search by category
398
- grep -ri "category: database" adr/
399
- ```
400
-
401
- ### 2. Category Taxonomy
402
-
403
- Maintain clear category taxonomy:
404
-
405
- ```
406
- - architecture
407
- - patterns
408
- - layers
409
- - services
410
- - infrastructure
411
- - database
412
- - caching
413
- - messaging
414
- - security
415
- - authentication
416
- - authorization
417
- - encryption
418
- ```
419
-
420
- ### 3. ADR Index
421
-
422
- Maintain index of ADRs by category:
423
-
424
- ```markdown
425
- # ADR Index
426
-
427
- ## Database
428
- - ADR-0001: Use PostgreSQL for Primary Database
429
- - ADR-0015: Use Redis for Caching
430
- - ADR-0028: Database Backup Strategy
431
-
432
- ## Architecture
433
- - ADR-0042: Migrate to Microservices
434
- - ADR-0043: Use gRPC for Service Communication
435
- ```
436
-
437
- ### 4. Automated Checks
438
-
439
- Run automated conflict detection:
440
-
441
- ```bash
442
- # Check for conflicts before creating ADR
443
- augx adr check-conflicts adr/0055-use-mongodb.md
444
-
445
- # Output:
446
- # ⚠️ Potential conflict detected:
447
- # ADR-0055 (proposed) conflicts with ADR-0042 (implemented)
448
- # Both make decisions about primary database
449
- # Severity: High
450
- #
451
- # Recommendation: Review ADR-0042 and clarify relationship
452
- ```
453
-
454
- ## Best Practices
455
-
456
- 1. **Search Before Creating**
457
- - Always search for related ADRs
458
- - Review similar decisions
459
- - Check for conflicts early
460
-
461
- 2. **Document Relationships**
462
- - Use supersedes/superseded_by
463
- - Add related_decisions links
464
- - Clarify scope boundaries
465
-
466
- 3. **Review Thoroughly**
467
- - Include conflict check in review
468
- - Have multiple reviewers
469
- - Use automated tools
470
-
471
- 4. **Resolve Promptly**
472
- - Don't ignore conflicts
473
- - Resolve before approval
474
- - Update all affected ADRs
475
-
476
- 5. **Maintain Index**
477
- - Keep ADR index current
478
- - Categorize consistently
479
- - Make searchable
480
-
481
- ## See Also
482
-
483
- - [ADR Creation Guidelines](./adr-creation.md)
484
- - [Lifecycle Management](./lifecycle-management.md)
485
- - [Validation Rules](./validation-rules.md)
486
-
1
+ # Conflict Detection Rules
2
+
3
+ ## Overview
4
+
5
+ This document defines how to detect and resolve conflicts between Architecture Decision Records (ADRs), including analysis methods, detection criteria, conflict types, and resolution workflows.
6
+
7
+ ## Conflict Types
8
+
9
+ ### 1. Direct Conflicts
10
+
11
+ **Definition:** Two ADRs make contradictory decisions about the same topic.
12
+
13
+ **Example:**
14
+ - ADR-0042: "Use PostgreSQL for all databases"
15
+ - ADR-0055: "Use MongoDB for user data storage"
16
+
17
+ **Detection:**
18
+ - Same domain/category
19
+ - Contradictory decisions
20
+ - Overlapping scope
21
+
22
+ ### 2. Implicit Conflicts
23
+
24
+ **Definition:** ADRs don't directly contradict but create incompatible system states.
25
+
26
+ **Example:**
27
+ - ADR-0030: "Use synchronous REST APIs for all services"
28
+ - ADR-0048: "Implement event-driven architecture with message queues"
29
+
30
+ **Detection:**
31
+ - Different approaches to same problem
32
+ - Incompatible architectural patterns
33
+ - Conflicting assumptions
34
+
35
+ ### 3. Supersession Conflicts
36
+
37
+ **Definition:** New ADR supersedes old one but supersession not properly documented.
38
+
39
+ **Example:**
40
+ - ADR-0010: "Use MySQL" (status: implemented)
41
+ - ADR-0025: "Migrate to PostgreSQL" (status: approved)
42
+ - ADR-0010 should be marked as superseded
43
+
44
+ **Detection:**
45
+ - New ADR replaces old decision
46
+ - Old ADR still marked as active
47
+ - Missing supersedes/superseded_by links
48
+
49
+ ### 4. Scope Conflicts
50
+
51
+ **Definition:** ADRs have overlapping but not identical scopes.
52
+
53
+ **Example:**
54
+ - ADR-0020: "Use Redis for all caching"
55
+ - ADR-0035: "Use Memcached for session caching"
56
+
57
+ **Detection:**
58
+ - Overlapping domains
59
+ - Different specificity levels
60
+ - Unclear precedence
61
+
62
+ ## Detection Methods
63
+
64
+ ### Automated Detection
65
+
66
+ #### Keyword Analysis
67
+
68
+ ```typescript
69
+ function detectKeywordConflicts(adr: ADR, allADRs: ADR[]): Conflict[] {
70
+ const conflicts = [];
71
+ const keywords = extractKeywords(adr);
72
+
73
+ allADRs.forEach(otherADR => {
74
+ if (otherADR.id === adr.id) return;
75
+ if (otherADR.status === 'superseded' || otherADR.status === 'sunset') return;
76
+
77
+ const otherKeywords = extractKeywords(otherADR);
78
+ const overlap = keywords.filter(k => otherKeywords.includes(k));
79
+
80
+ if (overlap.length > 2) {
81
+ // Significant keyword overlap, potential conflict
82
+ conflicts.push({
83
+ type: 'potential',
84
+ adr1: adr.id,
85
+ adr2: otherADR.id,
86
+ reason: `Significant keyword overlap: ${overlap.join(', ')}`,
87
+ severity: 'medium'
88
+ });
89
+ }
90
+ });
91
+
92
+ return conflicts;
93
+ }
94
+ ```
95
+
96
+ #### Category Analysis
97
+
98
+ ```typescript
99
+ function detectCategoryConflicts(adr: ADR, allADRs: ADR[]): Conflict[] {
100
+ const conflicts = [];
101
+ const categories = extractCategories(adr);
102
+
103
+ allADRs.forEach(otherADR => {
104
+ if (otherADR.id === adr.id) return;
105
+ if (otherADR.status === 'superseded' || otherADR.status === 'sunset') return;
106
+
107
+ const otherCategories = extractCategories(otherADR);
108
+ const overlap = categories.filter(c => otherCategories.includes(c));
109
+
110
+ if (overlap.length > 0) {
111
+ // Same category, check for contradictions
112
+ const contradiction = detectContradiction(adr, otherADR);
113
+ if (contradiction) {
114
+ conflicts.push({
115
+ type: 'direct',
116
+ adr1: adr.id,
117
+ adr2: otherADR.id,
118
+ reason: contradiction,
119
+ severity: 'high'
120
+ });
121
+ }
122
+ }
123
+ });
124
+
125
+ return conflicts;
126
+ }
127
+ ```
128
+
129
+ #### Technology Stack Analysis
130
+
131
+ ```typescript
132
+ function detectTechnologyConflicts(adr: ADR, allADRs: ADR[]): Conflict[] {
133
+ const conflicts = [];
134
+ const technologies = extractTechnologies(adr);
135
+
136
+ allADRs.forEach(otherADR => {
137
+ if (otherADR.id === adr.id) return;
138
+ if (otherADR.status === 'superseded' || otherADR.status === 'sunset') return;
139
+
140
+ const otherTechnologies = extractTechnologies(otherADR);
141
+
142
+ // Check for mutually exclusive technologies
143
+ const mutuallyExclusive = checkMutualExclusion(technologies, otherTechnologies);
144
+ if (mutuallyExclusive) {
145
+ conflicts.push({
146
+ type: 'direct',
147
+ adr1: adr.id,
148
+ adr2: otherADR.id,
149
+ reason: `Mutually exclusive technologies: ${mutuallyExclusive}`,
150
+ severity: 'high'
151
+ });
152
+ }
153
+ });
154
+
155
+ return conflicts;
156
+ }
157
+ ```
158
+
159
+ ### Manual Detection
160
+
161
+ #### Review Checklist
162
+
163
+ When creating or reviewing ADR, check for conflicts:
164
+
165
+ - [ ] Search for ADRs in same category
166
+ - [ ] Review ADRs with similar keywords
167
+ - [ ] Check for technology overlaps
168
+ - [ ] Verify no contradictory decisions
169
+ - [ ] Confirm supersession properly documented
170
+
171
+ #### Peer Review
172
+
173
+ During ADR review, reviewers should:
174
+
175
+ 1. **Search Related ADRs**
176
+ ```bash
177
+ # Search for related ADRs
178
+ grep -r "database" adr/
179
+ grep -r "PostgreSQL\|MySQL\|MongoDB" adr/
180
+ ```
181
+
182
+ 2. **Compare Decisions**
183
+ - Read related ADRs
184
+ - Identify potential conflicts
185
+ - Raise concerns in review
186
+
187
+ 3. **Validate Supersession**
188
+ - Check if new ADR supersedes old ones
189
+ - Verify supersession links
190
+ - Ensure old ADRs updated
191
+
192
+ ## Conflict Severity Levels
193
+
194
+ ### High Severity
195
+
196
+ **Characteristics:**
197
+ - Direct contradiction
198
+ - Same scope
199
+ - Both ADRs active
200
+ - Incompatible implementation
201
+
202
+ **Action Required:**
203
+ - Immediate resolution
204
+ - Block new ADR until resolved
205
+ - Update one or both ADRs
206
+
207
+ **Example:**
208
+ ```
209
+ CONFLICT: High Severity
210
+ ADR-0042: Use PostgreSQL for all databases (status: implemented)
211
+ ADR-0055: Use MongoDB for user database (status: proposed)
212
+
213
+ Resolution Required: Decide which database to use for user data.
214
+ ```
215
+
216
+ ### Medium Severity
217
+
218
+ **Characteristics:**
219
+ - Implicit conflict
220
+ - Overlapping scope
221
+ - May be resolvable
222
+ - Requires clarification
223
+
224
+ **Action Required:**
225
+ - Review before approval
226
+ - Clarify scope boundaries
227
+ - Document relationship
228
+
229
+ **Example:**
230
+ ```
231
+ CONFLICT: Medium Severity
232
+ ADR-0030: Use REST APIs for services (status: implemented)
233
+ ADR-0048: Use event-driven architecture (status: proposed)
234
+
235
+ Resolution: Clarify when to use REST vs events. May coexist.
236
+ ```
237
+
238
+ ### Low Severity
239
+
240
+ **Characteristics:**
241
+ - Potential conflict
242
+ - Different scopes
243
+ - May be complementary
244
+ - Needs verification
245
+
246
+ **Action Required:**
247
+ - Review during approval
248
+ - Document relationship
249
+ - No blocking required
250
+
251
+ **Example:**
252
+ ```
253
+ CONFLICT: Low Severity
254
+ ADR-0020: Use Redis for caching (status: implemented)
255
+ ADR-0035: Use CDN for static assets (status: proposed)
256
+
257
+ Resolution: Different types of caching, likely complementary.
258
+ ```
259
+
260
+ ## Resolution Workflows
261
+
262
+ ### Workflow 1: Supersession
263
+
264
+ **Use when:** New ADR replaces old decision.
265
+
266
+ ```
267
+ 1. Identify old ADR to be superseded
268
+ 2. Update new ADR metadata:
269
+ supersedes: [adr-0042]
270
+ 3. Update old ADR metadata:
271
+ status: superseded
272
+ superseded_by: adr-0055
273
+ superseded_date: 2026-02-05
274
+ 4. Update coordination manifest
275
+ 5. Close related tasks for old ADR
276
+ ```
277
+
278
+ **Example:**
279
+ ```yaml
280
+ # New ADR (adr-0055)
281
+ ---
282
+ id: adr-0055
283
+ title: "Migrate to MongoDB for User Data"
284
+ status: proposed
285
+ supersedes: [adr-0042]
286
+ ---
287
+
288
+ # Old ADR (adr-0042)
289
+ ---
290
+ id: adr-0042
291
+ title: "Use PostgreSQL for All Databases"
292
+ status: superseded
293
+ superseded_by: adr-0055
294
+ superseded_date: 2026-02-05
295
+ ---
296
+ ```
297
+
298
+ ### Workflow 2: Scope Clarification
299
+
300
+ **Use when:** ADRs can coexist with clear boundaries.
301
+
302
+ ```
303
+ 1. Identify scope overlap
304
+ 2. Clarify boundaries in both ADRs
305
+ 3. Add cross-references
306
+ 4. Document relationship
307
+ 5. Update coordination manifest
308
+ ```
309
+
310
+ **Example:**
311
+ ```markdown
312
+ # ADR-0020: Use Redis for Caching
313
+
314
+ ## Scope
315
+
316
+ This ADR covers **application-level caching** including:
317
+ - Session data
318
+ - API response caching
319
+ - Database query caching
320
+
321
+ **Out of Scope:** Static asset caching (see ADR-0035)
322
+
323
+ ## Related Decisions
324
+
325
+ - [ADR-0035: Use CDN for Static Assets](./0035-use-cdn-static-assets.md) - Complementary caching strategy
326
+ ```
327
+
328
+ ### Workflow 3: Consolidation
329
+
330
+ **Use when:** Multiple ADRs should be merged into one.
331
+
332
+ ```
333
+ 1. Create new consolidated ADR
334
+ 2. Reference all previous ADRs
335
+ 3. Mark previous ADRs as superseded
336
+ 4. Update all related specs/tasks
337
+ 5. Update coordination manifest
338
+ ```
339
+
340
+ **Example:**
341
+ ```yaml
342
+ # New consolidated ADR
343
+ ---
344
+ id: adr-0060
345
+ title: "Unified Caching Strategy"
346
+ status: proposed
347
+ supersedes: [adr-0020, adr-0035, adr-0041]
348
+ ---
349
+
350
+ ## Context
351
+
352
+ This ADR consolidates previous caching decisions:
353
+ - ADR-0020: Redis for application caching
354
+ - ADR-0035: CDN for static assets
355
+ - ADR-0041: Browser caching headers
356
+
357
+ ## Decision
358
+
359
+ [Unified caching strategy...]
360
+ ```
361
+
362
+ ### Workflow 4: Rejection
363
+
364
+ **Use when:** New ADR conflicts and should not proceed.
365
+
366
+ ```
367
+ 1. Document conflict
368
+ 2. Reject new ADR
369
+ 3. Add comment explaining conflict
370
+ 4. Suggest alternative approach
371
+ ```
372
+
373
+ **Example:**
374
+ ```yaml
375
+ ---
376
+ id: adr-0055
377
+ title: "Use MongoDB for User Data"
378
+ status: rejected
379
+ rejected_date: 2026-02-05
380
+ rejected_reason: "Conflicts with ADR-0042 (Use PostgreSQL). Team decided to maintain PostgreSQL for consistency."
381
+ ---
382
+ ```
383
+
384
+ ## Prevention Strategies
385
+
386
+ ### 1. Pre-Creation Search
387
+
388
+ Before creating ADR, search for related decisions:
389
+
390
+ ```bash
391
+ # Search by keyword
392
+ grep -ri "database" adr/
393
+
394
+ # Search by technology
395
+ grep -ri "postgresql\|mysql\|mongodb" adr/
396
+
397
+ # Search by category
398
+ grep -ri "category: database" adr/
399
+ ```
400
+
401
+ ### 2. Category Taxonomy
402
+
403
+ Maintain clear category taxonomy:
404
+
405
+ ```
406
+ - architecture
407
+ - patterns
408
+ - layers
409
+ - services
410
+ - infrastructure
411
+ - database
412
+ - caching
413
+ - messaging
414
+ - security
415
+ - authentication
416
+ - authorization
417
+ - encryption
418
+ ```
419
+
420
+ ### 3. ADR Index
421
+
422
+ Maintain index of ADRs by category:
423
+
424
+ ```markdown
425
+ # ADR Index
426
+
427
+ ## Database
428
+ - ADR-0001: Use PostgreSQL for Primary Database
429
+ - ADR-0015: Use Redis for Caching
430
+ - ADR-0028: Database Backup Strategy
431
+
432
+ ## Architecture
433
+ - ADR-0042: Migrate to Microservices
434
+ - ADR-0043: Use gRPC for Service Communication
435
+ ```
436
+
437
+ ### 4. Automated Checks
438
+
439
+ Run automated conflict detection:
440
+
441
+ ```bash
442
+ # Check for conflicts before creating ADR
443
+ augx adr check-conflicts adr/0055-use-mongodb.md
444
+
445
+ # Output:
446
+ # ⚠️ Potential conflict detected:
447
+ # ADR-0055 (proposed) conflicts with ADR-0042 (implemented)
448
+ # Both make decisions about primary database
449
+ # Severity: High
450
+ #
451
+ # Recommendation: Review ADR-0042 and clarify relationship
452
+ ```
453
+
454
+ ## Best Practices
455
+
456
+ 1. **Search Before Creating**
457
+ - Always search for related ADRs
458
+ - Review similar decisions
459
+ - Check for conflicts early
460
+
461
+ 2. **Document Relationships**
462
+ - Use supersedes/superseded_by
463
+ - Add related_decisions links
464
+ - Clarify scope boundaries
465
+
466
+ 3. **Review Thoroughly**
467
+ - Include conflict check in review
468
+ - Have multiple reviewers
469
+ - Use automated tools
470
+
471
+ 4. **Resolve Promptly**
472
+ - Don't ignore conflicts
473
+ - Resolve before approval
474
+ - Update all affected ADRs
475
+
476
+ 5. **Maintain Index**
477
+ - Keep ADR index current
478
+ - Categorize consistently
479
+ - Make searchable
480
+
481
+ ## See Also
482
+
483
+ - [ADR Creation Guidelines](./adr-creation.md)
484
+ - [Lifecycle Management](./lifecycle-management.md)
485
+ - [Validation Rules](./validation-rules.md)
486
+