@comfanion/workflow 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +185 -0
  2. package/bin/cli.js +406 -0
  3. package/package.json +50 -0
  4. package/src/build-info.json +16 -0
  5. package/src/opencode/ARCHITECTURE.md +255 -0
  6. package/src/opencode/FLOW.yaml +900 -0
  7. package/src/opencode/agents/analyst.md +141 -0
  8. package/src/opencode/agents/architect.md +177 -0
  9. package/src/opencode/agents/change-manager.md +263 -0
  10. package/src/opencode/agents/dev.md +171 -0
  11. package/src/opencode/agents/module-docs.md +628 -0
  12. package/src/opencode/agents/pm.md +157 -0
  13. package/src/opencode/agents/researcher.md +254 -0
  14. package/src/opencode/agents/sm.md +184 -0
  15. package/src/opencode/agents/workflow-orchestrator.md +249 -0
  16. package/src/opencode/checklists/architecture-checklist.md +166 -0
  17. package/src/opencode/checklists/code-review-checklist.md +151 -0
  18. package/src/opencode/checklists/prd-checklist.md +140 -0
  19. package/src/opencode/checklists/requirements-checklist.md +86 -0
  20. package/src/opencode/checklists/story-checklist.md +137 -0
  21. package/src/opencode/commands/architecture.md +68 -0
  22. package/src/opencode/commands/archive.md +146 -0
  23. package/src/opencode/commands/change.md +169 -0
  24. package/src/opencode/commands/clarify.md +132 -0
  25. package/src/opencode/commands/code-review.md +96 -0
  26. package/src/opencode/commands/coding-standards.md +102 -0
  27. package/src/opencode/commands/dev-story.md +80 -0
  28. package/src/opencode/commands/diagram.md +152 -0
  29. package/src/opencode/commands/epics.md +52 -0
  30. package/src/opencode/commands/help.md +139 -0
  31. package/src/opencode/commands/jira-sync.md +58 -0
  32. package/src/opencode/commands/module-docs.md +158 -0
  33. package/src/opencode/commands/prd.md +63 -0
  34. package/src/opencode/commands/quick.md +166 -0
  35. package/src/opencode/commands/requirements.md +49 -0
  36. package/src/opencode/commands/research.md +113 -0
  37. package/src/opencode/commands/sprint-plan.md +59 -0
  38. package/src/opencode/commands/stories.md +61 -0
  39. package/src/opencode/commands/validate.md +84 -0
  40. package/src/opencode/commands/workflow-status.md +150 -0
  41. package/src/opencode/config.yaml +223 -0
  42. package/src/opencode/opencode.json +36 -0
  43. package/src/opencode/skills/acceptance-criteria/SKILL.md +212 -0
  44. package/src/opencode/skills/adr-writing/SKILL.md +241 -0
  45. package/src/opencode/skills/architecture-design/SKILL.md +183 -0
  46. package/src/opencode/skills/architecture-validation/SKILL.md +199 -0
  47. package/src/opencode/skills/archiving/SKILL.md +191 -0
  48. package/src/opencode/skills/changelog/SKILL.md +280 -0
  49. package/src/opencode/skills/code-review/SKILL.md +193 -0
  50. package/src/opencode/skills/coding-standards/SKILL.md +430 -0
  51. package/src/opencode/skills/diagram-creation/SKILL.md +273 -0
  52. package/src/opencode/skills/doc-todo/SKILL.md +325 -0
  53. package/src/opencode/skills/epic-writing/SKILL.md +291 -0
  54. package/src/opencode/skills/jira-integration/SKILL.md +560 -0
  55. package/src/opencode/skills/methodologies/SKILL.md +376 -0
  56. package/src/opencode/skills/module-documentation/SKILL.md +214 -0
  57. package/src/opencode/skills/prd-validation/SKILL.md +164 -0
  58. package/src/opencode/skills/prd-writing/SKILL.md +104 -0
  59. package/src/opencode/skills/requirements-gathering/SKILL.md +132 -0
  60. package/src/opencode/skills/requirements-validation/SKILL.md +141 -0
  61. package/src/opencode/skills/research-methodology/SKILL.md +140 -0
  62. package/src/opencode/skills/sprint-planning/SKILL.md +217 -0
  63. package/src/opencode/skills/story-writing/SKILL.md +574 -0
  64. package/src/opencode/skills/test-design/SKILL.md +313 -0
  65. package/src/opencode/skills/translation/SKILL.md +411 -0
  66. package/src/opencode/templates/CHANGELOG.md +82 -0
  67. package/src/opencode/templates/adr-template.md +115 -0
  68. package/src/opencode/templates/architecture-template.md +362 -0
  69. package/src/opencode/templates/change-proposal-template.md +186 -0
  70. package/src/opencode/templates/epic-template.md +151 -0
  71. package/src/opencode/templates/git-workflow-template.md +384 -0
  72. package/src/opencode/templates/integration-tests-template.md +265 -0
  73. package/src/opencode/templates/jira-cache-template.yaml +103 -0
  74. package/src/opencode/templates/module-index-template.md +139 -0
  75. package/src/opencode/templates/module-test-cases-template.md +230 -0
  76. package/src/opencode/templates/prd-acceptance-criteria-template.md +124 -0
  77. package/src/opencode/templates/prd-template.md +479 -0
  78. package/src/opencode/templates/requirements-template.md +132 -0
  79. package/src/opencode/templates/sprint-status-template.yaml +84 -0
  80. package/src/opencode/templates/story-template.md +437 -0
  81. package/src/opencode/templates/testing-standards-template.md +359 -0
  82. package/src/opencode/workflows/dev-story/instructions.md +529 -0
  83. package/src/repo-structure/.gitattributes +64 -0
  84. package/src/repo-structure/CONTRIBUTING.md +182 -0
  85. package/src/repo-structure/README.md +77 -0
  86. package/src/repo-structure/docs/README.md +62 -0
  87. package/src/repo-structure/docs/api/README.md +43 -0
  88. package/src/repo-structure/docs/architecture/README.md +36 -0
  89. package/src/repo-structure/docs/architecture/adr/README.md +53 -0
  90. package/src/repo-structure/docs/architecture/diagrams/README.md +59 -0
  91. package/src/repo-structure/docs/coding-standards/README.md +52 -0
  92. package/src/repo-structure/docs/confluence/README.md +43 -0
  93. package/src/repo-structure/docs/requirements/README.md +28 -0
  94. package/src/repo-structure/docs/sprint-artifacts/README.md +76 -0
  95. package/src/repo-structure/docs/sprint-artifacts/backlog/README.md +24 -0
@@ -0,0 +1,265 @@
1
+ # Architecture Integration Tests
2
+
3
+ **Architecture Version:** [X.Y]
4
+ **Date:** [YYYY-MM-DD]
5
+ **Author:** [Name]
6
+ **Status:** Draft | Review | Approved
7
+
8
+ ---
9
+
10
+ ## Overview
11
+
12
+ This document defines integration test specifications for module contracts,
13
+ API boundaries, and cross-cutting concerns as defined in the Architecture document.
14
+
15
+ **Reference:** @docs/architecture.md
16
+
17
+ ---
18
+
19
+ ## 1. Module Contract Tests
20
+
21
+ ### 1.1 [Module A] ↔ [Module B] Contract
22
+
23
+ **Integration Type:** API | Event | Database
24
+ **Architecture Reference:** Section X.Y
25
+
26
+ #### Contract Definition
27
+
28
+ ```yaml
29
+ producer: module-a
30
+ consumer: module-b
31
+ contract_type: REST API | Kafka Event | Shared Schema
32
+ ```
33
+
34
+ #### Test Scenarios
35
+
36
+ | Test ID | Scenario | Input | Expected Output | Priority |
37
+ |---------|----------|-------|-----------------|----------|
38
+ | INT-001 | Happy path | Valid request | 200 OK + response | P0 |
39
+ | INT-002 | Invalid input | Malformed request | 400 Bad Request | P0 |
40
+ | INT-003 | Not found | Non-existent ID | 404 Not Found | P1 |
41
+ | INT-004 | Timeout handling | Slow response | Retry + fallback | P1 |
42
+
43
+ #### Contract Schema
44
+
45
+ ```json
46
+ // Request
47
+ {
48
+ "id": "uuid",
49
+ "data": {}
50
+ }
51
+
52
+ // Response
53
+ {
54
+ "status": "success|error",
55
+ "data": {}
56
+ }
57
+ ```
58
+
59
+ ---
60
+
61
+ ### 1.2 [Module C] ↔ [External System] Contract
62
+
63
+ **Integration Type:** External API
64
+ **Architecture Reference:** Section X.Y
65
+
66
+ #### Test Scenarios
67
+
68
+ | Test ID | Scenario | Input | Expected Output | Priority |
69
+ |---------|----------|-------|-----------------|----------|
70
+ | INT-010 | External API call | Valid payload | External response | P0 |
71
+ | INT-011 | External unavailable | Any request | Circuit breaker | P0 |
72
+ | INT-012 | Rate limit hit | Many requests | Backoff + retry | P1 |
73
+
74
+ ---
75
+
76
+ ## 2. Event-Driven Integration Tests
77
+
78
+ ### 2.1 Event: [event.name]
79
+
80
+ **Producer:** [module-name]
81
+ **Consumers:** [consumer-1], [consumer-2]
82
+ **Architecture Reference:** Section X.Y
83
+
84
+ #### Event Schema
85
+
86
+ ```json
87
+ {
88
+ "event_type": "order.created",
89
+ "version": "1.0",
90
+ "timestamp": "ISO8601",
91
+ "payload": {
92
+ "order_id": "uuid",
93
+ "customer_id": "uuid"
94
+ }
95
+ }
96
+ ```
97
+
98
+ #### Test Scenarios
99
+
100
+ | Test ID | Scenario | Setup | Action | Verification | Priority |
101
+ |---------|----------|-------|--------|--------------|----------|
102
+ | EVT-001 | Event published | Order created | Publish event | Event in Kafka topic | P0 |
103
+ | EVT-002 | Consumer processes | Event published | Consumer runs | State updated | P0 |
104
+ | EVT-003 | Idempotent processing | Duplicate event | Consumer runs | No duplicate state | P0 |
105
+ | EVT-004 | Dead letter handling | Invalid event | Consumer fails | Event in DLQ | P1 |
106
+
107
+ ---
108
+
109
+ ## 3. Database Integration Tests
110
+
111
+ ### 3.1 [Module] Repository Tests
112
+
113
+ **Database:** PostgreSQL
114
+ **Tables:** [table1], [table2]
115
+ **Architecture Reference:** Section X.Y
116
+
117
+ #### Test Scenarios
118
+
119
+ | Test ID | Scenario | Setup | Operation | Verification | Priority |
120
+ |---------|----------|-------|-----------|--------------|----------|
121
+ | DB-001 | Create entity | Empty DB | Insert | Entity persisted | P0 |
122
+ | DB-002 | Read entity | Entity exists | Select | Correct data returned | P0 |
123
+ | DB-003 | Update entity | Entity exists | Update | Changes persisted | P0 |
124
+ | DB-004 | Delete entity | Entity exists | Delete | Entity removed | P0 |
125
+ | DB-005 | Optimistic lock | Concurrent update | Update | Version conflict | P0 |
126
+ | DB-006 | Transaction rollback | Partial failure | Multi-insert | All rolled back | P0 |
127
+
128
+ ---
129
+
130
+ ## 4. API Boundary Tests
131
+
132
+ ### 4.1 [Service] HTTP API
133
+
134
+ **Base URL:** /api/v1/[resource]
135
+ **Architecture Reference:** Section X.Y
136
+
137
+ #### Endpoint Tests
138
+
139
+ | Test ID | Method | Endpoint | Request | Expected | Priority |
140
+ |---------|--------|----------|---------|----------|----------|
141
+ | API-001 | POST | /resource | Valid body | 201 Created | P0 |
142
+ | API-002 | GET | /resource/{id} | Valid ID | 200 + entity | P0 |
143
+ | API-003 | PUT | /resource/{id} | Valid update | 200 + updated | P0 |
144
+ | API-004 | DELETE | /resource/{id} | Valid ID | 204 No Content | P0 |
145
+ | API-005 | POST | /resource | Invalid body | 400 + errors | P0 |
146
+ | API-006 | GET | /resource/{id} | Unknown ID | 404 Not Found | P0 |
147
+ | API-007 | ANY | /resource | No auth | 401 Unauthorized | P0 |
148
+ | API-008 | ANY | /resource | Wrong role | 403 Forbidden | P1 |
149
+
150
+ ---
151
+
152
+ ## 5. Cross-Cutting Concerns
153
+
154
+ ### 5.1 Authentication & Authorization
155
+
156
+ | Test ID | Scenario | Setup | Action | Expected | Priority |
157
+ |---------|----------|-------|--------|----------|----------|
158
+ | AUTH-001 | Valid JWT | Valid token | API call | 200 OK | P0 |
159
+ | AUTH-002 | Expired JWT | Expired token | API call | 401 Unauthorized | P0 |
160
+ | AUTH-003 | Invalid JWT | Malformed token | API call | 401 Unauthorized | P0 |
161
+ | AUTH-004 | Role check | User without role | Protected endpoint | 403 Forbidden | P0 |
162
+
163
+ ### 5.2 Observability
164
+
165
+ | Test ID | Scenario | Action | Verification | Priority |
166
+ |---------|----------|--------|--------------|----------|
167
+ | OBS-001 | Request logging | API call | Log entry created | P1 |
168
+ | OBS-002 | Error logging | Error occurs | Error logged with context | P0 |
169
+ | OBS-003 | Trace propagation | Cross-service call | Trace ID preserved | P1 |
170
+ | OBS-004 | Metrics export | API calls | Metrics in Prometheus | P1 |
171
+
172
+ ### 5.3 Error Handling
173
+
174
+ | Test ID | Scenario | Trigger | Expected Response | Priority |
175
+ |---------|----------|---------|-------------------|----------|
176
+ | ERR-001 | Validation error | Invalid input | 400 + structured error | P0 |
177
+ | ERR-002 | Business error | Domain violation | 422 + error code | P0 |
178
+ | ERR-003 | Not found | Unknown resource | 404 + message | P0 |
179
+ | ERR-004 | Internal error | Unexpected failure | 500 + correlation ID | P0 |
180
+ | ERR-005 | Service unavailable | Dependency down | 503 + retry-after | P1 |
181
+
182
+ ---
183
+
184
+ ## 6. NFR Verification Tests
185
+
186
+ ### 6.1 Performance Tests
187
+
188
+ **Tool:** k6
189
+ **Environment:** Staging
190
+
191
+ | Test ID | NFR ID | Scenario | Target | Duration | Priority |
192
+ |---------|--------|----------|--------|----------|----------|
193
+ | PERF-001 | NFR-001 | API response time | p95 < 200ms | 10 min | P0 |
194
+ | PERF-002 | NFR-002 | Throughput | > 1000 RPS | 10 min | P0 |
195
+ | PERF-003 | NFR-003 | Concurrent users | 500 users | 30 min | P1 |
196
+
197
+ ### 6.2 Reliability Tests
198
+
199
+ | Test ID | NFR ID | Scenario | Recovery Time | Priority |
200
+ |---------|--------|----------|---------------|----------|
201
+ | REL-001 | NFR-010 | Service restart | < 30 sec | P0 |
202
+ | REL-002 | NFR-011 | Database failover | < 60 sec | P0 |
203
+ | REL-003 | NFR-012 | Kafka partition leader change | No message loss | P0 |
204
+
205
+ ---
206
+
207
+ ## 7. Test Environment
208
+
209
+ ### 7.1 Testcontainers Setup
210
+
211
+ ```go
212
+ // Example testcontainers configuration
213
+ containers:
214
+ postgres:
215
+ image: postgres:17
216
+ ports: [5432]
217
+ env:
218
+ POSTGRES_DB: test_db
219
+ POSTGRES_USER: test
220
+ POSTGRES_PASSWORD: test
221
+
222
+ kafka:
223
+ image: confluentinc/cp-kafka:7.x
224
+ ports: [9092]
225
+
226
+ redis:
227
+ image: redis:7
228
+ ports: [6379]
229
+ ```
230
+
231
+ ### 7.2 Test Data
232
+
233
+ | Dataset | Description | Location |
234
+ |---------|-------------|----------|
235
+ | seed_data.sql | Initial test data | tests/fixtures/ |
236
+ | events.json | Sample Kafka events | tests/fixtures/ |
237
+
238
+ ---
239
+
240
+ ## Coverage Matrix
241
+
242
+ | Module | Contract Tests | Event Tests | API Tests | DB Tests | Total |
243
+ |--------|---------------|-------------|-----------|----------|-------|
244
+ | Catalog | 5 | 3 | 8 | 6 | 22 |
245
+ | Orders | 4 | 5 | 10 | 8 | 27 |
246
+ | Inventory | 3 | 4 | 6 | 5 | 18 |
247
+ | **Total** | 12 | 12 | 24 | 19 | 67 |
248
+
249
+ ---
250
+
251
+ ## Sign-off
252
+
253
+ | Role | Name | Date | Signature |
254
+ |------|------|------|-----------|
255
+ | Architect | | | |
256
+ | Tech Lead | | | |
257
+ | QA Lead | | | |
258
+
259
+ ---
260
+
261
+ ## Revision History
262
+
263
+ | Version | Date | Author | Changes |
264
+ |---------|------|--------|---------|
265
+ | 0.1 | YYYY-MM-DD | [Name] | Initial draft |
@@ -0,0 +1,103 @@
1
+ # Jira Cache File
2
+ # Auto-generated and maintained by SM agent
3
+ # Manual edits will be overwritten on next sync
4
+
5
+ metadata:
6
+ project_key: "{{project_key}}"
7
+ last_sync: "{{timestamp}}"
8
+ cache_ttl_minutes: 30
9
+ total_items: 0
10
+
11
+ # Project configuration
12
+ project:
13
+ key: "{{project_key}}"
14
+ name: "{{project_name}}"
15
+ url: "{{jira_base_url}}/browse/{{project_key}}"
16
+
17
+ # Available issue types
18
+ issue_types:
19
+ - name: "Epic"
20
+ id: "10000"
21
+ - name: "Story"
22
+ id: "10001"
23
+ - name: "Task"
24
+ id: "10002"
25
+ - name: "Bug"
26
+ id: "10003"
27
+
28
+ # Available statuses
29
+ statuses:
30
+ - name: "Backlog"
31
+ id: "10000"
32
+ category: "backlog"
33
+ - name: "In Progress"
34
+ id: "10001"
35
+ category: "in_progress"
36
+ - name: "In Review"
37
+ id: "10002"
38
+ category: "review"
39
+ - name: "QA"
40
+ id: "10003"
41
+ category: "qa"
42
+ - name: "Done"
43
+ id: "10004"
44
+ category: "done"
45
+
46
+ # Status workflow validated
47
+ workflow_valid: true
48
+ missing_statuses: []
49
+
50
+ # Active sprints
51
+ sprints:
52
+ - id: "{{sprint_id}}"
53
+ name: "Sprint {{sprint_number}}"
54
+ state: "active" # active | future | closed
55
+ start_date: "{{start_date}}"
56
+ end_date: "{{end_date}}"
57
+ goal: "{{sprint_goal}}"
58
+
59
+ # Epics in project
60
+ epics:
61
+ - key: "PROJ-E01"
62
+ summary: "{{epic_title}}"
63
+ status: "In Progress"
64
+ url: "{{jira_base_url}}/browse/PROJ-E01"
65
+ local_doc: "docs/sprint-artifacts/sprint-1/epic-01.md"
66
+ stories:
67
+ - key: "PROJ-S01"
68
+ summary: "{{story_title}}"
69
+ status: "In Progress"
70
+ url: "{{jira_base_url}}/browse/PROJ-S01"
71
+ local_doc: "docs/sprint-artifacts/sprint-1/stories/story-01.md"
72
+ branch: "feature/PROJ-S01-story-title"
73
+ tasks:
74
+ - key: "PROJ-T01"
75
+ summary: "{{task_title}}"
76
+ status: "Done"
77
+ assignee: "{{user}}"
78
+
79
+ # Quick lookup maps (for fast access)
80
+ lookup:
81
+ by_key:
82
+ "PROJ-E01":
83
+ type: "epic"
84
+ index: 0
85
+ "PROJ-S01":
86
+ type: "story"
87
+ epic_key: "PROJ-E01"
88
+ index: 0
89
+ by_local_doc:
90
+ "docs/sprint-artifacts/sprint-1/epic-01.md": "PROJ-E01"
91
+ "docs/sprint-artifacts/sprint-1/stories/story-01.md": "PROJ-S01"
92
+ by_status:
93
+ backlog: []
94
+ in_progress: ["PROJ-S01"]
95
+ review: []
96
+ qa: []
97
+ done: ["PROJ-T01"]
98
+
99
+ # Pending sync queue (local changes not yet synced)
100
+ pending_sync:
101
+ create: []
102
+ update: []
103
+ transition: []
@@ -0,0 +1,139 @@
1
+ # [Module Name]
2
+
3
+ **Domain:** [Bounded Context]
4
+ **Owner:** [Team/Person]
5
+ **Status:** Planning | Development | Production
6
+ **Last Updated:** YYYY-MM-DD
7
+
8
+ ---
9
+
10
+ ## Overview
11
+
12
+ [2-3 sentences: What this module does and why it exists]
13
+
14
+ ---
15
+
16
+ ## Quick Links
17
+
18
+ | Document | Description |
19
+ |----------|-------------|
20
+ | [Architecture](./architecture.md) | Module design and structure |
21
+ | [PRD](./prd.md) | Module requirements |
22
+ | [Data Model](./data-model.md) | Database schema |
23
+ | [Domain](./domain.md) | Domain model (DDD) |
24
+
25
+ ---
26
+
27
+ ## Subdirectories
28
+
29
+ | Directory | Contents | Status |
30
+ |-----------|----------|--------|
31
+ | [api/](./api/) | OpenAPI specs | Active |
32
+ | [events/](./events/) | Event schemas | Active |
33
+ | [scenarios/](./scenarios/) | Use case scenarios | Active |
34
+ | [flows/](./flows/) | Flow diagrams | Active |
35
+ | [integrations/](./integrations/) | External integrations | - |
36
+ | [decisions/](./decisions/) | Module ADRs | - |
37
+
38
+ ---
39
+
40
+ ## Key Responsibilities
41
+
42
+ - [Responsibility 1]
43
+ - [Responsibility 2]
44
+ - [Responsibility 3]
45
+
46
+ ---
47
+
48
+ ## Dependencies
49
+
50
+ ### Depends On
51
+
52
+ | Module | Type | Purpose |
53
+ |--------|------|---------|
54
+ | [Module A](../module-a/) | Sync (HTTP) | Get user data |
55
+ | [Module B](../module-b/) | Async (Event) | React to events |
56
+
57
+ ### Depended By
58
+
59
+ | Module | Type | Purpose |
60
+ |--------|------|---------|
61
+ | [Module C](../module-c/) | Sync (HTTP) | Fetch our data |
62
+ | [Module D](../module-d/) | Async (Event) | Consumes our events |
63
+
64
+ ---
65
+
66
+ ## Key Metrics
67
+
68
+ | Metric | Target | Current |
69
+ |--------|--------|---------|
70
+ | Latency (p95) | < 100ms | - |
71
+ | Availability | 99.9% | - |
72
+ | Error Rate | < 0.1% | - |
73
+ | Throughput | > 500 RPS | - |
74
+
75
+ ---
76
+
77
+ ## API Summary
78
+
79
+ | Method | Endpoint | Description |
80
+ |--------|----------|-------------|
81
+ | POST | `/api/v1/[resource]` | Create |
82
+ | GET | `/api/v1/[resource]/{id}` | Get by ID |
83
+ | PUT | `/api/v1/[resource]/{id}` | Update |
84
+ | GET | `/api/v1/[resource]` | List |
85
+
86
+ Full API: [api/](./api/)
87
+
88
+ ---
89
+
90
+ ## Events Summary
91
+
92
+ ### Published
93
+
94
+ | Event | Topic | Description |
95
+ |-------|-------|-------------|
96
+ | [Event]Created | [topic] | When created |
97
+ | [Event]Updated | [topic] | When updated |
98
+
99
+ ### Consumed
100
+
101
+ | Event | Topic | Source |
102
+ |-------|-------|--------|
103
+ | [Other]Created | [topic] | [Module] |
104
+
105
+ Full events: [events/](./events/)
106
+
107
+ ---
108
+
109
+ ## Quick Start
110
+
111
+ ### Local Development
112
+
113
+ ```bash
114
+ # Prerequisites
115
+ # - Go 1.21+
116
+ # - PostgreSQL 15+
117
+ # - Docker
118
+
119
+ # Run locally
120
+ cd src/services/[module]
121
+ go run cmd/api/main.go
122
+
123
+ # Run tests
124
+ go test ./...
125
+ ```
126
+
127
+ ### Environment Variables
128
+
129
+ | Variable | Description | Required |
130
+ |----------|-------------|----------|
131
+ | `DATABASE_URL` | PostgreSQL connection | Yes |
132
+ | `KAFKA_BROKERS` | Kafka broker list | Yes |
133
+
134
+ ---
135
+
136
+ ## Related
137
+
138
+ - [System Architecture](../../architecture.md)
139
+ - [Database Overview](../../architecture-db.md)