agile-context-engineering 0.3.0 → 0.5.1

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 (139) hide show
  1. package/.claude-plugin/marketplace.json +18 -0
  2. package/.claude-plugin/plugin.json +10 -0
  3. package/CHANGELOG.md +7 -1
  4. package/LICENSE +51 -51
  5. package/README.md +330 -318
  6. package/agents/ace-code-discovery-analyst.md +245 -245
  7. package/agents/ace-code-integration-analyst.md +248 -248
  8. package/agents/ace-code-reviewer.md +375 -375
  9. package/agents/ace-product-owner.md +365 -361
  10. package/agents/ace-project-researcher.md +606 -606
  11. package/agents/ace-research-synthesizer.md +228 -228
  12. package/agents/ace-technical-application-architect.md +315 -315
  13. package/agents/ace-wiki-mapper.md +449 -445
  14. package/bin/install.js +605 -195
  15. package/hooks/ace-check-update.js +71 -62
  16. package/hooks/ace-statusline.js +107 -89
  17. package/hooks/hooks.json +14 -0
  18. package/package.json +7 -5
  19. package/shared/lib/ace-core.js +361 -0
  20. package/shared/lib/ace-core.test.js +308 -0
  21. package/shared/lib/ace-github.js +753 -0
  22. package/shared/lib/ace-story.js +400 -0
  23. package/shared/lib/ace-story.test.js +250 -0
  24. package/{agile-context-engineering → shared}/utils/questioning.xml +110 -110
  25. package/{agile-context-engineering → shared}/utils/ui-formatting.md +299 -299
  26. package/{commands/ace/execute-story.md → skills/execute-story/SKILL.md} +116 -138
  27. package/skills/execute-story/script.js +291 -0
  28. package/skills/execute-story/script.test.js +261 -0
  29. package/{agile-context-engineering/templates/product/story.xml → skills/execute-story/story-template.xml} +451 -451
  30. package/skills/execute-story/walkthrough-template.xml +255 -0
  31. package/{agile-context-engineering/workflows/execute-story.xml → skills/execute-story/workflow.xml} +1221 -1219
  32. package/skills/help/SKILL.md +71 -0
  33. package/skills/help/script.js +315 -0
  34. package/skills/help/script.test.js +183 -0
  35. package/{agile-context-engineering/workflows/help.xml → skills/help/workflow.xml} +544 -533
  36. package/{commands/ace/init-coding-standards.md → skills/init-coding-standards/SKILL.md} +91 -83
  37. package/{agile-context-engineering/templates/wiki/coding-standards.xml → skills/init-coding-standards/coding-standards-template.xml} +531 -531
  38. package/skills/init-coding-standards/script.js +50 -0
  39. package/skills/init-coding-standards/script.test.js +70 -0
  40. package/{agile-context-engineering/workflows/init-coding-standards.xml → skills/init-coding-standards/workflow.xml} +381 -386
  41. package/skills/map-cross-cutting/SKILL.md +126 -0
  42. package/{agile-context-engineering/templates/wiki → skills/map-cross-cutting}/system-cross-cutting.xml +197 -197
  43. package/skills/map-cross-cutting/workflow.xml +330 -0
  44. package/skills/map-guide/SKILL.md +126 -0
  45. package/{agile-context-engineering/templates/wiki → skills/map-guide}/guide.xml +137 -137
  46. package/skills/map-guide/workflow.xml +320 -0
  47. package/skills/map-pattern/SKILL.md +125 -0
  48. package/{agile-context-engineering/templates/wiki → skills/map-pattern}/pattern.xml +159 -159
  49. package/skills/map-pattern/workflow.xml +331 -0
  50. package/{commands/ace/map-story.md → skills/map-story/SKILL.md} +180 -165
  51. package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/decizions.xml +115 -115
  52. package/skills/map-story/templates/guide.xml +137 -0
  53. package/skills/map-story/templates/pattern.xml +159 -0
  54. package/skills/map-story/templates/system-cross-cutting.xml +197 -0
  55. package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/system.xml +381 -381
  56. package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/tech-debt-index.xml +125 -125
  57. package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/walkthrough.xml +255 -255
  58. package/{agile-context-engineering/workflows/map-story.xml → skills/map-story/workflow.xml} +1046 -1046
  59. package/{commands/ace/map-subsystem.md → skills/map-subsystem/SKILL.md} +155 -140
  60. package/skills/map-subsystem/script.js +51 -0
  61. package/skills/map-subsystem/script.test.js +68 -0
  62. package/skills/map-subsystem/templates/decizions.xml +115 -0
  63. package/skills/map-subsystem/templates/guide.xml +137 -0
  64. package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/module-discovery.xml +174 -174
  65. package/skills/map-subsystem/templates/pattern.xml +159 -0
  66. package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-architecture.xml +343 -343
  67. package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-structure.xml +234 -234
  68. package/skills/map-subsystem/templates/system-cross-cutting.xml +197 -0
  69. package/skills/map-subsystem/templates/system.xml +381 -0
  70. package/skills/map-subsystem/templates/walkthrough.xml +255 -0
  71. package/{agile-context-engineering/workflows/map-subsystem.xml → skills/map-subsystem/workflow.xml} +1173 -1178
  72. package/skills/map-sys-doc/SKILL.md +125 -0
  73. package/skills/map-sys-doc/system.xml +381 -0
  74. package/skills/map-sys-doc/workflow.xml +336 -0
  75. package/{commands/ace/map-system.md → skills/map-system/SKILL.md} +103 -92
  76. package/skills/map-system/script.js +75 -0
  77. package/skills/map-system/script.test.js +73 -0
  78. package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-architecture.xml +254 -254
  79. package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-structure.xml +177 -177
  80. package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/testing-framework.xml +283 -283
  81. package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/wiki-readme.xml +296 -296
  82. package/{agile-context-engineering/workflows/map-system.xml → skills/map-system/workflow.xml} +667 -672
  83. package/{commands/ace/map-walkthrough.md → skills/map-walkthrough/SKILL.md} +140 -127
  84. package/skills/map-walkthrough/walkthrough.xml +255 -0
  85. package/{agile-context-engineering/workflows/map-walkthrough.xml → skills/map-walkthrough/workflow.xml} +457 -457
  86. package/{commands/ace/plan-backlog.md → skills/plan-backlog/SKILL.md} +93 -83
  87. package/{agile-context-engineering/templates/product/product-backlog.xml → skills/plan-backlog/product-backlog-template.xml} +231 -231
  88. package/skills/plan-backlog/script.js +121 -0
  89. package/skills/plan-backlog/script.test.js +83 -0
  90. package/{agile-context-engineering/workflows/plan-backlog.xml → skills/plan-backlog/workflow.xml} +1348 -1356
  91. package/{commands/ace/plan-feature.md → skills/plan-feature/SKILL.md} +99 -89
  92. package/{agile-context-engineering/templates/product/feature.xml → skills/plan-feature/feature-template.xml} +361 -361
  93. package/skills/plan-feature/script.js +131 -0
  94. package/skills/plan-feature/script.test.js +80 -0
  95. package/{agile-context-engineering/workflows/plan-feature.xml → skills/plan-feature/workflow.xml} +1487 -1495
  96. package/{commands/ace/plan-product-vision.md → skills/plan-product-vision/SKILL.md} +91 -81
  97. package/{agile-context-engineering/templates/product/product-vision.xml → skills/plan-product-vision/product-vision-template.xml} +227 -227
  98. package/skills/plan-product-vision/script.js +51 -0
  99. package/skills/plan-product-vision/script.test.js +69 -0
  100. package/{agile-context-engineering/workflows/plan-product-vision.xml → skills/plan-product-vision/workflow.xml} +337 -342
  101. package/{commands/ace/plan-story.md → skills/plan-story/SKILL.md} +139 -159
  102. package/skills/plan-story/script.js +295 -0
  103. package/skills/plan-story/script.test.js +240 -0
  104. package/skills/plan-story/story-template.xml +458 -0
  105. package/{agile-context-engineering/workflows/plan-story.xml → skills/plan-story/workflow.xml} +1301 -944
  106. package/{commands/ace/research-external-solution.md → skills/research-external-solution/SKILL.md} +120 -138
  107. package/{agile-context-engineering/templates/product/external-solution.xml → skills/research-external-solution/external-solution-template.xml} +832 -832
  108. package/skills/research-external-solution/script.js +229 -0
  109. package/skills/research-external-solution/script.test.js +134 -0
  110. package/{agile-context-engineering/workflows/research-external-solution.xml → skills/research-external-solution/workflow.xml} +657 -659
  111. package/{commands/ace/research-integration-solution.md → skills/research-integration-solution/SKILL.md} +121 -135
  112. package/{agile-context-engineering/templates/product/story-integration-solution.xml → skills/research-integration-solution/integration-solution-template.xml} +1015 -1015
  113. package/skills/research-integration-solution/script.js +223 -0
  114. package/skills/research-integration-solution/script.test.js +134 -0
  115. package/{agile-context-engineering/workflows/research-integration-solution.xml → skills/research-integration-solution/workflow.xml} +711 -713
  116. package/{commands/ace/research-story-wiki.md → skills/research-story-wiki/SKILL.md} +101 -116
  117. package/skills/research-story-wiki/script.js +223 -0
  118. package/skills/research-story-wiki/script.test.js +138 -0
  119. package/{agile-context-engineering/templates/product/story-wiki.xml → skills/research-story-wiki/story-wiki-template.xml} +194 -194
  120. package/{agile-context-engineering/workflows/research-story-wiki.xml → skills/research-story-wiki/workflow.xml} +473 -475
  121. package/{commands/ace/research-technical-solution.md → skills/research-technical-solution/SKILL.md} +131 -147
  122. package/skills/research-technical-solution/script.js +223 -0
  123. package/skills/research-technical-solution/script.test.js +134 -0
  124. package/{agile-context-engineering/templates/product/story-technical-solution.xml → skills/research-technical-solution/technical-solution-template.xml} +1025 -1025
  125. package/{agile-context-engineering/workflows/research-technical-solution.xml → skills/research-technical-solution/workflow.xml} +761 -763
  126. package/{commands/ace/review-story.md → skills/review-story/SKILL.md} +99 -109
  127. package/skills/review-story/script.js +249 -0
  128. package/skills/review-story/script.test.js +169 -0
  129. package/skills/review-story/story-template.xml +451 -0
  130. package/{agile-context-engineering/workflows/review-story.xml → skills/review-story/workflow.xml} +279 -281
  131. package/{commands/ace/update.md → skills/update/SKILL.md} +65 -56
  132. package/{agile-context-engineering/workflows/update.xml → skills/update/workflow.xml} +33 -18
  133. package/agile-context-engineering/src/ace-tools.js +0 -2881
  134. package/agile-context-engineering/src/ace-tools.test.js +0 -1089
  135. package/agile-context-engineering/templates/_command.md +0 -54
  136. package/agile-context-engineering/templates/_workflow.xml +0 -17
  137. package/agile-context-engineering/templates/config.json +0 -0
  138. package/agile-context-engineering/templates/product/integration-solution.xml +0 -0
  139. package/commands/ace/help.md +0 -93
@@ -1,283 +1,283 @@
1
- <!-- Credits: Testing template content adapted from GSD (Get Shit Done) by @raisiqueira -->
2
- <!-- Original source: .gsd/get-shit-done/templates/codebase/testing.md -->
3
-
4
- <testing-framework>
5
- <purpose>
6
- Template for `.docs/wiki/testing-framework.md` — captures test framework, patterns, and
7
- conventions for the project. Answers "How do I write and run tests that match existing patterns?"
8
-
9
- **Purpose:** Document how tests are written and run. Guide for adding tests that match
10
- existing patterns.
11
- </purpose>
12
-
13
- <template>
14
- <test-framework>
15
- ## Test Framework
16
-
17
- **Runner:**
18
- - [Framework: e.g., "Jest 29.x", "Vitest 1.x"]
19
- - [Config: e.g., "jest.config.js in project root"]
20
-
21
- **Assertion Library:**
22
- - [Library: e.g., "built-in expect", "chai"]
23
- - [Matchers: e.g., "toBe, toEqual, toThrow"]
24
-
25
- **Run Commands:**
26
- ```bash
27
- [e.g., "npm test" or "npm run test"] # Run all tests
28
- [e.g., "npm test -- --watch"] # Watch mode
29
- [e.g., "npm test -- path/to/file.test.ts"] # Single file
30
- [e.g., "npm run test:coverage"] # Coverage report
31
- ```
32
- </test-framework>
33
-
34
- <test-file-organization>
35
- ## Test File Organization
36
-
37
- **Location:**
38
- - [Pattern: e.g., "*.test.ts alongside source files"]
39
- - [Alternative: e.g., "__tests__/ directory" or "separate tests/ tree"]
40
-
41
- **Naming:**
42
- - [Unit tests: e.g., "module-name.test.ts"]
43
- - [Integration: e.g., "feature-name.integration.test.ts"]
44
- - [E2E: e.g., "user-flow.e2e.test.ts"]
45
-
46
- **Structure:**
47
- ```
48
- [Show actual directory pattern, e.g.:
49
- src/
50
- lib/
51
- utils.ts
52
- utils.test.ts
53
- services/
54
- user-service.ts
55
- user-service.test.ts
56
- ]
57
- ```
58
- </test-file-organization>
59
-
60
- <test-structure>
61
- ## Test Structure
62
-
63
- **Suite Organization:**
64
- ```typescript
65
- [Show actual pattern used, e.g.:
66
-
67
- describe('ModuleName', () => {
68
- describe('functionName', () => {
69
- it('should handle success case', () => {
70
- // arrange
71
- // act
72
- // assert
73
- });
74
-
75
- it('should handle error case', () => {
76
- // test code
77
- });
78
- });
79
- });
80
- ]
81
- ```
82
-
83
- **Patterns:**
84
- - [Setup: e.g., "beforeEach for shared setup, avoid beforeAll"]
85
- - [Teardown: e.g., "afterEach to clean up, restore mocks"]
86
- - [Structure: e.g., "arrange/act/assert pattern required"]
87
- </test-structure>
88
-
89
- <mocking>
90
- ## Mocking
91
-
92
- **Framework:**
93
- - [Tool: e.g., "Jest built-in mocking", "Vitest vi", "Sinon"]
94
- - [Import mocking: e.g., "vi.mock() at top of file"]
95
-
96
- **Patterns:**
97
- ```typescript
98
- [Show actual mocking pattern, e.g.:
99
-
100
- // Mock external dependency
101
- vi.mock('./external-service', () => ({
102
- fetchData: vi.fn()
103
- }));
104
-
105
- // Mock in test
106
- const mockFetch = vi.mocked(fetchData);
107
- mockFetch.mockResolvedValue({ data: 'test' });
108
- ]
109
- ```
110
-
111
- **What to Mock:**
112
- - [e.g., "External APIs, file system, database"]
113
- - [e.g., "Time/dates (use vi.useFakeTimers)"]
114
- - [e.g., "Network calls (use mock fetch)"]
115
-
116
- **What NOT to Mock:**
117
- - [e.g., "Pure functions, utilities"]
118
- - [e.g., "Internal business logic"]
119
- </mocking>
120
-
121
- <fixtures-and-factories>
122
- ## Fixtures and Factories
123
-
124
- **Test Data:**
125
- ```typescript
126
- [Show pattern for creating test data, e.g.:
127
-
128
- // Factory pattern
129
- function createTestUser(overrides?: Partial&lt;User&gt;): User {
130
- return {
131
- id: 'test-id',
132
- name: 'Test User',
133
- email: 'test@example.com',
134
- ...overrides
135
- };
136
- }
137
-
138
- // Fixture file
139
- // tests/fixtures/users.ts
140
- export const mockUsers = [/* ... */];
141
- ]
142
- ```
143
-
144
- **Location:**
145
- - [e.g., "tests/fixtures/ for shared fixtures"]
146
- - [e.g., "factory functions in test file or tests/factories/"]
147
- </fixtures-and-factories>
148
-
149
- <coverage>
150
- ## Coverage
151
-
152
- **Requirements:**
153
- - [Target: e.g., "80% line coverage", "no specific target"]
154
- - [Enforcement: e.g., "CI blocks &lt;80%", "coverage for awareness only"]
155
-
156
- **Configuration:**
157
- - [Tool: e.g., "built-in coverage via --coverage flag"]
158
- - [Exclusions: e.g., "exclude *.test.ts, config files"]
159
-
160
- **View Coverage:**
161
- ```bash
162
- [e.g., "npm run test:coverage"]
163
- [e.g., "open coverage/index.html"]
164
- ```
165
- </coverage>
166
-
167
- <test-types>
168
- ## Test Types
169
-
170
- **Unit Tests:**
171
- - [Scope: e.g., "test single function/class in isolation"]
172
- - [Mocking: e.g., "mock all external dependencies"]
173
- - [Speed: e.g., "must run in &lt;1s per test"]
174
-
175
- **Integration Tests:**
176
- - [Scope: e.g., "test multiple modules together"]
177
- - [Mocking: e.g., "mock external services, use real internal modules"]
178
- - [Setup: e.g., "use test database, seed data"]
179
-
180
- **E2E Tests:**
181
- - [Framework: e.g., "Playwright for E2E"]
182
- - [Scope: e.g., "test full user flows"]
183
- - [Location: e.g., "e2e/ directory separate from unit tests"]
184
- </test-types>
185
-
186
- <common-patterns>
187
- ## Common Patterns
188
-
189
- **Async Testing:**
190
- ```typescript
191
- [Show pattern, e.g.:
192
-
193
- it('should handle async operation', async () => {
194
- const result = await asyncFunction();
195
- expect(result).toBe('expected');
196
- });
197
- ]
198
- ```
199
-
200
- **Error Testing:**
201
- ```typescript
202
- [Show pattern, e.g.:
203
-
204
- it('should throw on invalid input', () => {
205
- expect(() => functionCall()).toThrow('error message');
206
- });
207
-
208
- // Async error
209
- it('should reject on failure', async () => {
210
- await expect(asyncCall()).rejects.toThrow('error message');
211
- });
212
- ]
213
- ```
214
-
215
- **Snapshot Testing:**
216
- - [Usage: e.g., "for React components only" or "not used"]
217
- - [Location: e.g., "__snapshots__/ directory"]
218
- </common-patterns>
219
- </template>
220
-
221
- <guidelines>
222
-
223
- **What belongs in testing-framework.md:**
224
- - Test framework and runner configuration
225
- - Test file location and naming patterns
226
- - Test structure (describe/it, beforeEach patterns)
227
- - Mocking approach and examples
228
- - Fixture/factory patterns
229
- - Coverage requirements
230
- - How to run tests (commands)
231
- - Common testing patterns in actual code
232
-
233
- **What does NOT belong here:**
234
- - Specific test cases (defer to actual test files)
235
- - Technology choices (that's system-architecture.md)
236
- - CI/CD setup (that's deployment docs)
237
-
238
- **When filling this template:**
239
- - Check package.json scripts for test commands
240
- - Find test config file (jest.config.js, vitest.config.ts)
241
- - Read 3-5 existing test files to identify patterns
242
- - Look for test utilities in tests/ or test-utils/
243
- - Check for coverage configuration
244
- - Document actual patterns used, not ideal patterns
245
-
246
- **Useful for story planning when:**
247
- - Adding new features (write matching tests)
248
- - Refactoring (maintain test patterns)
249
- - Fixing bugs (add regression tests)
250
- - Understanding verification approach
251
- - Setting up test infrastructure
252
-
253
- **Analysis approach:**
254
- - Check package.json for test framework and scripts
255
- - Read test config file for coverage, setup
256
- - Examine test file organization (collocated vs separate)
257
- - Review 5 test files for patterns (mocking, structure, assertions)
258
- - Look for test utilities, fixtures, factories
259
- - Note any test types (unit, integration, e2e)
260
- - Document commands for running tests
261
-
262
- </guidelines>
263
-
264
- <evolution>
265
-
266
- Update when testing patterns or framework changes.
267
-
268
- **Update triggers:**
269
- - Test framework or runner changed (e.g., Jest to Vitest)
270
- - Mocking approach changed
271
- - New test type introduced (e.g., adding E2E tests)
272
- - Coverage requirements changed
273
- - Test file organization restructured
274
- - New test utilities or factories added
275
-
276
- **NOT an update trigger:**
277
- - New test files added following existing patterns
278
- - Individual test case additions
279
- - Bug fixes in test code
280
-
281
- </evolution>
282
-
283
- </testing-framework>
1
+ <!-- Credits: Testing template content adapted from GSD (Get Shit Done) by @raisiqueira -->
2
+ <!-- Original source: .gsd/get-shit-done/templates/codebase/testing.md -->
3
+
4
+ <testing-framework>
5
+ <purpose>
6
+ Template for `.docs/wiki/testing-framework.md` — captures test framework, patterns, and
7
+ conventions for the project. Answers "How do I write and run tests that match existing patterns?"
8
+
9
+ **Purpose:** Document how tests are written and run. Guide for adding tests that match
10
+ existing patterns.
11
+ </purpose>
12
+
13
+ <template>
14
+ <test-framework>
15
+ ## Test Framework
16
+
17
+ **Runner:**
18
+ - [Framework: e.g., "Jest 29.x", "Vitest 1.x"]
19
+ - [Config: e.g., "jest.config.js in project root"]
20
+
21
+ **Assertion Library:**
22
+ - [Library: e.g., "built-in expect", "chai"]
23
+ - [Matchers: e.g., "toBe, toEqual, toThrow"]
24
+
25
+ **Run Commands:**
26
+ ```bash
27
+ [e.g., "npm test" or "npm run test"] # Run all tests
28
+ [e.g., "npm test -- --watch"] # Watch mode
29
+ [e.g., "npm test -- path/to/file.test.ts"] # Single file
30
+ [e.g., "npm run test:coverage"] # Coverage report
31
+ ```
32
+ </test-framework>
33
+
34
+ <test-file-organization>
35
+ ## Test File Organization
36
+
37
+ **Location:**
38
+ - [Pattern: e.g., "*.test.ts alongside source files"]
39
+ - [Alternative: e.g., "__tests__/ directory" or "separate tests/ tree"]
40
+
41
+ **Naming:**
42
+ - [Unit tests: e.g., "module-name.test.ts"]
43
+ - [Integration: e.g., "feature-name.integration.test.ts"]
44
+ - [E2E: e.g., "user-flow.e2e.test.ts"]
45
+
46
+ **Structure:**
47
+ ```
48
+ [Show actual directory pattern, e.g.:
49
+ src/
50
+ lib/
51
+ utils.ts
52
+ utils.test.ts
53
+ services/
54
+ user-service.ts
55
+ user-service.test.ts
56
+ ]
57
+ ```
58
+ </test-file-organization>
59
+
60
+ <test-structure>
61
+ ## Test Structure
62
+
63
+ **Suite Organization:**
64
+ ```typescript
65
+ [Show actual pattern used, e.g.:
66
+
67
+ describe('ModuleName', () => {
68
+ describe('functionName', () => {
69
+ it('should handle success case', () => {
70
+ // arrange
71
+ // act
72
+ // assert
73
+ });
74
+
75
+ it('should handle error case', () => {
76
+ // test code
77
+ });
78
+ });
79
+ });
80
+ ]
81
+ ```
82
+
83
+ **Patterns:**
84
+ - [Setup: e.g., "beforeEach for shared setup, avoid beforeAll"]
85
+ - [Teardown: e.g., "afterEach to clean up, restore mocks"]
86
+ - [Structure: e.g., "arrange/act/assert pattern required"]
87
+ </test-structure>
88
+
89
+ <mocking>
90
+ ## Mocking
91
+
92
+ **Framework:**
93
+ - [Tool: e.g., "Jest built-in mocking", "Vitest vi", "Sinon"]
94
+ - [Import mocking: e.g., "vi.mock() at top of file"]
95
+
96
+ **Patterns:**
97
+ ```typescript
98
+ [Show actual mocking pattern, e.g.:
99
+
100
+ // Mock external dependency
101
+ vi.mock('./external-service', () => ({
102
+ fetchData: vi.fn()
103
+ }));
104
+
105
+ // Mock in test
106
+ const mockFetch = vi.mocked(fetchData);
107
+ mockFetch.mockResolvedValue({ data: 'test' });
108
+ ]
109
+ ```
110
+
111
+ **What to Mock:**
112
+ - [e.g., "External APIs, file system, database"]
113
+ - [e.g., "Time/dates (use vi.useFakeTimers)"]
114
+ - [e.g., "Network calls (use mock fetch)"]
115
+
116
+ **What NOT to Mock:**
117
+ - [e.g., "Pure functions, utilities"]
118
+ - [e.g., "Internal business logic"]
119
+ </mocking>
120
+
121
+ <fixtures-and-factories>
122
+ ## Fixtures and Factories
123
+
124
+ **Test Data:**
125
+ ```typescript
126
+ [Show pattern for creating test data, e.g.:
127
+
128
+ // Factory pattern
129
+ function createTestUser(overrides?: Partial&lt;User&gt;): User {
130
+ return {
131
+ id: 'test-id',
132
+ name: 'Test User',
133
+ email: 'test@example.com',
134
+ ...overrides
135
+ };
136
+ }
137
+
138
+ // Fixture file
139
+ // tests/fixtures/users.ts
140
+ export const mockUsers = [/* ... */];
141
+ ]
142
+ ```
143
+
144
+ **Location:**
145
+ - [e.g., "tests/fixtures/ for shared fixtures"]
146
+ - [e.g., "factory functions in test file or tests/factories/"]
147
+ </fixtures-and-factories>
148
+
149
+ <coverage>
150
+ ## Coverage
151
+
152
+ **Requirements:**
153
+ - [Target: e.g., "80% line coverage", "no specific target"]
154
+ - [Enforcement: e.g., "CI blocks &lt;80%", "coverage for awareness only"]
155
+
156
+ **Configuration:**
157
+ - [Tool: e.g., "built-in coverage via --coverage flag"]
158
+ - [Exclusions: e.g., "exclude *.test.ts, config files"]
159
+
160
+ **View Coverage:**
161
+ ```bash
162
+ [e.g., "npm run test:coverage"]
163
+ [e.g., "open coverage/index.html"]
164
+ ```
165
+ </coverage>
166
+
167
+ <test-types>
168
+ ## Test Types
169
+
170
+ **Unit Tests:**
171
+ - [Scope: e.g., "test single function/class in isolation"]
172
+ - [Mocking: e.g., "mock all external dependencies"]
173
+ - [Speed: e.g., "must run in &lt;1s per test"]
174
+
175
+ **Integration Tests:**
176
+ - [Scope: e.g., "test multiple modules together"]
177
+ - [Mocking: e.g., "mock external services, use real internal modules"]
178
+ - [Setup: e.g., "use test database, seed data"]
179
+
180
+ **E2E Tests:**
181
+ - [Framework: e.g., "Playwright for E2E"]
182
+ - [Scope: e.g., "test full user flows"]
183
+ - [Location: e.g., "e2e/ directory separate from unit tests"]
184
+ </test-types>
185
+
186
+ <common-patterns>
187
+ ## Common Patterns
188
+
189
+ **Async Testing:**
190
+ ```typescript
191
+ [Show pattern, e.g.:
192
+
193
+ it('should handle async operation', async () => {
194
+ const result = await asyncFunction();
195
+ expect(result).toBe('expected');
196
+ });
197
+ ]
198
+ ```
199
+
200
+ **Error Testing:**
201
+ ```typescript
202
+ [Show pattern, e.g.:
203
+
204
+ it('should throw on invalid input', () => {
205
+ expect(() => functionCall()).toThrow('error message');
206
+ });
207
+
208
+ // Async error
209
+ it('should reject on failure', async () => {
210
+ await expect(asyncCall()).rejects.toThrow('error message');
211
+ });
212
+ ]
213
+ ```
214
+
215
+ **Snapshot Testing:**
216
+ - [Usage: e.g., "for React components only" or "not used"]
217
+ - [Location: e.g., "__snapshots__/ directory"]
218
+ </common-patterns>
219
+ </template>
220
+
221
+ <guidelines>
222
+
223
+ **What belongs in testing-framework.md:**
224
+ - Test framework and runner configuration
225
+ - Test file location and naming patterns
226
+ - Test structure (describe/it, beforeEach patterns)
227
+ - Mocking approach and examples
228
+ - Fixture/factory patterns
229
+ - Coverage requirements
230
+ - How to run tests (commands)
231
+ - Common testing patterns in actual code
232
+
233
+ **What does NOT belong here:**
234
+ - Specific test cases (defer to actual test files)
235
+ - Technology choices (that's system-architecture.md)
236
+ - CI/CD setup (that's deployment docs)
237
+
238
+ **When filling this template:**
239
+ - Check package.json scripts for test commands
240
+ - Find test config file (jest.config.js, vitest.config.ts)
241
+ - Read 3-5 existing test files to identify patterns
242
+ - Look for test utilities in tests/ or test-utils/
243
+ - Check for coverage configuration
244
+ - Document actual patterns used, not ideal patterns
245
+
246
+ **Useful for story planning when:**
247
+ - Adding new features (write matching tests)
248
+ - Refactoring (maintain test patterns)
249
+ - Fixing bugs (add regression tests)
250
+ - Understanding verification approach
251
+ - Setting up test infrastructure
252
+
253
+ **Analysis approach:**
254
+ - Check package.json for test framework and scripts
255
+ - Read test config file for coverage, setup
256
+ - Examine test file organization (collocated vs separate)
257
+ - Review 5 test files for patterns (mocking, structure, assertions)
258
+ - Look for test utilities, fixtures, factories
259
+ - Note any test types (unit, integration, e2e)
260
+ - Document commands for running tests
261
+
262
+ </guidelines>
263
+
264
+ <evolution>
265
+
266
+ Update when testing patterns or framework changes.
267
+
268
+ **Update triggers:**
269
+ - Test framework or runner changed (e.g., Jest to Vitest)
270
+ - Mocking approach changed
271
+ - New test type introduced (e.g., adding E2E tests)
272
+ - Coverage requirements changed
273
+ - Test file organization restructured
274
+ - New test utilities or factories added
275
+
276
+ **NOT an update trigger:**
277
+ - New test files added following existing patterns
278
+ - Individual test case additions
279
+ - Bug fixes in test code
280
+
281
+ </evolution>
282
+
283
+ </testing-framework>