@sylix/coworker 2.0.11 → 2.0.12

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 (169) hide show
  1. package/dist/commands/slash/config.d.ts.map +1 -1
  2. package/dist/commands/slash/config.js +22 -4
  3. package/dist/commands/slash/config.js.map +1 -1
  4. package/dist/core/CoWorkerAgent.d.ts.map +1 -1
  5. package/dist/core/CoWorkerAgent.js +6 -3
  6. package/dist/core/CoWorkerAgent.js.map +1 -1
  7. package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
  8. package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
  9. package/dist/skills/defaults/ai-ml/rag.md +276 -0
  10. package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
  11. package/dist/skills/defaults/backend-development/api-design.md +285 -0
  12. package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
  13. package/dist/skills/defaults/backend-development/async-python.md +237 -0
  14. package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
  15. package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
  16. package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
  17. package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
  18. package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
  19. package/dist/skills/defaults/backend-development/database-design.md +305 -0
  20. package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
  21. package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
  22. package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
  23. package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
  24. package/dist/skills/defaults/backend-development/fastapi.md +309 -0
  25. package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
  26. package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
  27. package/dist/skills/defaults/backend-development/microservices.md +284 -0
  28. package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
  29. package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
  30. package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
  31. package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
  32. package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
  33. package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
  34. package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
  35. package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
  36. package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
  37. package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
  38. package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
  39. package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
  40. package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
  41. package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
  42. package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
  43. package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
  44. package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
  45. package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
  46. package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
  47. package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
  48. package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
  49. package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
  50. package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
  51. package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
  52. package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
  53. package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
  54. package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
  55. package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
  56. package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
  57. package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
  58. package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
  59. package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
  60. package/dist/skills/defaults/data-engineering/airflow.md +519 -0
  61. package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
  62. package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
  63. package/dist/skills/defaults/data-engineering/dbt.md +556 -0
  64. package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
  65. package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
  66. package/dist/skills/defaults/data-engineering/spark.md +411 -0
  67. package/dist/skills/defaults/database/postgresql.md +202 -0
  68. package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
  69. package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
  70. package/dist/skills/defaults/devops/changelog-automation.md +580 -0
  71. package/dist/skills/defaults/devops/cicd.md +314 -0
  72. package/dist/skills/defaults/devops/cloud.md +263 -0
  73. package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
  74. package/dist/skills/defaults/devops/cost-optimization.md +295 -0
  75. package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
  76. package/dist/skills/defaults/devops/docker.md +281 -0
  77. package/dist/skills/defaults/devops/git-workflows.md +205 -0
  78. package/dist/skills/defaults/devops/github-actions.md +311 -0
  79. package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
  80. package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
  81. package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
  82. package/dist/skills/defaults/devops/kubernetes.md +339 -0
  83. package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
  84. package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
  85. package/dist/skills/defaults/devops/observability.md +243 -0
  86. package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
  87. package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
  88. package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
  89. package/dist/skills/defaults/devops/secrets-management.md +341 -0
  90. package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
  91. package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
  92. package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
  93. package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
  94. package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
  95. package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
  96. package/dist/skills/defaults/frontend/interaction-design.md +327 -0
  97. package/dist/skills/defaults/frontend/javascript.md +311 -0
  98. package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
  99. package/dist/skills/defaults/frontend/react-native-design.md +440 -0
  100. package/dist/skills/defaults/frontend/react.md +345 -0
  101. package/dist/skills/defaults/frontend/responsive-design.md +472 -0
  102. package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
  103. package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
  104. package/dist/skills/defaults/frontend/typescript.md +334 -0
  105. package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
  106. package/dist/skills/defaults/frontend/web-component-design.md +279 -0
  107. package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
  108. package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
  109. package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
  110. package/dist/skills/defaults/kubernetes/gitops.md +280 -0
  111. package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
  112. package/dist/skills/defaults/kubernetes/helm.md +343 -0
  113. package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
  114. package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
  115. package/dist/skills/defaults/kubernetes/manifests.md +330 -0
  116. package/dist/skills/defaults/kubernetes/security.md +337 -0
  117. package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
  118. package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
  119. package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
  120. package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
  121. package/dist/skills/defaults/llm-application/langchain.md +259 -0
  122. package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
  123. package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
  124. package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
  125. package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
  126. package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
  127. package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
  128. package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
  129. package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
  130. package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
  131. package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
  132. package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
  133. package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
  134. package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
  135. package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
  136. package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
  137. package/dist/skills/defaults/security/auditor.md +168 -0
  138. package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
  139. package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
  140. package/dist/skills/defaults/security/mtls-configuration.md +349 -0
  141. package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
  142. package/dist/skills/defaults/security/sast-configuration.md +182 -0
  143. package/dist/skills/defaults/security/security.md +313 -0
  144. package/dist/skills/defaults/security/stride-analysis.md +273 -0
  145. package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
  146. package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
  147. package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
  148. package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
  149. package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
  150. package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
  151. package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
  152. package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
  153. package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
  154. package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
  155. package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
  156. package/dist/skills/defaults/testing/testing.md +332 -0
  157. package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
  158. package/dist/skills/defaults/workflows/track-management.md +592 -0
  159. package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
  160. package/dist/skills/index.d.ts +11 -0
  161. package/dist/skills/index.d.ts.map +1 -0
  162. package/dist/skills/index.js +129 -0
  163. package/dist/skills/index.js.map +1 -0
  164. package/dist/utils/character.js +4 -4
  165. package/dist/utils/character.js.map +1 -1
  166. package/dist/utils/inputbar.d.ts.map +1 -1
  167. package/dist/utils/inputbar.js +7 -0
  168. package/dist/utils/inputbar.js.map +1 -1
  169. package/package.json +1 -1
@@ -0,0 +1,249 @@
1
+ ---
2
+ name: debugging
3
+ description: Apply systematic debugging methodology to find and fix bugs efficiently.
4
+ ---
5
+
6
+ # Systematic Debugging — CoWorker Edition
7
+
8
+ Find bugs faster with a proven process.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Any bug or issue
13
+ - Test failures
14
+ - Unexpected behavior
15
+ - Performance problems
16
+
17
+ ## The Four-Phase Process
18
+
19
+ ### Phase 1: Root Cause Investigation
20
+
21
+ **NEVER propose a fix without understanding the cause.**
22
+
23
+ 1. **Read error messages carefully**
24
+ - Note line numbers, file paths, error codes
25
+ - Use `executeRead` to examine failing code
26
+
27
+ 2. **Reproduce consistently**
28
+ - Can you trigger it reliably?
29
+ - What are the exact steps?
30
+
31
+ 3. **Check recent changes**
32
+ ```bash
33
+ git log --oneline -10
34
+ git diff HEAD~3
35
+ ```
36
+
37
+ 4. **Trace data flow backward**
38
+ - What code causes the error?
39
+ - What called that code?
40
+ - What value was passed?
41
+
42
+ ```python
43
+ # Example: Trace back to find root cause
44
+ # Error: Cannot read property 'name' of undefined
45
+ # Location: user.profile.name
46
+
47
+ # Step 1: Find where profile is set
48
+ grep -r "user.profile" --include="*.js"
49
+
50
+ # Step 2: Check if profile is always populated
51
+ # In userService.js line 42:
52
+ user.profile = await fetchProfile(user.id)
53
+ # But what if fetchProfile returns null?
54
+
55
+ # Step 3: Check fetchProfile
56
+ async function fetchProfile(userId) {
57
+ const profile = await db.query(
58
+ 'SELECT * FROM profiles WHERE user_id = ?',
59
+ userId
60
+ );
61
+ return profile[0]; # Returns undefined if no profile!
62
+ }
63
+
64
+ # ROOT CAUSE: fetchProfile returns undefined for new users
65
+ # FIX: Create profile if not exists, OR handle undefined
66
+ ```
67
+
68
+ ### Phase 2: Pattern Analysis
69
+
70
+ 1. **Find working examples**
71
+ - Search for similar code that works
72
+ - Compare implementations
73
+
74
+ 2. **Identify differences**
75
+ ```python
76
+ # Working:
77
+ def get_user(id: str) -> User:
78
+ return db.query("SELECT * FROM users WHERE id = ?", id).first()
79
+
80
+ # Broken:
81
+ def get_order(id: str) -> Order:
82
+ return db.query("SELECT * FROM orders WHERE id = ?", id).first()
83
+
84
+ # Difference: get_order returns None vs raising error
85
+ ```
86
+
87
+ ### Phase 3: Hypothesis & Testing
88
+
89
+ 1. **Form hypothesis**
90
+ ```
91
+ I think X is causing Y because Z
92
+ ```
93
+
94
+ 2. **Test minimally**
95
+ - Smallest possible change
96
+ - One variable at a time
97
+
98
+ ```python
99
+ # Hypothesis: Missing database index causes slow query
100
+ # Test: Add index, measure query time
101
+
102
+ # Before
103
+ await db.execute(
104
+ "SELECT * FROM orders WHERE user_id = ? AND status = ?",
105
+ user_id, "pending"
106
+ )
107
+
108
+ # Test with EXPLAIN
109
+ EXPLAIN QUERY PLAN SELECT * FROM orders WHERE user_id = 1 AND status = 'pending'
110
+
111
+ # Add index
112
+ CREATE INDEX idx_orders_user_status ON orders(user_id, status);
113
+ ```
114
+
115
+ ### Phase 4: Implementation
116
+
117
+ 1. **Create failing test first**
118
+ ```python
119
+ def test_order_get_by_user_pending():
120
+ orders = get_orders(user_id="123", status="pending")
121
+ assert len(orders) == 2
122
+ # This should fail before fix
123
+ ```
124
+
125
+ 2. **Implement fix**
126
+ - Address root cause
127
+ - One change at a time
128
+
129
+ 3. **Verify**
130
+ - Test passes
131
+ - No regressions
132
+
133
+ ## Tools & Techniques
134
+
135
+ ### Logging
136
+
137
+ ```python
138
+ import logging
139
+
140
+ logger = logging.getLogger(__name__)
141
+
142
+ def process_order(order_id):
143
+ logger.info(f"Processing order {order_id}")
144
+
145
+ # Add debug points
146
+ logger.debug(f"Order data: {order_data}")
147
+
148
+ try:
149
+ result = payment.charge(order_data)
150
+ logger.info(f"Payment successful: {result.id}")
151
+ return result
152
+ except Exception as e:
153
+ logger.error(f"Payment failed: {e}", exc_info=True)
154
+ raise
155
+ ```
156
+
157
+ ### Debugging with PDB
158
+
159
+ ```python
160
+ import pdb; pdb.set_trace()
161
+
162
+ # Common commands:
163
+ # n = next line
164
+ # s = step into function
165
+ # c = continue
166
+ # p variable = print variable
167
+ # l = list code around
168
+ # w = show call stack
169
+ ```
170
+
171
+ ### Interactive Debugging
172
+
173
+ ```typescript
174
+ // VS Code debugger
175
+ debugger;
176
+
177
+ // Or browser DevTools
178
+ console.log('User:', user);
179
+ console.table(users);
180
+ console.trace();
181
+ ```
182
+
183
+ ## Common Debugging Patterns
184
+
185
+ ### Null/Undefined
186
+
187
+ ```typescript
188
+ // Problem
189
+ const name = user.profile.name; // TypeError
190
+
191
+ // Solution with optional chaining
192
+ const name = user?.profile?.name ?? 'Unknown';
193
+
194
+ // Or explicit check
195
+ if (user && user.profile) {
196
+ const name = user.profile.name;
197
+ }
198
+ ```
199
+
200
+ ### Async Issues
201
+
202
+ ```javascript
203
+ // Problem: Race condition
204
+ await user.save();
205
+ await sendEmail(user.email); // Might run before save completes
206
+
207
+ // Solution: Await properly
208
+ await user.save();
209
+ await sendEmail(user.email);
210
+
211
+ // Or use transactions
212
+ await db.transaction(async () => {
213
+ await user.save();
214
+ await sendEmail(user.email);
215
+ });
216
+ ```
217
+
218
+ ### Memory Leaks
219
+
220
+ ```typescript
221
+ // Problem: Event listener not cleaned up
222
+ useEffect(() => {
223
+ window.addEventListener('resize', handleResize);
224
+ }, []);
225
+
226
+ // Solution: Clean up
227
+ useEffect(() => {
228
+ window.addEventListener('resize', handleResize);
229
+ return () => {
230
+ window.removeEventListener('resize', handleResize);
231
+ };
232
+ }, []);
233
+ ```
234
+
235
+ ## Red Flags
236
+
237
+ Stop and return to Phase 1:
238
+
239
+ - "Let me try changing X"
240
+ - "Quick fix for now"
241
+ - Proposing solutions before tracing
242
+ - "One more attempt"
243
+
244
+ ## When to Escalate
245
+
246
+ If you've tried 3+ fixes and they failed:
247
+ - Architecture issue likely
248
+ - Discuss with team
249
+ - Consider pair debugging
@@ -0,0 +1,448 @@
1
+ ---
2
+ name: architecture-decision-records
3
+ description: Write and maintain Architecture Decision Records (ADRs) following best practices for technical decision documentation. Use when documenting significant technical decisions, reviewing past architectural choices, or establishing decision processes.
4
+ ---
5
+
6
+ # Architecture Decision Records
7
+
8
+ Comprehensive patterns for creating, maintaining, and managing Architecture Decision Records (ADRs) that capture the context and rationale behind significant technical decisions.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Making significant architectural decisions
13
+ - Documenting technology choices
14
+ - Recording design trade-offs
15
+ - Onboarding new team members
16
+ - Reviewing historical decisions
17
+ - Establishing decision-making processes
18
+
19
+ ## Core Concepts
20
+
21
+ ### 1. What is an ADR?
22
+
23
+ An Architecture Decision Record captures:
24
+
25
+ - **Context**: Why we needed to make a decision
26
+ - **Decision**: What we decided
27
+ - **Consequences**: What happens as a result
28
+
29
+ ### 2. When to Write an ADR
30
+
31
+ | Write ADR | Skip ADR |
32
+ | -------------------------- | ---------------------- |
33
+ | New framework adoption | Minor version upgrades |
34
+ | Database technology choice | Bug fixes |
35
+ | API design patterns | Implementation details |
36
+ | Security architecture | Routine maintenance |
37
+ | Integration patterns | Configuration changes |
38
+
39
+ ### 3. ADR Lifecycle
40
+
41
+ ```
42
+ Proposed → Accepted → Deprecated → Superseded
43
+
44
+ Rejected
45
+ ```
46
+
47
+ ## Templates
48
+
49
+ ### Template 1: Standard ADR (MADR Format)
50
+
51
+ ```markdown
52
+ # ADR-0001: Use PostgreSQL as Primary Database
53
+
54
+ ## Status
55
+
56
+ Accepted
57
+
58
+ ## Context
59
+
60
+ We need to select a primary database for our new e-commerce platform. The system
61
+ will handle:
62
+
63
+ - ~10,000 concurrent users
64
+ - Complex product catalog with hierarchical categories
65
+ - Transaction processing for orders and payments
66
+ - Full-text search for products
67
+ - Geospatial queries for store locator
68
+
69
+ The team has experience with MySQL, PostgreSQL, and MongoDB. We need ACID
70
+ compliance for financial transactions.
71
+
72
+ ## Decision Drivers
73
+
74
+ - **Must have ACID compliance** for payment processing
75
+ - **Must support complex queries** for reporting
76
+ - **Should support full-text search** to reduce infrastructure complexity
77
+ - **Should have good JSON support** for flexible product attributes
78
+ - **Team familiarity** reduces onboarding time
79
+
80
+ ## Considered Options
81
+
82
+ ### Option 1: PostgreSQL
83
+
84
+ - **Pros**: ACID compliant, excellent JSON support (JSONB), built-in full-text
85
+ search, PostGIS for geospatial, team has experience
86
+ - **Cons**: Slightly more complex replication setup than MySQL
87
+
88
+ ### Option 2: MySQL
89
+
90
+ - **Pros**: Very familiar to team, simple replication, large community
91
+ - **Cons**: Weaker JSON support, no built-in full-text search (need
92
+ Elasticsearch), no geospatial without extensions
93
+
94
+ ### Option 3: MongoDB
95
+
96
+ - **Pros**: Flexible schema, native JSON, horizontal scaling
97
+ - **Cons**: No ACID for multi-document transactions (at decision time),
98
+ team has limited experience, requires schema design discipline
99
+
100
+ ## Decision
101
+
102
+ We will use **PostgreSQL 15** as our primary database.
103
+
104
+ ## Rationale
105
+
106
+ PostgreSQL provides the best balance of:
107
+
108
+ 1. **ACID compliance** essential for e-commerce transactions
109
+ 2. **Built-in capabilities** (full-text search, JSONB, PostGIS) reduce
110
+ infrastructure complexity
111
+ 3. **Team familiarity** with SQL databases reduces learning curve
112
+ 4. **Mature ecosystem** with excellent tooling and community support
113
+
114
+ The slight complexity in replication is outweighed by the reduction in
115
+ additional services (no separate Elasticsearch needed).
116
+
117
+ ## Consequences
118
+
119
+ ### Positive
120
+
121
+ - Single database handles transactions, search, and geospatial queries
122
+ - Reduced operational complexity (fewer services to manage)
123
+ - Strong consistency guarantees for financial data
124
+ - Team can leverage existing SQL expertise
125
+
126
+ ### Negative
127
+
128
+ - Need to learn PostgreSQL-specific features (JSONB, full-text search syntax)
129
+ - Vertical scaling limits may require read replicas sooner
130
+ - Some team members need PostgreSQL-specific training
131
+
132
+ ### Risks
133
+
134
+ - Full-text search may not scale as well as dedicated search engines
135
+ - Mitigation: Design for potential Elasticsearch addition if needed
136
+
137
+ ## Implementation Notes
138
+
139
+ - Use JSONB for flexible product attributes
140
+ - Implement connection pooling with PgBouncer
141
+ - Set up streaming replication for read replicas
142
+ - Use pg_trgm extension for fuzzy search
143
+
144
+ ## Related Decisions
145
+
146
+ - ADR-0002: Caching Strategy (Redis) - complements database choice
147
+ - ADR-0005: Search Architecture - may supersede if Elasticsearch needed
148
+
149
+ ## References
150
+
151
+ - [PostgreSQL JSON Documentation](https://www.postgresql.org/docs/current/datatype-json.html)
152
+ - [PostgreSQL Full Text Search](https://www.postgresql.org/docs/current/textsearch.html)
153
+ - Internal: Performance benchmarks in `/docs/benchmarks/database-comparison.md`
154
+ ```
155
+
156
+ ### Template 2: Lightweight ADR
157
+
158
+ ```markdown
159
+ # ADR-0012: Adopt TypeScript for Frontend Development
160
+
161
+ **Status**: Accepted
162
+ **Date**: 2024-01-15
163
+ **Deciders**: @alice, @bob, @charlie
164
+
165
+ ## Context
166
+
167
+ Our React codebase has grown to 50+ components with increasing bug reports
168
+ related to prop type mismatches and undefined errors. PropTypes provide
169
+ runtime-only checking.
170
+
171
+ ## Decision
172
+
173
+ Adopt TypeScript for all new frontend code. Migrate existing code incrementally.
174
+
175
+ ## Consequences
176
+
177
+ **Good**: Catch type errors at compile time, better IDE support, self-documenting
178
+ code.
179
+
180
+ **Bad**: Learning curve for team, initial slowdown, build complexity increase.
181
+
182
+ **Mitigations**: TypeScript training sessions, allow gradual adoption with
183
+ `allowJs: true`.
184
+ ```
185
+
186
+ ### Template 3: Y-Statement Format
187
+
188
+ ```markdown
189
+ # ADR-0015: API Gateway Selection
190
+
191
+ In the context of **building a microservices architecture**,
192
+ facing **the need for centralized API management, authentication, and rate limiting**,
193
+ we decided for **Kong Gateway**
194
+ and against **AWS API Gateway and custom Nginx solution**,
195
+ to achieve **vendor independence, plugin extensibility, and team familiarity with Lua**,
196
+ accepting that **we need to manage Kong infrastructure ourselves**.
197
+ ```
198
+
199
+ ### Template 4: ADR for Deprecation
200
+
201
+ ```markdown
202
+ # ADR-0020: Deprecate MongoDB in Favor of PostgreSQL
203
+
204
+ ## Status
205
+
206
+ Accepted (Supersedes ADR-0003)
207
+
208
+ ## Context
209
+
210
+ ADR-0003 (2021) chose MongoDB for user profile storage due to schema flexibility
211
+ needs. Since then:
212
+
213
+ - MongoDB's multi-document transactions remain problematic for our use case
214
+ - Our schema has stabilized and rarely changes
215
+ - We now have PostgreSQL expertise from other services
216
+ - Maintaining two databases increases operational burden
217
+
218
+ ## Decision
219
+
220
+ Deprecate MongoDB and migrate user profiles to PostgreSQL.
221
+
222
+ ## Migration Plan
223
+
224
+ 1. **Phase 1** (Week 1-2): Create PostgreSQL schema, dual-write enabled
225
+ 2. **Phase 2** (Week 3-4): Backfill historical data, validate consistency
226
+ 3. **Phase 3** (Week 5): Switch reads to PostgreSQL, monitor
227
+ 4. **Phase 4** (Week 6): Remove MongoDB writes, decommission
228
+
229
+ ## Consequences
230
+
231
+ ### Positive
232
+
233
+ - Single database technology reduces operational complexity
234
+ - ACID transactions for user data
235
+ - Team can focus PostgreSQL expertise
236
+
237
+ ### Negative
238
+
239
+ - Migration effort (~4 weeks)
240
+ - Risk of data issues during migration
241
+ - Lose some schema flexibility
242
+
243
+ ## Lessons Learned
244
+
245
+ Document from ADR-0003 experience:
246
+
247
+ - Schema flexibility benefits were overestimated
248
+ - Operational cost of multiple databases was underestimated
249
+ - Consider long-term maintenance in technology decisions
250
+ ```
251
+
252
+ ### Template 5: Request for Comments (RFC) Style
253
+
254
+ ```markdown
255
+ # RFC-0025: Adopt Event Sourcing for Order Management
256
+
257
+ ## Summary
258
+
259
+ Propose adopting event sourcing pattern for the order management domain to
260
+ improve auditability, enable temporal queries, and support business analytics.
261
+
262
+ ## Motivation
263
+
264
+ Current challenges:
265
+
266
+ 1. Audit requirements need complete order history
267
+ 2. "What was the order state at time X?" queries are impossible
268
+ 3. Analytics team needs event stream for real-time dashboards
269
+ 4. Order state reconstruction for customer support is manual
270
+
271
+ ## Detailed Design
272
+
273
+ ### Event Store
274
+ ```
275
+
276
+ OrderCreated { orderId, customerId, items[], timestamp }
277
+ OrderItemAdded { orderId, item, timestamp }
278
+ OrderItemRemoved { orderId, itemId, timestamp }
279
+ PaymentReceived { orderId, amount, paymentId, timestamp }
280
+ OrderShipped { orderId, trackingNumber, timestamp }
281
+
282
+ ```
283
+
284
+ ### Projections
285
+
286
+ - **CurrentOrderState**: Materialized view for queries
287
+ - **OrderHistory**: Complete timeline for audit
288
+ - **DailyOrderMetrics**: Analytics aggregation
289
+
290
+ ### Technology
291
+
292
+ - Event Store: EventStoreDB (purpose-built, handles projections)
293
+ - Alternative considered: Kafka + custom projection service
294
+
295
+ ## Drawbacks
296
+
297
+ - Learning curve for team
298
+ - Increased complexity vs. CRUD
299
+ - Need to design events carefully (immutable once stored)
300
+ - Storage growth (events never deleted)
301
+
302
+ ## Alternatives
303
+
304
+ 1. **Audit tables**: Simpler but doesn't enable temporal queries
305
+ 2. **CDC from existing DB**: Complex, doesn't change data model
306
+ 3. **Hybrid**: Event source only for order state changes
307
+
308
+ ## Unresolved Questions
309
+
310
+ - [ ] Event schema versioning strategy
311
+ - [ ] Retention policy for events
312
+ - [ ] Snapshot frequency for performance
313
+
314
+ ## Implementation Plan
315
+
316
+ 1. Prototype with single order type (2 weeks)
317
+ 2. Team training on event sourcing (1 week)
318
+ 3. Full implementation and migration (4 weeks)
319
+ 4. Monitoring and optimization (ongoing)
320
+
321
+ ## References
322
+
323
+ - [Event Sourcing by Martin Fowler](https://martinfowler.com/eaaDev/EventSourcing.html)
324
+ - [EventStoreDB Documentation](https://www.eventstore.com/docs)
325
+ ```
326
+
327
+ ## ADR Management
328
+
329
+ ### Directory Structure
330
+
331
+ ```
332
+ docs/
333
+ ├── adr/
334
+ │ ├── README.md # Index and guidelines
335
+ │ ├── template.md # Team's ADR template
336
+ │ ├── 0001-use-postgresql.md
337
+ │ ├── 0002-caching-strategy.md
338
+ │ ├── 0003-mongodb-user-profiles.md # [DEPRECATED]
339
+ │ └── 0020-deprecate-mongodb.md # Supersedes 0003
340
+ ```
341
+
342
+ ### ADR Index (README.md)
343
+
344
+ ```markdown
345
+ # Architecture Decision Records
346
+
347
+ This directory contains Architecture Decision Records (ADRs) for [Project Name].
348
+
349
+ ## Index
350
+
351
+ | ADR | Title | Status | Date |
352
+ | ------------------------------------- | ---------------------------------- | ---------- | ---------- |
353
+ | [0001](0001-use-postgresql.md) | Use PostgreSQL as Primary Database | Accepted | 2024-01-10 |
354
+ | [0002](0002-caching-strategy.md) | Caching Strategy with Redis | Accepted | 2024-01-12 |
355
+ | [0003](0003-mongodb-user-profiles.md) | MongoDB for User Profiles | Deprecated | 2023-06-15 |
356
+ | [0020](0020-deprecate-mongodb.md) | Deprecate MongoDB | Accepted | 2024-01-15 |
357
+
358
+ ## Creating a New ADR
359
+
360
+ 1. Copy `template.md` to `NNNN-title-with-dashes.md`
361
+ 2. Fill in the template
362
+ 3. Submit PR for review
363
+ 4. Update this index after approval
364
+
365
+ ## ADR Status
366
+
367
+ - **Proposed**: Under discussion
368
+ - **Accepted**: Decision made, implementing
369
+ - **Deprecated**: No longer relevant
370
+ - **Superseded**: Replaced by another ADR
371
+ - **Rejected**: Considered but not adopted
372
+ ```
373
+
374
+ ### Automation (adr-tools)
375
+
376
+ ```bash
377
+ # Install adr-tools
378
+ brew install adr-tools
379
+
380
+ # Initialize ADR directory
381
+ adr init docs/adr
382
+
383
+ # Create new ADR
384
+ adr new "Use PostgreSQL as Primary Database"
385
+
386
+ # Supersede an ADR
387
+ adr new -s 3 "Deprecate MongoDB in Favor of PostgreSQL"
388
+
389
+ # Generate table of contents
390
+ adr generate toc > docs/adr/README.md
391
+
392
+ # Link related ADRs
393
+ adr link 2 "Complements" 1 "Is complemented by"
394
+ ```
395
+
396
+ ## Review Process
397
+
398
+ ```markdown
399
+ ## ADR Review Checklist
400
+
401
+ ### Before Submission
402
+
403
+ - [ ] Context clearly explains the problem
404
+ - [ ] All viable options considered
405
+ - [ ] Pros/cons balanced and honest
406
+ - [ ] Consequences (positive and negative) documented
407
+ - [ ] Related ADRs linked
408
+
409
+ ### During Review
410
+
411
+ - [ ] At least 2 senior engineers reviewed
412
+ - [ ] Affected teams consulted
413
+ - [ ] Security implications considered
414
+ - [ ] Cost implications documented
415
+ - [ ] Reversibility assessed
416
+
417
+ ### After Acceptance
418
+
419
+ - [ ] ADR index updated
420
+ - [ ] Team notified
421
+ - [ ] Implementation tickets created
422
+ - [ ] Related documentation updated
423
+ ```
424
+
425
+ ## Best Practices
426
+
427
+ ### Do's
428
+
429
+ - **Write ADRs early** - Before implementation starts
430
+ - **Keep them short** - 1-2 pages maximum
431
+ - **Be honest about trade-offs** - Include real cons
432
+ - **Link related decisions** - Build decision graph
433
+ - **Update status** - Deprecate when superseded
434
+
435
+ ### Don'ts
436
+
437
+ - **Don't change accepted ADRs** - Write new ones to supersede
438
+ - **Don't skip context** - Future readers need background
439
+ - **Don't hide failures** - Rejected decisions are valuable
440
+ - **Don't be vague** - Specific decisions, specific consequences
441
+ - **Don't forget implementation** - ADR without action is waste
442
+
443
+ ## Resources
444
+
445
+ - [Documenting Architecture Decisions (Michael Nygard)](https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions)
446
+ - [MADR Template](https://adr.github.io/madr/)
447
+ - [ADR GitHub Organization](https://adr.github.io/)
448
+ - [adr-tools](https://github.com/npryce/adr-tools)