safeword 0.2.3 → 0.2.4

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