safeword 0.2.4 → 0.2.5

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 (235) hide show
  1. package/dist/check-3NGQ4NR5.js +129 -0
  2. package/dist/check-3NGQ4NR5.js.map +1 -0
  3. package/dist/chunk-2XWIUEQK.js +190 -0
  4. package/dist/chunk-2XWIUEQK.js.map +1 -0
  5. package/dist/chunk-GZRQL3SX.js +146 -0
  6. package/dist/chunk-GZRQL3SX.js.map +1 -0
  7. package/dist/chunk-ORQHKDT2.js +10 -0
  8. package/dist/chunk-ORQHKDT2.js.map +1 -0
  9. package/dist/chunk-W66Z3C5H.js +21 -0
  10. package/dist/chunk-W66Z3C5H.js.map +1 -0
  11. package/dist/cli.d.ts +1 -0
  12. package/dist/cli.js +34 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/diff-Y6QTAW4O.js +166 -0
  15. package/dist/diff-Y6QTAW4O.js.map +1 -0
  16. package/dist/index.d.ts +11 -0
  17. package/dist/index.js +7 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/reset-3ACTIYYE.js +143 -0
  20. package/dist/reset-3ACTIYYE.js.map +1 -0
  21. package/dist/setup-RR4M334C.js +266 -0
  22. package/dist/setup-RR4M334C.js.map +1 -0
  23. package/dist/upgrade-6AR3DHUV.js +134 -0
  24. package/dist/upgrade-6AR3DHUV.js.map +1 -0
  25. package/package.json +44 -19
  26. package/{.safeword → templates}/hooks/agents-md-check.sh +0 -0
  27. package/{.safeword → templates}/hooks/post-tool.sh +0 -0
  28. package/{.safeword → templates}/hooks/pre-commit.sh +0 -0
  29. package/.claude/commands/arch-review.md +0 -32
  30. package/.claude/commands/lint.md +0 -6
  31. package/.claude/commands/quality-review.md +0 -13
  32. package/.claude/commands/setup-linting.md +0 -6
  33. package/.claude/hooks/auto-lint.sh +0 -6
  34. package/.claude/hooks/auto-quality-review.sh +0 -170
  35. package/.claude/hooks/check-linting-sync.sh +0 -17
  36. package/.claude/hooks/inject-timestamp.sh +0 -6
  37. package/.claude/hooks/question-protocol.sh +0 -12
  38. package/.claude/hooks/run-linters.sh +0 -8
  39. package/.claude/hooks/run-quality-review.sh +0 -76
  40. package/.claude/hooks/version-check.sh +0 -10
  41. package/.claude/mcp/README.md +0 -96
  42. package/.claude/mcp/arcade.sample.json +0 -9
  43. package/.claude/mcp/context7.sample.json +0 -7
  44. package/.claude/mcp/playwright.sample.json +0 -7
  45. package/.claude/settings.json +0 -62
  46. package/.claude/skills/quality-reviewer/SKILL.md +0 -190
  47. package/.claude/skills/safeword-quality-reviewer/SKILL.md +0 -13
  48. package/.env.arcade.example +0 -4
  49. package/.env.example +0 -11
  50. package/.gitmodules +0 -4
  51. package/.safeword/SAFEWORD.md +0 -33
  52. package/.safeword/eslint/eslint-base.mjs +0 -101
  53. package/.safeword/guides/architecture-guide.md +0 -404
  54. package/.safeword/guides/code-philosophy.md +0 -174
  55. package/.safeword/guides/context-files-guide.md +0 -405
  56. package/.safeword/guides/data-architecture-guide.md +0 -183
  57. package/.safeword/guides/design-doc-guide.md +0 -165
  58. package/.safeword/guides/learning-extraction.md +0 -515
  59. package/.safeword/guides/llm-instruction-design.md +0 -239
  60. package/.safeword/guides/llm-prompting.md +0 -95
  61. package/.safeword/guides/tdd-best-practices.md +0 -570
  62. package/.safeword/guides/test-definitions-guide.md +0 -243
  63. package/.safeword/guides/testing-methodology.md +0 -573
  64. package/.safeword/guides/user-story-guide.md +0 -237
  65. package/.safeword/guides/zombie-process-cleanup.md +0 -214
  66. package/.safeword/planning/002-user-story-quality-evaluation.md +0 -1840
  67. package/.safeword/planning/003-langsmith-eval-setup-prompt.md +0 -363
  68. package/.safeword/planning/004-llm-eval-test-cases.md +0 -3226
  69. package/.safeword/planning/005-architecture-enforcement-system.md +0 -169
  70. package/.safeword/planning/006-reactive-fix-prevention-research.md +0 -135
  71. package/.safeword/planning/011-cli-ux-vision.md +0 -330
  72. package/.safeword/planning/012-project-structure-cleanup.md +0 -154
  73. package/.safeword/planning/README.md +0 -39
  74. package/.safeword/planning/automation-plan-v2.md +0 -1225
  75. package/.safeword/planning/automation-plan-v3.md +0 -1291
  76. package/.safeword/planning/automation-plan.md +0 -3058
  77. package/.safeword/planning/design/005-cli-implementation.md +0 -343
  78. package/.safeword/planning/design/013-cli-self-contained-templates.md +0 -596
  79. package/.safeword/planning/design/013a-eslint-plugin-suite.md +0 -256
  80. package/.safeword/planning/design/013b-implementation-snippets.md +0 -385
  81. package/.safeword/planning/design/013c-config-isolation-strategy.md +0 -242
  82. package/.safeword/planning/design/code-philosophy-improvements.md +0 -60
  83. package/.safeword/planning/mcp-analysis.md +0 -545
  84. package/.safeword/planning/phase2-subagents-vs-skills-analysis.md +0 -451
  85. package/.safeword/planning/settings-improvements.md +0 -970
  86. package/.safeword/planning/test-definitions/005-cli-implementation.md +0 -1301
  87. package/.safeword/planning/test-definitions/cli-self-contained-templates.md +0 -205
  88. package/.safeword/planning/user-stories/001-guides-review-user-stories.md +0 -1381
  89. package/.safeword/planning/user-stories/003-reactive-fix-prevention.md +0 -132
  90. package/.safeword/planning/user-stories/004-technical-constraints.md +0 -86
  91. package/.safeword/planning/user-stories/005-cli-implementation.md +0 -311
  92. package/.safeword/planning/user-stories/cli-self-contained-templates.md +0 -172
  93. package/.safeword/planning/versioned-distribution.md +0 -740
  94. package/.safeword/prompts/arch-review.md +0 -43
  95. package/.safeword/prompts/quality-review.md +0 -11
  96. package/.safeword/scripts/arch-review.sh +0 -235
  97. package/.safeword/scripts/check-linting-sync.sh +0 -58
  98. package/.safeword/scripts/setup-linting.sh +0 -559
  99. package/.safeword/templates/architecture-template.md +0 -136
  100. package/.safeword/templates/ci/architecture-check.yml +0 -79
  101. package/.safeword/templates/design-doc-template.md +0 -127
  102. package/.safeword/templates/test-definitions-feature.md +0 -100
  103. package/.safeword/templates/ticket-template.md +0 -74
  104. package/.safeword/templates/user-stories-template.md +0 -82
  105. package/.safeword/tickets/001-guides-review-user-stories.md +0 -83
  106. package/.safeword/tickets/002-architecture-enforcement.md +0 -211
  107. package/.safeword/tickets/003-reactive-fix-prevention.md +0 -57
  108. package/.safeword/tickets/004-technical-constraints-in-user-stories.md +0 -39
  109. package/.safeword/tickets/005-cli-implementation.md +0 -248
  110. package/.safeword/tickets/006-flesh-out-skills.md +0 -43
  111. package/.safeword/tickets/007-flesh-out-questioning.md +0 -44
  112. package/.safeword/tickets/008-upgrade-questioning.md +0 -58
  113. package/.safeword/tickets/009-naming-conventions.md +0 -41
  114. package/.safeword/tickets/010-safeword-md-cleanup.md +0 -34
  115. package/.safeword/tickets/011-cursor-setup.md +0 -86
  116. package/.safeword/tickets/README.md +0 -73
  117. package/.safeword/version +0 -1
  118. package/AGENTS.md +0 -59
  119. package/CLAUDE.md +0 -12
  120. package/README.md +0 -347
  121. package/docs/001-cli-implementation-plan.md +0 -856
  122. package/docs/elite-dx-implementation-plan.md +0 -1034
  123. package/framework/README.md +0 -131
  124. package/framework/mcp/README.md +0 -96
  125. package/framework/mcp/arcade.sample.json +0 -8
  126. package/framework/mcp/context7.sample.json +0 -6
  127. package/framework/mcp/playwright.sample.json +0 -6
  128. package/framework/scripts/arch-review.sh +0 -235
  129. package/framework/scripts/check-linting-sync.sh +0 -58
  130. package/framework/scripts/load-env.sh +0 -49
  131. package/framework/scripts/setup-claude.sh +0 -223
  132. package/framework/scripts/setup-linting.sh +0 -559
  133. package/framework/scripts/setup-quality.sh +0 -477
  134. package/framework/scripts/setup-safeword.sh +0 -550
  135. package/framework/templates/ci/architecture-check.yml +0 -78
  136. package/learnings/ai-sdk-v5-breaking-changes.md +0 -178
  137. package/learnings/e2e-test-zombie-processes.md +0 -231
  138. package/learnings/milkdown-crepe-editor-property.md +0 -96
  139. package/learnings/prosemirror-fragment-traversal.md +0 -119
  140. package/packages/cli/AGENTS.md +0 -1
  141. package/packages/cli/ARCHITECTURE.md +0 -279
  142. package/packages/cli/package.json +0 -51
  143. package/packages/cli/src/cli.ts +0 -63
  144. package/packages/cli/src/commands/check.ts +0 -166
  145. package/packages/cli/src/commands/diff.ts +0 -209
  146. package/packages/cli/src/commands/reset.ts +0 -190
  147. package/packages/cli/src/commands/setup.ts +0 -325
  148. package/packages/cli/src/commands/upgrade.ts +0 -163
  149. package/packages/cli/src/index.ts +0 -3
  150. package/packages/cli/src/templates/config.ts +0 -58
  151. package/packages/cli/src/templates/content.ts +0 -18
  152. package/packages/cli/src/templates/index.ts +0 -12
  153. package/packages/cli/src/utils/agents-md.ts +0 -66
  154. package/packages/cli/src/utils/fs.ts +0 -179
  155. package/packages/cli/src/utils/git.ts +0 -124
  156. package/packages/cli/src/utils/hooks.ts +0 -29
  157. package/packages/cli/src/utils/output.ts +0 -60
  158. package/packages/cli/src/utils/project-detector.test.ts +0 -185
  159. package/packages/cli/src/utils/project-detector.ts +0 -44
  160. package/packages/cli/src/utils/version.ts +0 -28
  161. package/packages/cli/src/version.ts +0 -6
  162. package/packages/cli/templates/SAFEWORD.md +0 -776
  163. package/packages/cli/templates/doc-templates/architecture-template.md +0 -136
  164. package/packages/cli/templates/doc-templates/design-doc-template.md +0 -134
  165. package/packages/cli/templates/doc-templates/test-definitions-feature.md +0 -131
  166. package/packages/cli/templates/doc-templates/ticket-template.md +0 -82
  167. package/packages/cli/templates/doc-templates/user-stories-template.md +0 -92
  168. package/packages/cli/templates/guides/architecture-guide.md +0 -423
  169. package/packages/cli/templates/guides/code-philosophy.md +0 -195
  170. package/packages/cli/templates/guides/context-files-guide.md +0 -457
  171. package/packages/cli/templates/guides/data-architecture-guide.md +0 -200
  172. package/packages/cli/templates/guides/design-doc-guide.md +0 -171
  173. package/packages/cli/templates/guides/learning-extraction.md +0 -552
  174. package/packages/cli/templates/guides/llm-instruction-design.md +0 -248
  175. package/packages/cli/templates/guides/llm-prompting.md +0 -102
  176. package/packages/cli/templates/guides/tdd-best-practices.md +0 -615
  177. package/packages/cli/templates/guides/test-definitions-guide.md +0 -334
  178. package/packages/cli/templates/guides/testing-methodology.md +0 -618
  179. package/packages/cli/templates/guides/user-story-guide.md +0 -256
  180. package/packages/cli/templates/guides/zombie-process-cleanup.md +0 -219
  181. package/packages/cli/templates/hooks/agents-md-check.sh +0 -27
  182. package/packages/cli/templates/hooks/post-tool.sh +0 -4
  183. package/packages/cli/templates/hooks/pre-commit.sh +0 -10
  184. package/packages/cli/templates/prompts/arch-review.md +0 -43
  185. package/packages/cli/templates/prompts/quality-review.md +0 -10
  186. package/packages/cli/templates/skills/safeword-quality-reviewer/SKILL.md +0 -207
  187. package/packages/cli/tests/commands/check.test.ts +0 -129
  188. package/packages/cli/tests/commands/cli.test.ts +0 -89
  189. package/packages/cli/tests/commands/diff.test.ts +0 -115
  190. package/packages/cli/tests/commands/reset.test.ts +0 -310
  191. package/packages/cli/tests/commands/self-healing.test.ts +0 -170
  192. package/packages/cli/tests/commands/setup-blocking.test.ts +0 -71
  193. package/packages/cli/tests/commands/setup-core.test.ts +0 -135
  194. package/packages/cli/tests/commands/setup-git.test.ts +0 -139
  195. package/packages/cli/tests/commands/setup-hooks.test.ts +0 -334
  196. package/packages/cli/tests/commands/setup-linting.test.ts +0 -189
  197. package/packages/cli/tests/commands/setup-noninteractive.test.ts +0 -80
  198. package/packages/cli/tests/commands/setup-templates.test.ts +0 -181
  199. package/packages/cli/tests/commands/upgrade.test.ts +0 -215
  200. package/packages/cli/tests/helpers.ts +0 -243
  201. package/packages/cli/tests/npm-package.test.ts +0 -83
  202. package/packages/cli/tests/technical-constraints.test.ts +0 -96
  203. package/packages/cli/tsconfig.json +0 -25
  204. package/packages/cli/tsup.config.ts +0 -11
  205. package/packages/cli/vitest.config.ts +0 -23
  206. package/promptfoo.yaml +0 -3270
  207. /package/{framework → templates}/SAFEWORD.md +0 -0
  208. /package/{packages/cli/templates → templates}/commands/arch-review.md +0 -0
  209. /package/{packages/cli/templates → templates}/commands/lint.md +0 -0
  210. /package/{packages/cli/templates → templates}/commands/quality-review.md +0 -0
  211. /package/{framework/templates → templates/doc-templates}/architecture-template.md +0 -0
  212. /package/{framework/templates → templates/doc-templates}/design-doc-template.md +0 -0
  213. /package/{framework/templates → templates/doc-templates}/test-definitions-feature.md +0 -0
  214. /package/{framework/templates → templates/doc-templates}/ticket-template.md +0 -0
  215. /package/{framework/templates → templates/doc-templates}/user-stories-template.md +0 -0
  216. /package/{framework → templates}/guides/architecture-guide.md +0 -0
  217. /package/{framework → templates}/guides/code-philosophy.md +0 -0
  218. /package/{framework → templates}/guides/context-files-guide.md +0 -0
  219. /package/{framework → templates}/guides/data-architecture-guide.md +0 -0
  220. /package/{framework → templates}/guides/design-doc-guide.md +0 -0
  221. /package/{framework → templates}/guides/learning-extraction.md +0 -0
  222. /package/{framework → templates}/guides/llm-instruction-design.md +0 -0
  223. /package/{framework → templates}/guides/llm-prompting.md +0 -0
  224. /package/{framework → templates}/guides/tdd-best-practices.md +0 -0
  225. /package/{framework → templates}/guides/test-definitions-guide.md +0 -0
  226. /package/{framework → templates}/guides/testing-methodology.md +0 -0
  227. /package/{framework → templates}/guides/user-story-guide.md +0 -0
  228. /package/{framework → templates}/guides/zombie-process-cleanup.md +0 -0
  229. /package/{packages/cli/templates → templates}/hooks/inject-timestamp.sh +0 -0
  230. /package/{packages/cli/templates → templates}/lib/common.sh +0 -0
  231. /package/{packages/cli/templates → templates}/lib/jq-fallback.sh +0 -0
  232. /package/{packages/cli/templates → templates}/markdownlint.jsonc +0 -0
  233. /package/{framework → templates}/prompts/arch-review.md +0 -0
  234. /package/{framework → templates}/prompts/quality-review.md +0 -0
  235. /package/{framework/skills/quality-reviewer → templates/skills/safeword-quality-reviewer}/SKILL.md +0 -0
@@ -1,334 +0,0 @@
1
- # Test Definitions Guide for Claude Code
2
-
3
- ## How to Fill Out Feature Test Definitions
4
-
5
- **Template:** `@.safeword/templates/test-definitions-feature.md`
6
-
7
- **When user asks:** "Create test definitions for issue #N" or "Create test definitions for [feature]"
8
-
9
- **What you do:**
10
-
11
- 1. Read `@.safeword/templates/test-definitions-feature.md`
12
- 2. Read user story's Technical Constraints section (if exists)
13
- 3. Fill in feature name, issue number, test file path
14
- 4. Organize tests into logical suites (e.g., "Layout Structure", "User Interactions", "Technical Constraints")
15
- 5. Create numbered tests (Test 1.1, Test 1.2, etc.)
16
- 6. Add status for each test (✅/⏭️/❌/🔴)
17
- 7. Include detailed steps and expected outcomes
18
- 8. Add summary with coverage breakdown
19
- 9. Save to project location (e.g., `planning/test-definitions/45-feature-name-test-definitions.md`)
20
-
21
- **DO include:**
22
-
23
- - Status tracking per test (✅ Passing / ⏭️ Skipped / ❌ Not Implemented / 🔴 Failing)
24
- - Detailed steps (numbered list)
25
- - Expected outcomes (bullet points)
26
- - Coverage summary with percentages
27
- - Skipped tests rationale
28
- - Test execution commands
29
-
30
- ---
31
-
32
- ## Test Status Indicators
33
-
34
- Use these consistently:
35
-
36
- - **✅ Passing** - Test is implemented and passing
37
- - **⏭️ Skipped** - Test is intentionally skipped (add rationale in summary)
38
- - **❌ Not Implemented** - Test is defined but not yet written
39
- - **🔴 Failing** - Test exists but is currently failing
40
-
41
- ---
42
-
43
- ## Test Naming Conventions
44
-
45
- **✅ GOOD - Descriptive and specific:**
46
-
47
- - "Render all three panes"
48
- - "Cmd+J toggles AI pane visibility"
49
- - "State persistence across sessions"
50
- - "Button appearance reflects pane state"
51
-
52
- **❌ BAD - Vague or technical:**
53
-
54
- - "Test 1" (no description)
55
- - "Check state" (too vague)
56
- - "Verify useUIStore hook" (implementation detail)
57
-
58
- ---
59
-
60
- ## Writing Test Steps
61
-
62
- **✅ GOOD - Clear, actionable steps:**
63
-
64
- ```
65
- **Steps**:
66
- 1. Toggle AI pane visible
67
- 2. Get bounding box for AI pane
68
- 3. Get bounding box for Editor pane
69
- 4. Compare X coordinates
70
- ```
71
-
72
- **❌ BAD - Vague or incomplete:**
73
-
74
- ```
75
- **Steps**:
76
- 1. Check panes
77
- 2. Verify order
78
- ```
79
-
80
- ---
81
-
82
- ## Writing Expected Outcomes
83
-
84
- **✅ GOOD - Specific, testable assertions:**
85
-
86
- ```
87
- **Expected**:
88
- - AI pane X coordinate < Editor pane X coordinate
89
- - Explorer pane X coordinate > Editor pane X coordinate
90
- - All coordinates are positive numbers
91
- ```
92
-
93
- **❌ BAD - Vague expectations:**
94
-
95
- ```
96
- **Expected**:
97
- - Panes are in correct order
98
- - Everything works
99
- ```
100
-
101
- ---
102
-
103
- ## Organizing Test Suites
104
-
105
- **Group related tests into suites:**
106
-
107
- - **Layout/Structure** - DOM structure, element presence, positioning
108
- - **User Interactions** - Clicks, keyboard shortcuts, drag/drop
109
- - **State Management** - State changes, persistence, reactivity
110
- - **Accessibility** - ARIA labels, keyboard navigation, focus management
111
- - **Edge Cases** - Error handling, boundary conditions, race conditions
112
- - **Technical Constraints** - Non-functional requirements from user story (see below)
113
-
114
- **Each suite should have:**
115
-
116
- - Clear name describing what it tests
117
- - Brief description (1-2 sentences)
118
- - Related tests grouped logically
119
-
120
- ---
121
-
122
- ## Coverage Summary Best Practices
123
-
124
- **Always include:**
125
-
126
- - Total test count
127
- - Breakdown by status (passing, skipped, not implemented, failing)
128
- - Percentages for each category
129
- - Coverage by feature table
130
- - Rationale for skipped tests
131
-
132
- **Example:**
133
-
134
- ```
135
- **Total**: 20 tests
136
- **Passing**: 9 tests (45%)
137
- **Skipped**: 4 tests (20%)
138
- **Not Implemented**: 7 tests (35%)
139
- **Failing**: 0 tests
140
- ```
141
-
142
- ---
143
-
144
- ## Skipped Tests Rationale
145
-
146
- **Always explain why tests are skipped:**
147
-
148
- **✅ GOOD - Clear reasoning:**
149
-
150
- - "Conflicts with Phase 2 design decision (AI pane hidden by default)"
151
- - "Requires complex drag simulation, tested manually"
152
- - "Blocked by upstream dependency (Issue #42)"
153
-
154
- **❌ BAD - No explanation:**
155
-
156
- - "Skipped"
157
- - "Not needed"
158
- - "TODO"
159
-
160
- ---
161
-
162
- ## Test Execution Section
163
-
164
- **Include practical commands:**
165
-
166
- ```bash
167
- # Run all tests for this feature
168
- npm run test:e2e -- tests/feature-name.spec.ts
169
-
170
- # Run specific test
171
- npm run test:e2e -- tests/feature-name.spec.ts --grep "specific test name"
172
- ```
173
-
174
- ---
175
-
176
- ## TDD Workflow Integration
177
-
178
- **Test definitions should be created:**
179
-
180
- 1. **Before implementation** (TDD: write tests first)
181
- 2. **During planning** (alongside user stories)
182
- 3. **After user stories** (tests verify acceptance criteria)
183
-
184
- **Update test definitions:**
185
-
186
- - Mark tests ✅ as they pass
187
- - Add ⏭️ with rationale if skipping
188
- - Mark 🔴 if tests fail
189
- - Update "Last Updated" date
190
-
191
- ---
192
-
193
- ## Relationship to User Stories
194
-
195
- **Test definitions should:**
196
-
197
- - Map directly to user story acceptance criteria
198
- - Cover all acceptance criteria from user stories
199
- - Include additional edge cases and error scenarios
200
- - Reference test file locations mentioned in user stories
201
- - **Include tests for Technical Constraints** (non-functional requirements)
202
-
203
- **Example:**
204
-
205
- - User Story AC: "AI pane is visible when toggled"
206
- - Test: "Test 3.1: Cmd+J toggles AI pane visibility ✅"
207
-
208
- ---
209
-
210
- ## Testing Technical Constraints
211
-
212
- **Purpose:** User stories include a Technical Constraints section with non-functional requirements. These constraints MUST have corresponding tests.
213
-
214
- **See:** `@.safeword/guides/user-story-guide.md` for constraint categories and examples.
215
-
216
- ### Constraint Categories → Test Types
217
-
218
- | Constraint Category | Test Type | What to Verify |
219
- | ------------------- | -------------------------- | --------------------------------------------------- |
220
- | Performance | Load/timing tests | Response times, throughput, capacity limits |
221
- | Security | Security tests | Input sanitization, auth checks, rate limiting |
222
- | Compatibility | Cross-browser/device tests | Browser versions, mobile, accessibility |
223
- | Data | Compliance tests | Retention, deletion, privacy rules |
224
- | Dependencies | Integration tests | Required services work, no forbidden packages |
225
- | Infrastructure | Resource tests | Memory limits, offline behavior, deploy constraints |
226
-
227
- ### Writing Constraint Tests
228
-
229
- **✅ GOOD - Specific, measurable:**
230
-
231
- ```markdown
232
- ### Test 7.1: API response under load ✅
233
-
234
- **Status**: ✅ Passing
235
- **Category**: Performance
236
- **Constraint**: API response < 200ms at P95
237
-
238
- **Steps**:
239
-
240
- 1. Spawn 100 concurrent requests to /api/data
241
- 2. Measure response times for all requests
242
- 3. Calculate P95 latency
243
-
244
- **Expected**:
245
-
246
- - P95 response time < 200ms
247
- - No requests timeout
248
- - No 5xx errors under load
249
- ```
250
-
251
- **❌ BAD - Vague, untestable:**
252
-
253
- ```markdown
254
- ### Test 7.1: Performance test
255
-
256
- **Steps**: Check if fast
257
- **Expected**: Good performance
258
- ```
259
-
260
- ### When to Skip Constraint Tests
261
-
262
- **Document skipped constraint tests with rationale:**
263
-
264
- - "Performance: Tested in CI pipeline, not in unit tests"
265
- - "Compatibility: Manual testing on BrowserStack, see QA checklist"
266
- - "Security: Covered by automated SAST scan (Snyk)"
267
-
268
- **Never skip without explanation.**
269
-
270
- ---
271
-
272
- ## Example: Good Test Definition
273
-
274
- ```markdown
275
- ### Test 3.1: Cmd+J toggles AI pane visibility ✅
276
-
277
- **Status**: ✅ Passing
278
- **Description**: Verifies Cmd+J keyboard shortcut toggles AI pane
279
-
280
- **Steps**:
281
-
282
- 1. Verify AI pane hidden initially (default state)
283
- 2. Press Cmd+J (Mac) or Ctrl+J (Windows/Linux)
284
- 3. Verify AI pane becomes visible
285
- 4. Press Cmd+J again
286
- 5. Verify AI pane becomes hidden
287
-
288
- **Expected**:
289
-
290
- - AI pane starts hidden
291
- - After first toggle: AI pane visible
292
- - After second toggle: AI pane hidden
293
- - Toggle action triggers state change in uiStore
294
- ```
295
-
296
- ---
297
-
298
- ## Common Mistakes to Avoid
299
-
300
- ❌ **Don't test implementation details:**
301
-
302
- - Bad: "Verify useState hook updates"
303
- - Good: "Verify pane becomes visible when toggled"
304
-
305
- ❌ **Don't write vague steps:**
306
-
307
- - Bad: "Check if it works"
308
- - Good: "Click button and verify modal appears"
309
-
310
- ❌ **Don't skip rationale for skipped tests:**
311
-
312
- - Always explain WHY a test is skipped
313
-
314
- ❌ **Don't forget coverage summary:**
315
-
316
- - Always include totals and percentages
317
-
318
- ❌ **Don't duplicate test descriptions:**
319
-
320
- - Each test should have a unique, descriptive name
321
-
322
- ---
323
-
324
- ## LLM Instruction Design
325
-
326
- **Important:** Test definitions are instructions that LLMs read and follow. Apply best practices for clarity.
327
-
328
- **See:** `@.safeword/guides/llm-instruction-design.md` for comprehensive framework including:
329
-
330
- - MECE decision trees (mutually exclusive, collectively exhaustive)
331
- - Explicit definitions (never assume LLMs know what you mean)
332
- - Concrete examples over abstract rules
333
- - Edge cases must be explicit
334
- - Actionable over vague language