qa-skills 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/README.md +168 -0
  2. package/bin/cli.js +42 -0
  3. package/dist/agents/registry.d.ts +5 -0
  4. package/dist/agents/registry.d.ts.map +1 -0
  5. package/dist/agents/registry.js +101 -0
  6. package/dist/agents/registry.js.map +1 -0
  7. package/dist/agents/types.d.ts +9 -0
  8. package/dist/agents/types.d.ts.map +1 -0
  9. package/dist/agents/types.js +2 -0
  10. package/dist/agents/types.js.map +1 -0
  11. package/dist/dependencies.d.ts +21 -0
  12. package/dist/dependencies.d.ts.map +1 -0
  13. package/dist/dependencies.js +125 -0
  14. package/dist/dependencies.js.map +1 -0
  15. package/dist/installer.d.ts +25 -0
  16. package/dist/installer.d.ts.map +1 -0
  17. package/dist/installer.js +437 -0
  18. package/dist/installer.js.map +1 -0
  19. package/dist/scaffold.d.ts +27 -0
  20. package/dist/scaffold.d.ts.map +1 -0
  21. package/dist/scaffold.js +182 -0
  22. package/dist/scaffold.js.map +1 -0
  23. package/package.json +40 -0
  24. package/skills/qa-accessibility-test-writer/SKILL.md +127 -0
  25. package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +349 -0
  26. package/skills/qa-accessibility-test-writer/references/best-practices.md +184 -0
  27. package/skills/qa-accessibility-test-writer/references/wcag-tests.md +331 -0
  28. package/skills/qa-api-contract-curator/SKILL.md +104 -0
  29. package/skills/qa-api-contract-curator/references/breaking-changes.md +363 -0
  30. package/skills/qa-api-contract-curator/references/openapi-structure.md +404 -0
  31. package/skills/qa-browser-data-collector/SKILL.md +132 -0
  32. package/skills/qa-browser-data-collector/references/data-collection-checklist.md +91 -0
  33. package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +113 -0
  34. package/skills/qa-bug-ticket-creator/SKILL.md +148 -0
  35. package/skills/qa-bug-ticket-creator/references/bug-report-format.md +149 -0
  36. package/skills/qa-bug-ticket-creator/references/severity-guide.md +81 -0
  37. package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +39 -0
  38. package/skills/qa-changelog-analyzer/SKILL.md +134 -0
  39. package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +138 -0
  40. package/skills/qa-changelog-analyzer/references/impact-mapping.md +120 -0
  41. package/skills/qa-clickup-integration/SKILL.md +166 -0
  42. package/skills/qa-clickup-integration/references/api-patterns.md +102 -0
  43. package/skills/qa-clickup-integration/references/field-mapping.md +71 -0
  44. package/skills/qa-codeceptjs-writer/SKILL.md +136 -0
  45. package/skills/qa-codeceptjs-writer/references/best-practices.md +207 -0
  46. package/skills/qa-codeceptjs-writer/references/config.md +255 -0
  47. package/skills/qa-codeceptjs-writer/references/patterns.md +285 -0
  48. package/skills/qa-coverage-analyzer/SKILL.md +166 -0
  49. package/skills/qa-coverage-analyzer/references/best-practices.md +142 -0
  50. package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +155 -0
  51. package/skills/qa-coverage-analyzer/references/tools.md +204 -0
  52. package/skills/qa-cypress-writer/SKILL.md +134 -0
  53. package/skills/qa-cypress-writer/references/assertions.md +121 -0
  54. package/skills/qa-cypress-writer/references/best-practices.md +82 -0
  55. package/skills/qa-cypress-writer/references/config.md +121 -0
  56. package/skills/qa-cypress-writer/references/patterns.md +170 -0
  57. package/skills/qa-data-factory/SKILL.md +126 -0
  58. package/skills/qa-data-factory/references/factory-patterns.md +164 -0
  59. package/skills/qa-data-factory/references/faker-guide.md +131 -0
  60. package/skills/qa-diagram-generator/SKILL.md +125 -0
  61. package/skills/qa-diagram-generator/references/c4-model.md +53 -0
  62. package/skills/qa-diagram-generator/references/charts.md +58 -0
  63. package/skills/qa-diagram-generator/references/class-diagram.md +85 -0
  64. package/skills/qa-diagram-generator/references/er-diagram.md +69 -0
  65. package/skills/qa-diagram-generator/references/flowchart.md +92 -0
  66. package/skills/qa-diagram-generator/references/from-screenshot.md +45 -0
  67. package/skills/qa-diagram-generator/references/gantt.md +49 -0
  68. package/skills/qa-diagram-generator/references/journey.md +50 -0
  69. package/skills/qa-diagram-generator/references/mindmap.md +75 -0
  70. package/skills/qa-diagram-generator/references/sequence.md +69 -0
  71. package/skills/qa-diagram-generator/references/state-diagram.md +56 -0
  72. package/skills/qa-discovery-interview/SKILL.md +182 -0
  73. package/skills/qa-discovery-interview/references/completeness-checklist.md +53 -0
  74. package/skills/qa-discovery-interview/references/conflict-patterns.md +101 -0
  75. package/skills/qa-discovery-interview/references/qa-categories.md +147 -0
  76. package/skills/qa-discovery-interview/templates/qa-brief-template.md +168 -0
  77. package/skills/qa-environment-checker/SKILL.md +142 -0
  78. package/skills/qa-environment-checker/references/dependency-matrix.md +101 -0
  79. package/skills/qa-environment-checker/references/health-checks.md +209 -0
  80. package/skills/qa-environment-checker/templates/env-readiness-template.md +64 -0
  81. package/skills/qa-flaky-detector/SKILL.md +153 -0
  82. package/skills/qa-flaky-detector/references/ci-analysis.md +140 -0
  83. package/skills/qa-flaky-detector/references/flaky-patterns.md +247 -0
  84. package/skills/qa-github-issues-enhanced/SKILL.md +175 -0
  85. package/skills/qa-github-issues-enhanced/references/issue-templates.md +425 -0
  86. package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +130 -0
  87. package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +188 -0
  88. package/skills/qa-httpx-writer/SKILL.md +138 -0
  89. package/skills/qa-httpx-writer/references/assertions.md +195 -0
  90. package/skills/qa-httpx-writer/references/best-practices.md +140 -0
  91. package/skills/qa-httpx-writer/references/config.md +212 -0
  92. package/skills/qa-httpx-writer/references/patterns.md +262 -0
  93. package/skills/qa-jest-writer/SKILL.md +131 -0
  94. package/skills/qa-jest-writer/references/assertions.md +125 -0
  95. package/skills/qa-jest-writer/references/best-practices.md +136 -0
  96. package/skills/qa-jest-writer/references/config.md +134 -0
  97. package/skills/qa-jest-writer/references/patterns.md +172 -0
  98. package/skills/qa-jira-integration/SKILL.md +135 -0
  99. package/skills/qa-jira-integration/references/api-patterns.md +143 -0
  100. package/skills/qa-jira-integration/references/field-mapping.md +79 -0
  101. package/skills/qa-jira-integration/references/xray-integration.md +85 -0
  102. package/skills/qa-jmeter-writer/SKILL.md +171 -0
  103. package/skills/qa-jmeter-writer/references/best-practices.md +157 -0
  104. package/skills/qa-jmeter-writer/references/config.md +204 -0
  105. package/skills/qa-jmeter-writer/references/patterns.md +242 -0
  106. package/skills/qa-junit5-writer/SKILL.md +157 -0
  107. package/skills/qa-junit5-writer/references/assertions.md +118 -0
  108. package/skills/qa-junit5-writer/references/config.md +97 -0
  109. package/skills/qa-junit5-writer/references/patterns.md +162 -0
  110. package/skills/qa-k6-writer/SKILL.md +155 -0
  111. package/skills/qa-k6-writer/references/best-practices.md +236 -0
  112. package/skills/qa-k6-writer/references/config.md +219 -0
  113. package/skills/qa-k6-writer/references/patterns.md +304 -0
  114. package/skills/qa-linear-integration/SKILL.md +137 -0
  115. package/skills/qa-linear-integration/references/api-patterns.md +249 -0
  116. package/skills/qa-linear-integration/references/field-mapping.md +121 -0
  117. package/skills/qa-locust-writer/SKILL.md +151 -0
  118. package/skills/qa-locust-writer/references/best-practices.md +126 -0
  119. package/skills/qa-locust-writer/references/config.md +170 -0
  120. package/skills/qa-locust-writer/references/patterns.md +235 -0
  121. package/skills/qa-manual-test-designer/SKILL.md +145 -0
  122. package/skills/qa-manual-test-designer/references/exploratory-charters.md +138 -0
  123. package/skills/qa-manual-test-designer/references/personas.md +146 -0
  124. package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +47 -0
  125. package/skills/qa-manual-test-designer/templates/test-case-template.md +31 -0
  126. package/skills/qa-mobile-test-writer/SKILL.md +144 -0
  127. package/skills/qa-mobile-test-writer/references/best-practices.md +214 -0
  128. package/skills/qa-mobile-test-writer/references/config.md +309 -0
  129. package/skills/qa-mobile-test-writer/references/patterns.md +304 -0
  130. package/skills/qa-nfr-analyst/SKILL.md +177 -0
  131. package/skills/qa-nfr-analyst/references/iso-25010-model.md +159 -0
  132. package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +202 -0
  133. package/skills/qa-nfr-analyst/references/wcag-checklist.md +184 -0
  134. package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +89 -0
  135. package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +48 -0
  136. package/skills/qa-orchestrator/SKILL.md +132 -0
  137. package/skills/qa-orchestrator/references/handoff-chains.md +105 -0
  138. package/skills/qa-orchestrator/references/pipeline-modes.md +115 -0
  139. package/skills/qa-orchestrator/references/scheduler-rules.md +84 -0
  140. package/skills/qa-pact-writer/SKILL.md +133 -0
  141. package/skills/qa-pact-writer/references/best-practices.md +100 -0
  142. package/skills/qa-pact-writer/references/config.md +135 -0
  143. package/skills/qa-pact-writer/references/patterns.md +161 -0
  144. package/skills/qa-plan-creator/SKILL.md +139 -0
  145. package/skills/qa-plan-creator/references/introduction-plan.md +43 -0
  146. package/skills/qa-plan-creator/references/migration-plan.md +44 -0
  147. package/skills/qa-plan-creator/references/onboarding-plan.md +46 -0
  148. package/skills/qa-plan-creator/references/performance-plan.md +44 -0
  149. package/skills/qa-plan-creator/references/regression-plan.md +45 -0
  150. package/skills/qa-plan-creator/references/release-plan.md +45 -0
  151. package/skills/qa-plan-creator/references/sprint-plan.md +44 -0
  152. package/skills/qa-plan-creator/references/test-plan.md +59 -0
  153. package/skills/qa-plan-creator/references/uat-plan.md +43 -0
  154. package/skills/qa-plan-creator/templates/checklist-template.md +36 -0
  155. package/skills/qa-plan-creator/templates/regression-checklist-template.md +49 -0
  156. package/skills/qa-plan-creator/templates/release-checklist-template.md +46 -0
  157. package/skills/qa-plan-creator/templates/test-plan-template.md +74 -0
  158. package/skills/qa-playwright-py-writer/SKILL.md +156 -0
  159. package/skills/qa-playwright-py-writer/references/best-practices.md +194 -0
  160. package/skills/qa-playwright-py-writer/references/config.md +195 -0
  161. package/skills/qa-playwright-py-writer/references/patterns.md +212 -0
  162. package/skills/qa-playwright-ts-writer/SKILL.md +151 -0
  163. package/skills/qa-playwright-ts-writer/references/assertions.md +109 -0
  164. package/skills/qa-playwright-ts-writer/references/best-practices.md +191 -0
  165. package/skills/qa-playwright-ts-writer/references/config.md +144 -0
  166. package/skills/qa-playwright-ts-writer/references/patterns.md +171 -0
  167. package/skills/qa-pytest-writer/SKILL.md +145 -0
  168. package/skills/qa-pytest-writer/references/assertions.md +149 -0
  169. package/skills/qa-pytest-writer/references/best-practices.md +97 -0
  170. package/skills/qa-pytest-writer/references/config.md +176 -0
  171. package/skills/qa-pytest-writer/references/patterns.md +251 -0
  172. package/skills/qa-qase-integration/SKILL.md +149 -0
  173. package/skills/qa-qase-integration/references/api-reference.md +354 -0
  174. package/skills/qa-qase-integration/references/ci-integration.md +196 -0
  175. package/skills/qa-qase-integration/references/field-mapping.md +157 -0
  176. package/skills/qa-requirements-generator/SKILL.md +152 -0
  177. package/skills/qa-requirements-generator/references/iso-29148-structure.md +153 -0
  178. package/skills/qa-requirements-generator/references/requirement-patterns.md +278 -0
  179. package/skills/qa-rest-assured-writer/SKILL.md +137 -0
  180. package/skills/qa-rest-assured-writer/references/best-practices.md +50 -0
  181. package/skills/qa-rest-assured-writer/references/config.md +124 -0
  182. package/skills/qa-rest-assured-writer/references/patterns.md +192 -0
  183. package/skills/qa-risk-analyzer/SKILL.md +158 -0
  184. package/skills/qa-risk-analyzer/references/impact-analysis.md +133 -0
  185. package/skills/qa-risk-analyzer/references/risk-factors.md +123 -0
  186. package/skills/qa-robot-framework-writer/SKILL.md +147 -0
  187. package/skills/qa-robot-framework-writer/references/best-practices.md +249 -0
  188. package/skills/qa-robot-framework-writer/references/config.md +204 -0
  189. package/skills/qa-robot-framework-writer/references/libraries.md +273 -0
  190. package/skills/qa-robot-framework-writer/references/patterns.md +216 -0
  191. package/skills/qa-security-test-writer/SKILL.md +123 -0
  192. package/skills/qa-security-test-writer/references/best-practices.md +155 -0
  193. package/skills/qa-security-test-writer/references/owasp-top10.md +331 -0
  194. package/skills/qa-security-test-writer/references/zap-config.md +258 -0
  195. package/skills/qa-selenium-java-writer/SKILL.md +143 -0
  196. package/skills/qa-selenium-java-writer/references/best-practices.md +59 -0
  197. package/skills/qa-selenium-java-writer/references/config.md +143 -0
  198. package/skills/qa-selenium-java-writer/references/patterns.md +170 -0
  199. package/skills/qa-selenium-py-writer/SKILL.md +150 -0
  200. package/skills/qa-selenium-py-writer/references/best-practices.md +175 -0
  201. package/skills/qa-selenium-py-writer/references/config.md +224 -0
  202. package/skills/qa-selenium-py-writer/references/patterns.md +255 -0
  203. package/skills/qa-shortcut-integration/SKILL.md +143 -0
  204. package/skills/qa-shortcut-integration/references/api-patterns.md +126 -0
  205. package/skills/qa-shortcut-integration/references/field-mapping.md +66 -0
  206. package/skills/qa-spec-auditor/SKILL.md +162 -0
  207. package/skills/qa-spec-auditor/references/audit-checklist.md +144 -0
  208. package/skills/qa-spec-auditor/references/drift-patterns.md +207 -0
  209. package/skills/qa-spec-writer/SKILL.md +143 -0
  210. package/skills/qa-spec-writer/references/gherkin-guide.md +253 -0
  211. package/skills/qa-spec-writer/references/specification-patterns.md +274 -0
  212. package/skills/qa-spring-test-writer/SKILL.md +170 -0
  213. package/skills/qa-spring-test-writer/references/best-practices.md +57 -0
  214. package/skills/qa-spring-test-writer/references/config.md +179 -0
  215. package/skills/qa-spring-test-writer/references/patterns.md +235 -0
  216. package/skills/qa-supertest-writer/SKILL.md +150 -0
  217. package/skills/qa-supertest-writer/references/assertions.md +192 -0
  218. package/skills/qa-supertest-writer/references/best-practices.md +102 -0
  219. package/skills/qa-supertest-writer/references/config.md +166 -0
  220. package/skills/qa-supertest-writer/references/patterns.md +242 -0
  221. package/skills/qa-task-creator/SKILL.md +142 -0
  222. package/skills/qa-task-creator/references/linking-patterns.md +127 -0
  223. package/skills/qa-task-creator/references/task-types.md +169 -0
  224. package/skills/qa-task-creator/templates/task-template.md +24 -0
  225. package/skills/qa-test-doc-compiler/SKILL.md +114 -0
  226. package/skills/qa-test-doc-compiler/references/agile-tailoring.md +220 -0
  227. package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +302 -0
  228. package/skills/qa-test-healer/SKILL.md +101 -0
  229. package/skills/qa-test-healer/references/diagnosis-patterns.md +142 -0
  230. package/skills/qa-test-healer/references/fix-strategies.md +177 -0
  231. package/skills/qa-test-reporter/SKILL.md +130 -0
  232. package/skills/qa-test-reporter/references/best-practices.md +162 -0
  233. package/skills/qa-test-reporter/references/iso-29119-reports.md +236 -0
  234. package/skills/qa-test-reporter/references/report-formats.md +287 -0
  235. package/skills/qa-test-reviewer/SKILL.md +142 -0
  236. package/skills/qa-test-reviewer/references/anti-patterns.md +268 -0
  237. package/skills/qa-test-reviewer/references/review-checklist.md +93 -0
  238. package/skills/qa-test-strategy/SKILL.md +133 -0
  239. package/skills/qa-test-strategy/references/entry-exit-criteria.md +176 -0
  240. package/skills/qa-test-strategy/references/risk-matrix.md +102 -0
  241. package/skills/qa-test-strategy/references/testing-types.md +143 -0
  242. package/skills/qa-testcase-from-docs/SKILL.md +161 -0
  243. package/skills/qa-testcase-from-docs/references/test-case-format.md +196 -0
  244. package/skills/qa-testcase-from-docs/references/test-design-techniques.md +126 -0
  245. package/skills/qa-testcase-from-docs/templates/test-case-template.md +31 -0
  246. package/skills/qa-testcase-from-ui/SKILL.md +109 -0
  247. package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +126 -0
  248. package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +146 -0
  249. package/skills/qa-testcase-from-ui/templates/test-case-template.md +31 -0
  250. package/skills/qa-visual-regression-writer/SKILL.md +175 -0
  251. package/skills/qa-visual-regression-writer/references/best-practices.md +154 -0
  252. package/skills/qa-visual-regression-writer/references/config.md +220 -0
  253. package/skills/qa-visual-regression-writer/references/patterns.md +213 -0
  254. package/skills/qa-vitest-writer/SKILL.md +141 -0
  255. package/skills/qa-vitest-writer/references/assertions.md +105 -0
  256. package/skills/qa-vitest-writer/references/best-practices.md +62 -0
  257. package/skills/qa-vitest-writer/references/config.md +127 -0
  258. package/skills/qa-vitest-writer/references/patterns.md +141 -0
  259. package/skills/qa-webdriverio-writer/SKILL.md +145 -0
  260. package/skills/qa-webdriverio-writer/references/best-practices.md +176 -0
  261. package/skills/qa-webdriverio-writer/references/config.md +240 -0
  262. package/skills/qa-webdriverio-writer/references/patterns.md +269 -0
@@ -0,0 +1,142 @@
1
+ ---
2
+ name: qa-test-reviewer
3
+ description: Code review for test files analyzing structure, assertions, coverage, anti-patterns, and providing a code-smell catalog with before/after improvement examples.
4
+ output_dir: reports/reviews
5
+ ---
6
+
7
+ # QA Test Reviewer
8
+
9
+ ## Purpose
10
+
11
+ Perform code review on test files to assess quality, identify anti-patterns, and recommend improvements. Analyzes test structure, assertion quality, coverage alignment, naming conventions, and mocking correctness. Produces a structured review report with severity ratings and suggested fixes.
12
+
13
+ ## Trigger Phrases
14
+
15
+ - "Review my test code" / "Code review for tests"
16
+ - "Analyze test quality" / "Test code quality review"
17
+ - "Find test anti-patterns" / "Test code smells"
18
+ - "Review [test file] for best practices"
19
+ - "Improve test assertions" / "Fix test structure"
20
+ - "Test coverage alignment check"
21
+ - "DRY vs DAMP in tests"
22
+
23
+ ## Review Criteria
24
+
25
+ | Criterion | What to Check |
26
+ |-----------|---------------|
27
+ | **Test structure** | describe/it nesting, setup/teardown placement, logical grouping |
28
+ | **Assertion quality** | Specific vs vague assertions; one logical assertion per test |
29
+ | **Coverage alignment** | Test ↔ requirement traceability; tests map to intended behavior |
30
+ | **Anti-patterns** | Hardcoded data, shared state, sleep waits, implementation coupling |
31
+ | **Naming conventions** | Descriptive test names; consistent style (should/expect format) |
32
+ | **DRY vs DAMP** | Shared setup where appropriate; readable tests over excessive abstraction |
33
+ | **Mocking correctness** | Mocks verify behavior; no over-mocking; correct setup/teardown |
34
+
35
+ See `references/anti-patterns.md` for the full catalog with before/after examples.
36
+
37
+ ## Code Smell Catalog
38
+
39
+ | Smell | Description | See |
40
+ |-------|-------------|-----|
41
+ | **Magic numbers in tests** | Unexplained literals (timeouts, IDs, counts) | `references/anti-patterns.md` |
42
+ | **Copy-paste test duplication** | Nearly identical tests; should use parametrize/fixtures | `references/anti-patterns.md` |
43
+ | **Assertion-free tests** | Tests that run code but never assert | `references/anti-patterns.md` |
44
+ | **Over-mocking** | Mocking everything; tests verify mocks, not behavior | `references/anti-patterns.md` |
45
+ | **Test logic (if/for in tests)** | Conditional logic inside tests; tests should be deterministic | `references/anti-patterns.md` |
46
+ | **Ignored tests without explanation** | skip/xfail/todo with no reason | `references/anti-patterns.md` |
47
+ | **Hardcoded URLs/selectors** | Brittle strings; should use constants or config | `references/anti-patterns.md` |
48
+
49
+ Each smell includes before/after examples in `references/anti-patterns.md`.
50
+
51
+ ## Output Format
52
+
53
+ ### Review Report Template
54
+
55
+ ```markdown
56
+ # Test Review Report: [file/module name]
57
+
58
+ ## Summary
59
+ - **Files reviewed:** [count]
60
+ - **Issues found:** [count] (Critical: X, High: Y, Medium: Z, Low: W)
61
+ - **Overall assessment:** Pass / Needs improvement / Fail
62
+
63
+ ## Issues
64
+
65
+ ### [Severity] [Issue title]
66
+ **Location:** [file:line]
67
+ **Smell:** [from catalog]
68
+ **Description:** [what's wrong]
69
+ **Suggested fix:**
70
+ [before/after code or instructions]
71
+
72
+ ## Recommendations
73
+ 1. [Priority action]
74
+ 2. [Secondary action]
75
+
76
+ ## References
77
+ - Anti-patterns: references/anti-patterns.md
78
+ - Checklist: references/review-checklist.md
79
+ ```
80
+
81
+ ### Severity Levels
82
+
83
+ | Level | When to use |
84
+ |-------|-------------|
85
+ | **Critical** | Tests are broken, misleading, or will cause false confidence |
86
+ | **High** | Significant maintainability or reliability issues |
87
+ | **Medium** | Best-practice violations; improves quality |
88
+ | **Low** | Style or minor improvements |
89
+
90
+ ## Workflow
91
+
92
+ 1. **Receive test files** — User provides path(s) or content
93
+ 2. **Apply review checklist** — Use `references/review-checklist.md` systematically
94
+ 3. **Identify smells** — Map findings to `references/anti-patterns.md` catalog
95
+ 4. **Assign severity** — Critical/High/Medium/Low per impact
96
+ 5. **Suggest fixes** — Provide before/after examples where applicable
97
+ 6. **Produce report** — Structured output per template above
98
+
99
+ ## Scope
100
+
101
+ **Can do (autonomous):**
102
+ - Review test files for structure, assertions, anti-patterns
103
+ - Produce review report with severity and suggested fixes
104
+ - Reference anti-patterns catalog and review checklist
105
+ - Suggest refactors with before/after examples
106
+
107
+ **Cannot do (requires confirmation):**
108
+ - Apply fixes directly to test code (review only; user applies)
109
+ - Change test framework or migrate tests
110
+ - Override organizational coding standards
111
+
112
+ **Will not do (out of scope):**
113
+ - Modify production/application code
114
+ - Execute tests or generate coverage (consume existing reports)
115
+ - Implement fixes; this skill reviews and recommends only
116
+
117
+ ## References
118
+
119
+ | Topic | File |
120
+ |-------|------|
121
+ | Anti-patterns catalog with before/after examples | `references/anti-patterns.md` |
122
+ | Comprehensive test review checklist | `references/review-checklist.md` |
123
+
124
+ ## Quality Checklist
125
+
126
+ - [ ] All review criteria from checklist applied
127
+ - [ ] Issues mapped to code smell catalog where applicable
128
+ - [ ] Severity assigned per impact (Critical/High/Medium/Low)
129
+ - [ ] Suggested fixes include before/after when helpful
130
+ - [ ] Report follows template format
131
+ - [ ] No hardcoded secrets in examples
132
+ - [ ] Traceability preserved (test case IDs, requirement links)
133
+
134
+ ## Troubleshooting
135
+
136
+ | Symptom | Likely Cause | Fix |
137
+ |---------|--------------|-----|
138
+ | Report too verbose | Every minor issue listed | Focus on High/Critical; group Low by category |
139
+ | Before/after unclear | Example too abstract | Use concrete code from reviewed file |
140
+ | Checklist incomplete | Missing framework-specific checks | See review-checklist.md for Jest/pytest/Playwright sections |
141
+ | Severity inconsistent | Subjective judgment | Use severity table; Critical = broken/misleading |
142
+ | User wants fixes applied | Skill is review-only | Clarify scope; offer to generate patch as separate step |
@@ -0,0 +1,268 @@
1
+ # Test Anti-Patterns Catalog
2
+
3
+ Before/after examples for common test code smells. Use this catalog when reviewing tests.
4
+
5
+ ---
6
+
7
+ ## 1. Magic Numbers in Tests
8
+
9
+ **Smell:** Unexplained literals (timeouts, IDs, counts) make tests brittle and hard to understand.
10
+
11
+ ### Before
12
+
13
+ ```typescript
14
+ it('loads user data', async () => {
15
+ await page.waitForSelector('.user-card', { timeout: 5000 });
16
+ expect(await page.$$('.user-item')).toHaveLength(10);
17
+ });
18
+ ```
19
+
20
+ ```python
21
+ def test_pagination():
22
+ response = client.get('/users?page=1&per_page=25')
23
+ assert len(response.json()['items']) == 25
24
+ ```
25
+
26
+ ### After
27
+
28
+ ```typescript
29
+ const USER_LOAD_TIMEOUT_MS = 5000;
30
+ const EXPECTED_DEFAULT_PAGE_SIZE = 10;
31
+
32
+ it('loads user data', async () => {
33
+ await page.waitForSelector('.user-card', { timeout: USER_LOAD_TIMEOUT_MS });
34
+ expect(await page.$$('.user-item')).toHaveLength(EXPECTED_DEFAULT_PAGE_SIZE);
35
+ });
36
+ ```
37
+
38
+ ```python
39
+ DEFAULT_PAGE_SIZE = 25
40
+
41
+ def test_pagination():
42
+ response = client.get(f'/users?page=1&per_page={DEFAULT_PAGE_SIZE}')
43
+ assert len(response.json()['items']) == DEFAULT_PAGE_SIZE
44
+ ```
45
+
46
+ ---
47
+
48
+ ## 2. Copy-Paste Test Duplication
49
+
50
+ **Smell:** Nearly identical tests; should use parametrize or shared fixtures.
51
+
52
+ ### Before
53
+
54
+ ```typescript
55
+ it('validates email format for gmail', () => {
56
+ expect(validateEmail('user@gmail.com')).toBe(true);
57
+ });
58
+ it('validates email format for outlook', () => {
59
+ expect(validateEmail('user@outlook.com')).toBe(true);
60
+ });
61
+ it('validates email format for yahoo', () => {
62
+ expect(validateEmail('user@yahoo.com')).toBe(true);
63
+ });
64
+ ```
65
+
66
+ ```python
67
+ def test_email_gmail():
68
+ assert validate_email('user@gmail.com') is True
69
+
70
+ def test_email_outlook():
71
+ assert validate_email('user@outlook.com') is True
72
+
73
+ def test_email_yahoo():
74
+ assert validate_email('user@yahoo.com') is True
75
+ ```
76
+
77
+ ### After
78
+
79
+ ```typescript
80
+ const validEmails = ['user@gmail.com', 'user@outlook.com', 'user@yahoo.com'];
81
+ validEmails.forEach((email) => {
82
+ it(`validates email format: ${email}`, () => {
83
+ expect(validateEmail(email)).toBe(true);
84
+ });
85
+ });
86
+ // Or use test.each in Jest/Vitest
87
+ ```
88
+
89
+ ```python
90
+ @pytest.mark.parametrize('email', ['user@gmail.com', 'user@outlook.com', 'user@yahoo.com'])
91
+ def test_valid_email_formats(email):
92
+ assert validate_email(email) is True
93
+ ```
94
+
95
+ ---
96
+
97
+ ## 3. Assertion-Free Tests
98
+
99
+ **Smell:** Tests that run code but never assert; they pass even when behavior is wrong.
100
+
101
+ ### Before
102
+
103
+ ```typescript
104
+ it('saves user to database', async () => {
105
+ await userService.create({ name: 'Alice', email: 'alice@test.com' });
106
+ });
107
+ ```
108
+
109
+ ```python
110
+ def test_create_user():
111
+ user_service.create(name='Alice', email='alice@test.com')
112
+ ```
113
+
114
+ ### After
115
+
116
+ ```typescript
117
+ it('saves user to database', async () => {
118
+ const user = await userService.create({ name: 'Alice', email: 'alice@test.com' });
119
+ expect(user.id).toBeDefined();
120
+ expect(user.name).toBe('Alice');
121
+ const saved = await db.users.findById(user.id);
122
+ expect(saved).toEqual(user);
123
+ });
124
+ ```
125
+
126
+ ```python
127
+ def test_create_user():
128
+ user = user_service.create(name='Alice', email='alice@test.com')
129
+ assert user.id is not None
130
+ assert user.name == 'Alice'
131
+ saved = db.users.find_by_id(user.id)
132
+ assert saved == user
133
+ ```
134
+
135
+ ---
136
+
137
+ ## 4. Over-Mocking
138
+
139
+ **Smell:** Mocking everything; tests verify mocks, not real behavior.
140
+
141
+ ### Before
142
+
143
+ ```typescript
144
+ it('fetches user', async () => {
145
+ const mockFetch = jest.fn().mockResolvedValue({ id: 1, name: 'Alice' });
146
+ (global as any).fetch = mockFetch;
147
+ const user = await userService.getUser(1);
148
+ expect(mockFetch).toHaveBeenCalledWith('/api/users/1');
149
+ expect(user.name).toBe('Alice'); // from mock, not real logic
150
+ });
151
+ ```
152
+
153
+ ### After
154
+
155
+ ```typescript
156
+ it('fetches user from API', async () => {
157
+ const mockResponse = { id: 1, name: 'Alice' };
158
+ server.use(http.get('/api/users/:id', () => HttpResponse.json(mockResponse)));
159
+ const user = await userService.getUser(1);
160
+ expect(user.name).toBe('Alice');
161
+ expect(user.id).toBe(1);
162
+ });
163
+ // Or: test integration with real API in integration suite; mock only external deps
164
+ ```
165
+
166
+ ---
167
+
168
+ ## 5. Test Logic (if/for in Tests)
169
+
170
+ **Smell:** Conditional logic inside tests; tests should be deterministic and simple.
171
+
172
+ ### Before
173
+
174
+ ```typescript
175
+ it('handles multiple users', () => {
176
+ const users = getUsers();
177
+ for (const u of users) {
178
+ if (u.role === 'admin') {
179
+ expect(u.permissions).toContain('delete');
180
+ } else {
181
+ expect(u.permissions).not.toContain('delete');
182
+ }
183
+ }
184
+ });
185
+ ```
186
+
187
+ ### After
188
+
189
+ ```typescript
190
+ it('admin users have delete permission', () => {
191
+ const admin = getUsers().find(u => u.role === 'admin');
192
+ expect(admin?.permissions).toContain('delete');
193
+ });
194
+ it('non-admin users lack delete permission', () => {
195
+ const regular = getUsers().find(u => u.role !== 'admin');
196
+ expect(regular?.permissions).not.toContain('delete');
197
+ });
198
+ ```
199
+
200
+ ---
201
+
202
+ ## 6. Ignored Tests Without Explanation
203
+
204
+ **Smell:** skip/xfail/todo with no reason; tests get forgotten.
205
+
206
+ ### Before
207
+
208
+ ```typescript
209
+ it.skip('flaky test', () => { /* ... */ });
210
+ it.todo('something');
211
+ ```
212
+
213
+ ```python
214
+ @pytest.mark.skip
215
+ def test_something():
216
+ pass
217
+ ```
218
+
219
+ ### After
220
+
221
+ ```typescript
222
+ it.skip('flaky: API returns 500 intermittently; ticket QA-123', () => { /* ... */ });
223
+ it.todo('add test for bulk delete when API is ready');
224
+ ```
225
+
226
+ ```python
227
+ @pytest.mark.skip(reason='Flaky: API returns 500 intermittently; ticket QA-123')
228
+ def test_something():
229
+ pass
230
+ ```
231
+
232
+ ---
233
+
234
+ ## 7. Hardcoded URLs/Selectors
235
+
236
+ **Smell:** Brittle strings; should use constants or config.
237
+
238
+ ### Before
239
+
240
+ ```typescript
241
+ await page.goto('https://staging.example.com/login');
242
+ await page.click('#root > div > form > button[type="submit"]');
243
+ ```
244
+
245
+ ```python
246
+ driver.get('https://staging.example.com/login')
247
+ driver.find_element(By.CSS_SELECTOR, '#root > div > form > button[type="submit"]').click()
248
+ ```
249
+
250
+ ### After
251
+
252
+ ```typescript
253
+ const BASE_URL = process.env.TEST_BASE_URL || 'https://staging.example.com';
254
+ const SELECTORS = {
255
+ loginSubmit: 'button[type="submit"]',
256
+ // or use data-testid: '[data-testid="login-submit"]'
257
+ };
258
+ await page.goto(`${BASE_URL}/login`);
259
+ await page.click(SELECTORS.loginSubmit);
260
+ ```
261
+
262
+ ```python
263
+ BASE_URL = os.environ.get('TEST_BASE_URL', 'https://staging.example.com')
264
+ LOGIN_SUBMIT = '[data-testid="login-submit"]'
265
+
266
+ driver.get(f'{BASE_URL}/login')
267
+ driver.find_element(By.CSS_SELECTOR, LOGIN_SUBMIT).click()
268
+ ```
@@ -0,0 +1,93 @@
1
+ # Test Review Checklist
2
+
3
+ Use this checklist systematically when reviewing test files.
4
+
5
+ ---
6
+
7
+ ## 1. Test Structure
8
+
9
+ - [ ] **describe/it nesting** — Logical grouping; max 3–4 levels deep
10
+ - [ ] **Setup/teardown** — beforeEach/afterEach or fixtures in correct scope
11
+ - [ ] **Test isolation** — Each test independent; no shared mutable state
12
+ - [ ] **Arrange-Act-Assert** — Clear three-phase structure
13
+ - [ ] **One logical assertion per test** — Single behavior under test
14
+
15
+ ### Framework-Specific
16
+
17
+ | Framework | Structure |
18
+ |-----------|-----------|
19
+ | Jest/Vitest | describe → it; beforeEach/afterEach |
20
+ | pytest | class or module; fixtures with scope |
21
+ | Playwright | test() with test.describe; fixtures |
22
+ | Cypress | describe → it; beforeEach |
23
+
24
+ ---
25
+
26
+ ## 2. Assertion Quality
27
+
28
+ - [ ] **Specific assertions** — `expect(x).toBe(y)` not `expect(!!x).toBe(true)` when possible
29
+ - [ ] **Meaningful failure messages** — Custom message when assertion is unclear
30
+ - [ ] **No assertion-free tests** — Every test asserts something
31
+ - [ ] **Correct matchers** — toEqual vs toBe; toContain vs toHaveLength
32
+
33
+ ---
34
+
35
+ ## 3. Coverage Alignment
36
+
37
+ - [ ] **Requirement traceability** — Test IDs or comments link to requirements
38
+ - [ ] **Behavior-focused** — Tests verify behavior, not implementation
39
+ - [ ] **Edge cases** — Boundaries, empty inputs, error paths covered
40
+ - [ ] **No redundant tests** — Same behavior not tested multiple times
41
+
42
+ ---
43
+
44
+ ## 4. Anti-Patterns
45
+
46
+ - [ ] **No magic numbers** — Constants for timeouts, counts, IDs
47
+ - [ ] **No copy-paste duplication** — Parametrize or fixtures
48
+ - [ ] **No sleep waits** — Explicit waits (waitForSelector, waitForResponse)
49
+ - [ ] **No hardcoded URLs/selectors** — Config or constants
50
+ - [ ] **No shared mutable state** — Each test gets fresh data
51
+ - [ ] **No implementation coupling** — Test public API, not internals
52
+ - [ ] **No test logic** — No if/for/switch inside tests
53
+ - [ ] **No ignored tests without reason** — skip/xfail/todo with explanation
54
+
55
+ ---
56
+
57
+ ## 5. Naming Conventions
58
+
59
+ - [ ] **Descriptive names** — "should display error when email is invalid"
60
+ - [ ] **Consistent style** — should/expect or given-when-then
61
+ - [ ] **No implementation details** — "clicks submit button" vs "calls onSubmit handler"
62
+
63
+ ---
64
+
65
+ ## 6. DRY vs DAMP
66
+
67
+ - [ ] **Shared setup** — Common fixtures for repeated setup
68
+ - [ ] **Readable over abstract** — DAMP when clarity matters
69
+ - [ ] **No over-abstraction** — Test helpers that obscure intent
70
+
71
+ ---
72
+
73
+ ## 7. Mocking
74
+
75
+ - [ ] **Mock only external deps** — APIs, DB, file system
76
+ - [ ] **Verify behavior, not calls** — Prefer outcome over call count when possible
77
+ - [ ] **Correct teardown** — Mocks restored after test
78
+ - [ ] **No over-mocking** — Test real code paths where feasible
79
+
80
+ ---
81
+
82
+ ## Severity Mapping
83
+
84
+ | Finding | Typical Severity |
85
+ |---------|------------------|
86
+ | Assertion-free test | Critical |
87
+ | Shared mutable state | Critical |
88
+ | sleep() in test | High |
89
+ | Magic numbers everywhere | Medium |
90
+ | Copy-paste duplication | Medium |
91
+ | Hardcoded URL | Medium |
92
+ | skip without reason | Low |
93
+ | Naming style inconsistency | Low |
@@ -0,0 +1,133 @@
1
+ ---
2
+ name: qa-test-strategy
3
+ description: Generate comprehensive test strategy documents covering scope, approach, testing types, environments, risk assessment, entry/exit criteria, and resource planning.
4
+ output_dir: docs/plans
5
+ dependencies:
6
+ recommended:
7
+ - qa-diagram-generator
8
+ - qa-risk-analyzer
9
+ ---
10
+
11
+ # QA Test Strategy
12
+
13
+ ## Purpose
14
+
15
+ Create comprehensive test strategy and test plan documents that define the overall approach to testing for a project or release. Aligns with ISO/IEC/IEEE 29119-3 and provides a strategic blueprint for all testing activities.
16
+
17
+ ## Trigger Phrases
18
+
19
+ - "Create a test strategy for..."
20
+ - "Generate test strategy document"
21
+ - "Define testing approach for project"
22
+ - "Test plan with risk assessment"
23
+ - "Comprehensive QA strategy"
24
+
25
+ ## Output Sections
26
+
27
+ Every test strategy document includes:
28
+
29
+ | Section | Content |
30
+ | ------- | ------- |
31
+ | **Test Scope & Objectives** | In-scope/out-of-scope, measurable goals, success criteria |
32
+ | **Testing Types Breakdown & Rationale** | Unit, integration, E2E, performance, security, accessibility, etc. — with rationale for each |
33
+ | **Environment Requirements** | Dev, staging, prod parity, data, tooling |
34
+ | **Risk Assessment Matrix** | Technical, business, process risks with probability/impact and mitigations |
35
+ | **Entry/Exit Criteria** | Conditions to start and complete testing at each level |
36
+ | **Resource & Timeline Estimation** | Roles, effort, schedule, dependencies |
37
+ | **Defect Management Process** | Triage, severity, workflow, escalation |
38
+ | **Definition of Done/Ready** | DoD for stories; DoR for sprint readiness |
39
+ | **Test Data Strategy** | Sources, masking, refresh, synthetic data |
40
+ | **CI/CD Integration Strategy** | Pipeline gates, automation triggers, reporting |
41
+
42
+ ## Testing Pyramid Guidance
43
+
44
+ Apply the testing pyramid principle for balanced coverage:
45
+
46
+ | Layer | Ratio (typical) | Focus |
47
+ | ----- | ----------------- | ----- |
48
+ | **Unit** | 70% | Fast, isolated, high volume |
49
+ | **Integration** | 20% | Component interactions, APIs |
50
+ | **E2E** | 10% | Critical user journeys, smoke |
51
+
52
+ Reference `references/testing-types.md` for detailed type descriptions and when to apply each.
53
+
54
+ ## Risk-Based Test Prioritization
55
+
56
+ 1. **Identify risks** — Technical, business, process (see `references/risk-matrix.md`)
57
+ 2. **Score** — Probability × Impact = Risk score
58
+ 3. **Prioritize** — High-risk areas get more coverage and earlier testing
59
+ 4. **Mitigate** — Allocate exploratory, security, performance tests to high-risk zones
60
+
61
+ ## Integration with Other Skills
62
+
63
+ | Need | Skill | Usage |
64
+ | ---- | ----- | ----- |
65
+ | Gantt charts, timelines | qa-diagram-generator | `references/gantt.md` for schedule visualization |
66
+ | Mind maps, flowcharts | qa-diagram-generator | `references/mindmap.md`, `references/flowchart.md` for scope/process |
67
+ | Detailed sub-plans | qa-plan-creator | Test plan, sprint plan, regression plan, performance plan |
68
+ | NFR analysis | qa-nfr-analyst | Performance, security, usability requirements |
69
+
70
+ ## Workflow
71
+
72
+ 1. **Input:** Project context (scope, tech stack, timeline, constraints)
73
+ 2. **Scope:** Define in/out boundaries and objectives
74
+ 3. **Types:** Select testing types from `references/testing-types.md` with rationale
75
+ 4. **Pyramid:** Apply unit > integration > E2E ratios
76
+ 5. **Risk:** Populate risk matrix from `references/risk-matrix.md`
77
+ 6. **Criteria:** Apply entry/exit from `references/entry-exit-criteria.md`
78
+ 7. **Visuals:** Call qa-diagram-generator for Gantt, mind maps, flowcharts
79
+ 8. **Sub-plans:** Call qa-plan-creator for detailed test/sprint/regression plans
80
+ 9. **Output:** Complete test strategy document
81
+
82
+ ## Scope
83
+
84
+ **Can do (autonomous):**
85
+ - Generate full test strategy documents from project context
86
+ - Populate all 10 output sections
87
+ - Apply testing pyramid ratios and risk-based prioritization
88
+ - Call qa-diagram-generator for Gantt, mind maps, flowcharts
89
+ - Call qa-plan-creator for detailed sub-plans
90
+ - Reference testing-types, risk-matrix, entry-exit-criteria
91
+
92
+ **Cannot do (requires confirmation):**
93
+ - Change project scope or release dates set by stakeholders
94
+ - Override organizational test policy or standards
95
+ - Assign resources without approval
96
+
97
+ **Will not do (out of scope):**
98
+ - Execute tests or automation
99
+ - Modify production code or environments
100
+ - Approve strategy (approval is stakeholder responsibility)
101
+
102
+ ## Quality Checklist
103
+
104
+ - [ ] All 10 output sections present and populated
105
+ - [ ] Test scope clearly defines in/out boundaries
106
+ - [ ] Testing types include rationale (why each type)
107
+ - [ ] Pyramid ratios applied (unit > integration > E2E)
108
+ - [ ] Risk matrix populated with mitigations
109
+ - [ ] Entry/exit criteria are testable and level-specific
110
+ - [ ] Resource/timeline estimates are realistic
111
+ - [ ] Diagrams generated for schedule/scope (Gantt, mind map)
112
+ - [ ] References to qa-diagram-generator and qa-plan-creator correct
113
+ - [ ] No hardcoded secrets
114
+
115
+ ## Troubleshooting
116
+
117
+ | Symptom | Likely Cause | Fix |
118
+ | ------- | ------------ | --- |
119
+ | Strategy too generic | Insufficient context | Ask for scope, tech stack, timeline, team size |
120
+ | Missing diagrams | qa-diagram-generator not invoked | Explicitly call for Gantt, mind map, flowchart |
121
+ | Wrong testing types | Project type unclear | Clarify web/mobile/API/embedded; use testing-types reference |
122
+ | Risk matrix empty | No risk input | Prompt for known risks; use risk-matrix template |
123
+ | Entry/exit vague | Subjective language | Use entry-exit-criteria reference; make criteria measurable |
124
+ | Pyramid inverted | E2E-heavy approach | Recommend rebalancing; explain pyramid rationale |
125
+ | Duplicate content | Overlap with qa-plan-creator | Strategy = high-level; plan = detailed; delegate sub-plans |
126
+
127
+ ## Reference Files
128
+
129
+ | Topic | Reference |
130
+ | ----- | --------- |
131
+ | Testing types | `references/testing-types.md` |
132
+ | Risk assessment | `references/risk-matrix.md` |
133
+ | Entry/exit criteria | `references/entry-exit-criteria.md` |