safeword 0.2.2 → 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.
- package/.claude/commands/arch-review.md +32 -0
- package/.claude/commands/lint.md +6 -0
- package/.claude/commands/quality-review.md +13 -0
- package/.claude/commands/setup-linting.md +6 -0
- package/.claude/hooks/auto-lint.sh +6 -0
- package/.claude/hooks/auto-quality-review.sh +170 -0
- package/.claude/hooks/check-linting-sync.sh +17 -0
- package/.claude/hooks/inject-timestamp.sh +6 -0
- package/.claude/hooks/question-protocol.sh +12 -0
- package/.claude/hooks/run-linters.sh +8 -0
- package/.claude/hooks/run-quality-review.sh +76 -0
- package/.claude/hooks/version-check.sh +10 -0
- package/.claude/mcp/README.md +96 -0
- package/.claude/mcp/arcade.sample.json +9 -0
- package/.claude/mcp/context7.sample.json +7 -0
- package/.claude/mcp/playwright.sample.json +7 -0
- package/.claude/settings.json +62 -0
- package/.claude/skills/quality-reviewer/SKILL.md +190 -0
- package/.claude/skills/safeword-quality-reviewer/SKILL.md +13 -0
- package/.env.arcade.example +4 -0
- package/.env.example +11 -0
- package/.gitmodules +4 -0
- package/.safeword/SAFEWORD.md +33 -0
- package/.safeword/eslint/eslint-base.mjs +101 -0
- package/.safeword/guides/architecture-guide.md +404 -0
- package/.safeword/guides/code-philosophy.md +174 -0
- package/.safeword/guides/context-files-guide.md +405 -0
- package/.safeword/guides/data-architecture-guide.md +183 -0
- package/.safeword/guides/design-doc-guide.md +165 -0
- package/.safeword/guides/learning-extraction.md +515 -0
- package/.safeword/guides/llm-instruction-design.md +239 -0
- package/.safeword/guides/llm-prompting.md +95 -0
- package/.safeword/guides/tdd-best-practices.md +570 -0
- package/.safeword/guides/test-definitions-guide.md +243 -0
- package/.safeword/guides/testing-methodology.md +573 -0
- package/.safeword/guides/user-story-guide.md +237 -0
- package/.safeword/guides/zombie-process-cleanup.md +214 -0
- package/{templates → .safeword}/hooks/agents-md-check.sh +0 -0
- package/{templates → .safeword}/hooks/post-tool.sh +0 -0
- package/{templates → .safeword}/hooks/pre-commit.sh +0 -0
- package/.safeword/planning/002-user-story-quality-evaluation.md +1840 -0
- package/.safeword/planning/003-langsmith-eval-setup-prompt.md +363 -0
- package/.safeword/planning/004-llm-eval-test-cases.md +3226 -0
- package/.safeword/planning/005-architecture-enforcement-system.md +169 -0
- package/.safeword/planning/006-reactive-fix-prevention-research.md +135 -0
- package/.safeword/planning/011-cli-ux-vision.md +330 -0
- package/.safeword/planning/012-project-structure-cleanup.md +154 -0
- package/.safeword/planning/README.md +39 -0
- package/.safeword/planning/automation-plan-v2.md +1225 -0
- package/.safeword/planning/automation-plan-v3.md +1291 -0
- package/.safeword/planning/automation-plan.md +3058 -0
- package/.safeword/planning/design/005-cli-implementation.md +343 -0
- package/.safeword/planning/design/013-cli-self-contained-templates.md +596 -0
- package/.safeword/planning/design/013a-eslint-plugin-suite.md +256 -0
- package/.safeword/planning/design/013b-implementation-snippets.md +385 -0
- package/.safeword/planning/design/013c-config-isolation-strategy.md +242 -0
- package/.safeword/planning/design/code-philosophy-improvements.md +60 -0
- package/.safeword/planning/mcp-analysis.md +545 -0
- package/.safeword/planning/phase2-subagents-vs-skills-analysis.md +451 -0
- package/.safeword/planning/settings-improvements.md +970 -0
- package/.safeword/planning/test-definitions/005-cli-implementation.md +1301 -0
- package/.safeword/planning/test-definitions/cli-self-contained-templates.md +205 -0
- package/.safeword/planning/user-stories/001-guides-review-user-stories.md +1381 -0
- package/.safeword/planning/user-stories/003-reactive-fix-prevention.md +132 -0
- package/.safeword/planning/user-stories/004-technical-constraints.md +86 -0
- package/.safeword/planning/user-stories/005-cli-implementation.md +311 -0
- package/.safeword/planning/user-stories/cli-self-contained-templates.md +172 -0
- package/.safeword/planning/versioned-distribution.md +740 -0
- package/.safeword/prompts/arch-review.md +43 -0
- package/.safeword/prompts/quality-review.md +11 -0
- package/.safeword/scripts/arch-review.sh +235 -0
- package/.safeword/scripts/check-linting-sync.sh +58 -0
- package/.safeword/scripts/setup-linting.sh +559 -0
- package/.safeword/templates/architecture-template.md +136 -0
- package/.safeword/templates/ci/architecture-check.yml +79 -0
- package/.safeword/templates/design-doc-template.md +127 -0
- package/.safeword/templates/test-definitions-feature.md +100 -0
- package/.safeword/templates/ticket-template.md +74 -0
- package/.safeword/templates/user-stories-template.md +82 -0
- package/.safeword/tickets/001-guides-review-user-stories.md +83 -0
- package/.safeword/tickets/002-architecture-enforcement.md +211 -0
- package/.safeword/tickets/003-reactive-fix-prevention.md +57 -0
- package/.safeword/tickets/004-technical-constraints-in-user-stories.md +39 -0
- package/.safeword/tickets/005-cli-implementation.md +248 -0
- package/.safeword/tickets/006-flesh-out-skills.md +43 -0
- package/.safeword/tickets/007-flesh-out-questioning.md +44 -0
- package/.safeword/tickets/008-upgrade-questioning.md +58 -0
- package/.safeword/tickets/009-naming-conventions.md +41 -0
- package/.safeword/tickets/010-safeword-md-cleanup.md +34 -0
- package/.safeword/tickets/011-cursor-setup.md +86 -0
- package/.safeword/tickets/README.md +73 -0
- package/.safeword/version +1 -0
- package/AGENTS.md +59 -0
- package/CLAUDE.md +12 -0
- package/README.md +347 -0
- package/docs/001-cli-implementation-plan.md +856 -0
- package/docs/elite-dx-implementation-plan.md +1034 -0
- package/framework/README.md +131 -0
- package/framework/mcp/README.md +96 -0
- package/framework/mcp/arcade.sample.json +8 -0
- package/framework/mcp/context7.sample.json +6 -0
- package/framework/mcp/playwright.sample.json +6 -0
- package/framework/scripts/arch-review.sh +235 -0
- package/framework/scripts/check-linting-sync.sh +58 -0
- package/framework/scripts/load-env.sh +49 -0
- package/framework/scripts/setup-claude.sh +223 -0
- package/framework/scripts/setup-linting.sh +559 -0
- package/framework/scripts/setup-quality.sh +477 -0
- package/framework/scripts/setup-safeword.sh +550 -0
- package/framework/templates/ci/architecture-check.yml +78 -0
- package/learnings/ai-sdk-v5-breaking-changes.md +178 -0
- package/learnings/e2e-test-zombie-processes.md +231 -0
- package/learnings/milkdown-crepe-editor-property.md +96 -0
- package/learnings/prosemirror-fragment-traversal.md +119 -0
- package/package.json +19 -43
- package/packages/cli/AGENTS.md +1 -0
- package/packages/cli/ARCHITECTURE.md +279 -0
- package/packages/cli/package.json +51 -0
- package/packages/cli/src/cli.ts +63 -0
- package/packages/cli/src/commands/check.ts +166 -0
- package/packages/cli/src/commands/diff.ts +209 -0
- package/packages/cli/src/commands/reset.ts +190 -0
- package/packages/cli/src/commands/setup.ts +325 -0
- package/packages/cli/src/commands/upgrade.ts +163 -0
- package/packages/cli/src/index.ts +3 -0
- package/packages/cli/src/templates/config.ts +58 -0
- package/packages/cli/src/templates/content.ts +18 -0
- package/packages/cli/src/templates/index.ts +12 -0
- package/packages/cli/src/utils/agents-md.ts +66 -0
- package/packages/cli/src/utils/fs.ts +179 -0
- package/packages/cli/src/utils/git.ts +124 -0
- package/packages/cli/src/utils/hooks.ts +29 -0
- package/packages/cli/src/utils/output.ts +60 -0
- package/packages/cli/src/utils/project-detector.test.ts +185 -0
- package/packages/cli/src/utils/project-detector.ts +44 -0
- package/packages/cli/src/utils/version.ts +28 -0
- package/packages/cli/src/version.ts +6 -0
- package/packages/cli/templates/SAFEWORD.md +776 -0
- package/packages/cli/templates/doc-templates/architecture-template.md +136 -0
- package/packages/cli/templates/doc-templates/design-doc-template.md +134 -0
- package/packages/cli/templates/doc-templates/test-definitions-feature.md +131 -0
- package/packages/cli/templates/doc-templates/ticket-template.md +82 -0
- package/packages/cli/templates/doc-templates/user-stories-template.md +92 -0
- package/packages/cli/templates/guides/architecture-guide.md +423 -0
- package/packages/cli/templates/guides/code-philosophy.md +195 -0
- package/packages/cli/templates/guides/context-files-guide.md +457 -0
- package/packages/cli/templates/guides/data-architecture-guide.md +200 -0
- package/packages/cli/templates/guides/design-doc-guide.md +171 -0
- package/packages/cli/templates/guides/learning-extraction.md +552 -0
- package/packages/cli/templates/guides/llm-instruction-design.md +248 -0
- package/packages/cli/templates/guides/llm-prompting.md +102 -0
- package/packages/cli/templates/guides/tdd-best-practices.md +615 -0
- package/packages/cli/templates/guides/test-definitions-guide.md +334 -0
- package/packages/cli/templates/guides/testing-methodology.md +618 -0
- package/packages/cli/templates/guides/user-story-guide.md +256 -0
- package/packages/cli/templates/guides/zombie-process-cleanup.md +219 -0
- package/packages/cli/templates/hooks/agents-md-check.sh +27 -0
- package/packages/cli/templates/hooks/post-tool.sh +4 -0
- package/packages/cli/templates/hooks/pre-commit.sh +10 -0
- package/packages/cli/templates/prompts/arch-review.md +43 -0
- package/packages/cli/templates/prompts/quality-review.md +10 -0
- package/packages/cli/templates/skills/safeword-quality-reviewer/SKILL.md +207 -0
- package/packages/cli/tests/commands/check.test.ts +129 -0
- package/packages/cli/tests/commands/cli.test.ts +89 -0
- package/packages/cli/tests/commands/diff.test.ts +115 -0
- package/packages/cli/tests/commands/reset.test.ts +310 -0
- package/packages/cli/tests/commands/self-healing.test.ts +170 -0
- package/packages/cli/tests/commands/setup-blocking.test.ts +71 -0
- package/packages/cli/tests/commands/setup-core.test.ts +135 -0
- package/packages/cli/tests/commands/setup-git.test.ts +139 -0
- package/packages/cli/tests/commands/setup-hooks.test.ts +334 -0
- package/packages/cli/tests/commands/setup-linting.test.ts +189 -0
- package/packages/cli/tests/commands/setup-noninteractive.test.ts +80 -0
- package/packages/cli/tests/commands/setup-templates.test.ts +181 -0
- package/packages/cli/tests/commands/upgrade.test.ts +215 -0
- package/packages/cli/tests/helpers.ts +243 -0
- package/packages/cli/tests/npm-package.test.ts +83 -0
- package/packages/cli/tests/technical-constraints.test.ts +96 -0
- package/packages/cli/tsconfig.json +25 -0
- package/packages/cli/tsup.config.ts +11 -0
- package/packages/cli/vitest.config.ts +23 -0
- package/promptfoo.yaml +3270 -0
- package/dist/check-M73LGONJ.js +0 -129
- package/dist/check-M73LGONJ.js.map +0 -1
- package/dist/chunk-2XWIUEQK.js +0 -190
- package/dist/chunk-2XWIUEQK.js.map +0 -1
- package/dist/chunk-GZRQL3SX.js +0 -146
- package/dist/chunk-GZRQL3SX.js.map +0 -1
- package/dist/chunk-V5G6BGOK.js +0 -26
- package/dist/chunk-V5G6BGOK.js.map +0 -1
- package/dist/chunk-W66Z3C5H.js +0 -21
- package/dist/chunk-W66Z3C5H.js.map +0 -1
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +0 -34
- package/dist/cli.js.map +0 -1
- package/dist/diff-FSFDCBL5.js +0 -166
- package/dist/diff-FSFDCBL5.js.map +0 -1
- package/dist/index.d.ts +0 -11
- package/dist/index.js +0 -7
- package/dist/index.js.map +0 -1
- package/dist/reset-3ACTIYYE.js +0 -143
- package/dist/reset-3ACTIYYE.js.map +0 -1
- package/dist/setup-MKVVQTVA.js +0 -266
- package/dist/setup-MKVVQTVA.js.map +0 -1
- package/dist/upgrade-FQOL6AF5.js +0 -134
- package/dist/upgrade-FQOL6AF5.js.map +0 -1
- /package/{templates → framework}/SAFEWORD.md +0 -0
- /package/{templates → framework}/guides/architecture-guide.md +0 -0
- /package/{templates → framework}/guides/code-philosophy.md +0 -0
- /package/{templates → framework}/guides/context-files-guide.md +0 -0
- /package/{templates → framework}/guides/data-architecture-guide.md +0 -0
- /package/{templates → framework}/guides/design-doc-guide.md +0 -0
- /package/{templates → framework}/guides/learning-extraction.md +0 -0
- /package/{templates → framework}/guides/llm-instruction-design.md +0 -0
- /package/{templates → framework}/guides/llm-prompting.md +0 -0
- /package/{templates → framework}/guides/tdd-best-practices.md +0 -0
- /package/{templates → framework}/guides/test-definitions-guide.md +0 -0
- /package/{templates → framework}/guides/testing-methodology.md +0 -0
- /package/{templates → framework}/guides/user-story-guide.md +0 -0
- /package/{templates → framework}/guides/zombie-process-cleanup.md +0 -0
- /package/{templates → framework}/prompts/arch-review.md +0 -0
- /package/{templates → framework}/prompts/quality-review.md +0 -0
- /package/{templates/skills/safeword-quality-reviewer → framework/skills/quality-reviewer}/SKILL.md +0 -0
- /package/{templates/doc-templates → framework/templates}/architecture-template.md +0 -0
- /package/{templates/doc-templates → framework/templates}/design-doc-template.md +0 -0
- /package/{templates/doc-templates → framework/templates}/test-definitions-feature.md +0 -0
- /package/{templates/doc-templates → framework/templates}/ticket-template.md +0 -0
- /package/{templates/doc-templates → framework/templates}/user-stories-template.md +0 -0
- /package/{templates → packages/cli/templates}/commands/arch-review.md +0 -0
- /package/{templates → packages/cli/templates}/commands/lint.md +0 -0
- /package/{templates → packages/cli/templates}/commands/quality-review.md +0 -0
- /package/{templates → packages/cli/templates}/hooks/inject-timestamp.sh +0 -0
- /package/{templates → packages/cli/templates}/lib/common.sh +0 -0
- /package/{templates → packages/cli/templates}/lib/jq-fallback.sh +0 -0
- /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
|