qa-skills 3.0.0 → 3.1.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 +20 -149
  2. package/bin/cli.js +1 -40
  3. package/package.json +23 -26
  4. package/dist/agents/registry.d.ts +0 -5
  5. package/dist/agents/registry.d.ts.map +0 -1
  6. package/dist/agents/registry.js +0 -101
  7. package/dist/agents/registry.js.map +0 -1
  8. package/dist/agents/types.d.ts +0 -9
  9. package/dist/agents/types.d.ts.map +0 -1
  10. package/dist/agents/types.js +0 -2
  11. package/dist/agents/types.js.map +0 -1
  12. package/dist/dependencies.d.ts +0 -21
  13. package/dist/dependencies.d.ts.map +0 -1
  14. package/dist/dependencies.js +0 -125
  15. package/dist/dependencies.js.map +0 -1
  16. package/dist/installer.d.ts +0 -25
  17. package/dist/installer.d.ts.map +0 -1
  18. package/dist/installer.js +0 -437
  19. package/dist/installer.js.map +0 -1
  20. package/dist/scaffold.d.ts +0 -27
  21. package/dist/scaffold.d.ts.map +0 -1
  22. package/dist/scaffold.js +0 -182
  23. package/dist/scaffold.js.map +0 -1
  24. package/skills/qa-accessibility-test-writer/SKILL.md +0 -127
  25. package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +0 -349
  26. package/skills/qa-accessibility-test-writer/references/best-practices.md +0 -184
  27. package/skills/qa-accessibility-test-writer/references/wcag-tests.md +0 -331
  28. package/skills/qa-api-contract-curator/SKILL.md +0 -104
  29. package/skills/qa-api-contract-curator/references/breaking-changes.md +0 -363
  30. package/skills/qa-api-contract-curator/references/openapi-structure.md +0 -404
  31. package/skills/qa-browser-data-collector/SKILL.md +0 -132
  32. package/skills/qa-browser-data-collector/references/data-collection-checklist.md +0 -91
  33. package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +0 -113
  34. package/skills/qa-bug-ticket-creator/SKILL.md +0 -148
  35. package/skills/qa-bug-ticket-creator/references/bug-report-format.md +0 -149
  36. package/skills/qa-bug-ticket-creator/references/severity-guide.md +0 -81
  37. package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +0 -39
  38. package/skills/qa-changelog-analyzer/SKILL.md +0 -134
  39. package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +0 -138
  40. package/skills/qa-changelog-analyzer/references/impact-mapping.md +0 -120
  41. package/skills/qa-clickup-integration/SKILL.md +0 -166
  42. package/skills/qa-clickup-integration/references/api-patterns.md +0 -102
  43. package/skills/qa-clickup-integration/references/field-mapping.md +0 -71
  44. package/skills/qa-codeceptjs-writer/SKILL.md +0 -136
  45. package/skills/qa-codeceptjs-writer/references/best-practices.md +0 -207
  46. package/skills/qa-codeceptjs-writer/references/config.md +0 -255
  47. package/skills/qa-codeceptjs-writer/references/patterns.md +0 -285
  48. package/skills/qa-coverage-analyzer/SKILL.md +0 -166
  49. package/skills/qa-coverage-analyzer/references/best-practices.md +0 -142
  50. package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +0 -155
  51. package/skills/qa-coverage-analyzer/references/tools.md +0 -204
  52. package/skills/qa-cypress-writer/SKILL.md +0 -134
  53. package/skills/qa-cypress-writer/references/assertions.md +0 -121
  54. package/skills/qa-cypress-writer/references/best-practices.md +0 -82
  55. package/skills/qa-cypress-writer/references/config.md +0 -121
  56. package/skills/qa-cypress-writer/references/patterns.md +0 -170
  57. package/skills/qa-data-factory/SKILL.md +0 -126
  58. package/skills/qa-data-factory/references/factory-patterns.md +0 -164
  59. package/skills/qa-data-factory/references/faker-guide.md +0 -131
  60. package/skills/qa-diagram-generator/SKILL.md +0 -125
  61. package/skills/qa-diagram-generator/references/c4-model.md +0 -53
  62. package/skills/qa-diagram-generator/references/charts.md +0 -58
  63. package/skills/qa-diagram-generator/references/class-diagram.md +0 -85
  64. package/skills/qa-diagram-generator/references/er-diagram.md +0 -69
  65. package/skills/qa-diagram-generator/references/flowchart.md +0 -92
  66. package/skills/qa-diagram-generator/references/from-screenshot.md +0 -45
  67. package/skills/qa-diagram-generator/references/gantt.md +0 -49
  68. package/skills/qa-diagram-generator/references/journey.md +0 -50
  69. package/skills/qa-diagram-generator/references/mindmap.md +0 -75
  70. package/skills/qa-diagram-generator/references/sequence.md +0 -69
  71. package/skills/qa-diagram-generator/references/state-diagram.md +0 -56
  72. package/skills/qa-discovery-interview/SKILL.md +0 -182
  73. package/skills/qa-discovery-interview/references/completeness-checklist.md +0 -53
  74. package/skills/qa-discovery-interview/references/conflict-patterns.md +0 -101
  75. package/skills/qa-discovery-interview/references/qa-categories.md +0 -147
  76. package/skills/qa-discovery-interview/templates/qa-brief-template.md +0 -168
  77. package/skills/qa-environment-checker/SKILL.md +0 -142
  78. package/skills/qa-environment-checker/references/dependency-matrix.md +0 -101
  79. package/skills/qa-environment-checker/references/health-checks.md +0 -209
  80. package/skills/qa-environment-checker/templates/env-readiness-template.md +0 -64
  81. package/skills/qa-flaky-detector/SKILL.md +0 -153
  82. package/skills/qa-flaky-detector/references/ci-analysis.md +0 -140
  83. package/skills/qa-flaky-detector/references/flaky-patterns.md +0 -247
  84. package/skills/qa-github-issues-enhanced/SKILL.md +0 -175
  85. package/skills/qa-github-issues-enhanced/references/issue-templates.md +0 -425
  86. package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +0 -130
  87. package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +0 -188
  88. package/skills/qa-httpx-writer/SKILL.md +0 -138
  89. package/skills/qa-httpx-writer/references/assertions.md +0 -195
  90. package/skills/qa-httpx-writer/references/best-practices.md +0 -140
  91. package/skills/qa-httpx-writer/references/config.md +0 -212
  92. package/skills/qa-httpx-writer/references/patterns.md +0 -262
  93. package/skills/qa-jest-writer/SKILL.md +0 -131
  94. package/skills/qa-jest-writer/references/assertions.md +0 -125
  95. package/skills/qa-jest-writer/references/best-practices.md +0 -136
  96. package/skills/qa-jest-writer/references/config.md +0 -134
  97. package/skills/qa-jest-writer/references/patterns.md +0 -172
  98. package/skills/qa-jira-integration/SKILL.md +0 -135
  99. package/skills/qa-jira-integration/references/api-patterns.md +0 -143
  100. package/skills/qa-jira-integration/references/field-mapping.md +0 -79
  101. package/skills/qa-jira-integration/references/xray-integration.md +0 -85
  102. package/skills/qa-jmeter-writer/SKILL.md +0 -171
  103. package/skills/qa-jmeter-writer/references/best-practices.md +0 -157
  104. package/skills/qa-jmeter-writer/references/config.md +0 -204
  105. package/skills/qa-jmeter-writer/references/patterns.md +0 -242
  106. package/skills/qa-junit5-writer/SKILL.md +0 -157
  107. package/skills/qa-junit5-writer/references/assertions.md +0 -118
  108. package/skills/qa-junit5-writer/references/config.md +0 -97
  109. package/skills/qa-junit5-writer/references/patterns.md +0 -162
  110. package/skills/qa-k6-writer/SKILL.md +0 -155
  111. package/skills/qa-k6-writer/references/best-practices.md +0 -236
  112. package/skills/qa-k6-writer/references/config.md +0 -219
  113. package/skills/qa-k6-writer/references/patterns.md +0 -304
  114. package/skills/qa-linear-integration/SKILL.md +0 -137
  115. package/skills/qa-linear-integration/references/api-patterns.md +0 -249
  116. package/skills/qa-linear-integration/references/field-mapping.md +0 -121
  117. package/skills/qa-locust-writer/SKILL.md +0 -151
  118. package/skills/qa-locust-writer/references/best-practices.md +0 -126
  119. package/skills/qa-locust-writer/references/config.md +0 -170
  120. package/skills/qa-locust-writer/references/patterns.md +0 -235
  121. package/skills/qa-manual-test-designer/SKILL.md +0 -145
  122. package/skills/qa-manual-test-designer/references/exploratory-charters.md +0 -138
  123. package/skills/qa-manual-test-designer/references/personas.md +0 -146
  124. package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +0 -47
  125. package/skills/qa-manual-test-designer/templates/test-case-template.md +0 -31
  126. package/skills/qa-mobile-test-writer/SKILL.md +0 -144
  127. package/skills/qa-mobile-test-writer/references/best-practices.md +0 -214
  128. package/skills/qa-mobile-test-writer/references/config.md +0 -309
  129. package/skills/qa-mobile-test-writer/references/patterns.md +0 -304
  130. package/skills/qa-nfr-analyst/SKILL.md +0 -177
  131. package/skills/qa-nfr-analyst/references/iso-25010-model.md +0 -159
  132. package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +0 -202
  133. package/skills/qa-nfr-analyst/references/wcag-checklist.md +0 -184
  134. package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +0 -89
  135. package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +0 -48
  136. package/skills/qa-orchestrator/SKILL.md +0 -132
  137. package/skills/qa-orchestrator/references/handoff-chains.md +0 -105
  138. package/skills/qa-orchestrator/references/pipeline-modes.md +0 -115
  139. package/skills/qa-orchestrator/references/scheduler-rules.md +0 -84
  140. package/skills/qa-pact-writer/SKILL.md +0 -133
  141. package/skills/qa-pact-writer/references/best-practices.md +0 -100
  142. package/skills/qa-pact-writer/references/config.md +0 -135
  143. package/skills/qa-pact-writer/references/patterns.md +0 -161
  144. package/skills/qa-plan-creator/SKILL.md +0 -139
  145. package/skills/qa-plan-creator/references/introduction-plan.md +0 -43
  146. package/skills/qa-plan-creator/references/migration-plan.md +0 -44
  147. package/skills/qa-plan-creator/references/onboarding-plan.md +0 -46
  148. package/skills/qa-plan-creator/references/performance-plan.md +0 -44
  149. package/skills/qa-plan-creator/references/regression-plan.md +0 -45
  150. package/skills/qa-plan-creator/references/release-plan.md +0 -45
  151. package/skills/qa-plan-creator/references/sprint-plan.md +0 -44
  152. package/skills/qa-plan-creator/references/test-plan.md +0 -59
  153. package/skills/qa-plan-creator/references/uat-plan.md +0 -43
  154. package/skills/qa-plan-creator/templates/checklist-template.md +0 -36
  155. package/skills/qa-plan-creator/templates/regression-checklist-template.md +0 -49
  156. package/skills/qa-plan-creator/templates/release-checklist-template.md +0 -46
  157. package/skills/qa-plan-creator/templates/test-plan-template.md +0 -74
  158. package/skills/qa-playwright-py-writer/SKILL.md +0 -156
  159. package/skills/qa-playwright-py-writer/references/best-practices.md +0 -194
  160. package/skills/qa-playwright-py-writer/references/config.md +0 -195
  161. package/skills/qa-playwright-py-writer/references/patterns.md +0 -212
  162. package/skills/qa-playwright-ts-writer/SKILL.md +0 -151
  163. package/skills/qa-playwright-ts-writer/references/assertions.md +0 -109
  164. package/skills/qa-playwright-ts-writer/references/best-practices.md +0 -191
  165. package/skills/qa-playwright-ts-writer/references/config.md +0 -144
  166. package/skills/qa-playwright-ts-writer/references/patterns.md +0 -171
  167. package/skills/qa-pytest-writer/SKILL.md +0 -145
  168. package/skills/qa-pytest-writer/references/assertions.md +0 -149
  169. package/skills/qa-pytest-writer/references/best-practices.md +0 -97
  170. package/skills/qa-pytest-writer/references/config.md +0 -176
  171. package/skills/qa-pytest-writer/references/patterns.md +0 -251
  172. package/skills/qa-qase-integration/SKILL.md +0 -149
  173. package/skills/qa-qase-integration/references/api-reference.md +0 -354
  174. package/skills/qa-qase-integration/references/ci-integration.md +0 -196
  175. package/skills/qa-qase-integration/references/field-mapping.md +0 -157
  176. package/skills/qa-requirements-generator/SKILL.md +0 -152
  177. package/skills/qa-requirements-generator/references/iso-29148-structure.md +0 -153
  178. package/skills/qa-requirements-generator/references/requirement-patterns.md +0 -278
  179. package/skills/qa-rest-assured-writer/SKILL.md +0 -137
  180. package/skills/qa-rest-assured-writer/references/best-practices.md +0 -50
  181. package/skills/qa-rest-assured-writer/references/config.md +0 -124
  182. package/skills/qa-rest-assured-writer/references/patterns.md +0 -192
  183. package/skills/qa-risk-analyzer/SKILL.md +0 -158
  184. package/skills/qa-risk-analyzer/references/impact-analysis.md +0 -133
  185. package/skills/qa-risk-analyzer/references/risk-factors.md +0 -123
  186. package/skills/qa-robot-framework-writer/SKILL.md +0 -147
  187. package/skills/qa-robot-framework-writer/references/best-practices.md +0 -249
  188. package/skills/qa-robot-framework-writer/references/config.md +0 -204
  189. package/skills/qa-robot-framework-writer/references/libraries.md +0 -273
  190. package/skills/qa-robot-framework-writer/references/patterns.md +0 -216
  191. package/skills/qa-security-test-writer/SKILL.md +0 -123
  192. package/skills/qa-security-test-writer/references/best-practices.md +0 -155
  193. package/skills/qa-security-test-writer/references/owasp-top10.md +0 -331
  194. package/skills/qa-security-test-writer/references/zap-config.md +0 -258
  195. package/skills/qa-selenium-java-writer/SKILL.md +0 -143
  196. package/skills/qa-selenium-java-writer/references/best-practices.md +0 -59
  197. package/skills/qa-selenium-java-writer/references/config.md +0 -143
  198. package/skills/qa-selenium-java-writer/references/patterns.md +0 -170
  199. package/skills/qa-selenium-py-writer/SKILL.md +0 -150
  200. package/skills/qa-selenium-py-writer/references/best-practices.md +0 -175
  201. package/skills/qa-selenium-py-writer/references/config.md +0 -224
  202. package/skills/qa-selenium-py-writer/references/patterns.md +0 -255
  203. package/skills/qa-shortcut-integration/SKILL.md +0 -143
  204. package/skills/qa-shortcut-integration/references/api-patterns.md +0 -126
  205. package/skills/qa-shortcut-integration/references/field-mapping.md +0 -66
  206. package/skills/qa-spec-auditor/SKILL.md +0 -162
  207. package/skills/qa-spec-auditor/references/audit-checklist.md +0 -144
  208. package/skills/qa-spec-auditor/references/drift-patterns.md +0 -207
  209. package/skills/qa-spec-writer/SKILL.md +0 -143
  210. package/skills/qa-spec-writer/references/gherkin-guide.md +0 -253
  211. package/skills/qa-spec-writer/references/specification-patterns.md +0 -274
  212. package/skills/qa-spring-test-writer/SKILL.md +0 -170
  213. package/skills/qa-spring-test-writer/references/best-practices.md +0 -57
  214. package/skills/qa-spring-test-writer/references/config.md +0 -179
  215. package/skills/qa-spring-test-writer/references/patterns.md +0 -235
  216. package/skills/qa-supertest-writer/SKILL.md +0 -150
  217. package/skills/qa-supertest-writer/references/assertions.md +0 -192
  218. package/skills/qa-supertest-writer/references/best-practices.md +0 -102
  219. package/skills/qa-supertest-writer/references/config.md +0 -166
  220. package/skills/qa-supertest-writer/references/patterns.md +0 -242
  221. package/skills/qa-task-creator/SKILL.md +0 -142
  222. package/skills/qa-task-creator/references/linking-patterns.md +0 -127
  223. package/skills/qa-task-creator/references/task-types.md +0 -169
  224. package/skills/qa-task-creator/templates/task-template.md +0 -24
  225. package/skills/qa-test-doc-compiler/SKILL.md +0 -114
  226. package/skills/qa-test-doc-compiler/references/agile-tailoring.md +0 -220
  227. package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +0 -302
  228. package/skills/qa-test-healer/SKILL.md +0 -101
  229. package/skills/qa-test-healer/references/diagnosis-patterns.md +0 -142
  230. package/skills/qa-test-healer/references/fix-strategies.md +0 -177
  231. package/skills/qa-test-reporter/SKILL.md +0 -130
  232. package/skills/qa-test-reporter/references/best-practices.md +0 -162
  233. package/skills/qa-test-reporter/references/iso-29119-reports.md +0 -236
  234. package/skills/qa-test-reporter/references/report-formats.md +0 -287
  235. package/skills/qa-test-reviewer/SKILL.md +0 -142
  236. package/skills/qa-test-reviewer/references/anti-patterns.md +0 -268
  237. package/skills/qa-test-reviewer/references/review-checklist.md +0 -93
  238. package/skills/qa-test-strategy/SKILL.md +0 -133
  239. package/skills/qa-test-strategy/references/entry-exit-criteria.md +0 -176
  240. package/skills/qa-test-strategy/references/risk-matrix.md +0 -102
  241. package/skills/qa-test-strategy/references/testing-types.md +0 -143
  242. package/skills/qa-testcase-from-docs/SKILL.md +0 -161
  243. package/skills/qa-testcase-from-docs/references/test-case-format.md +0 -196
  244. package/skills/qa-testcase-from-docs/references/test-design-techniques.md +0 -126
  245. package/skills/qa-testcase-from-docs/templates/test-case-template.md +0 -31
  246. package/skills/qa-testcase-from-ui/SKILL.md +0 -109
  247. package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +0 -126
  248. package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +0 -146
  249. package/skills/qa-testcase-from-ui/templates/test-case-template.md +0 -31
  250. package/skills/qa-visual-regression-writer/SKILL.md +0 -175
  251. package/skills/qa-visual-regression-writer/references/best-practices.md +0 -154
  252. package/skills/qa-visual-regression-writer/references/config.md +0 -220
  253. package/skills/qa-visual-regression-writer/references/patterns.md +0 -213
  254. package/skills/qa-vitest-writer/SKILL.md +0 -141
  255. package/skills/qa-vitest-writer/references/assertions.md +0 -105
  256. package/skills/qa-vitest-writer/references/best-practices.md +0 -62
  257. package/skills/qa-vitest-writer/references/config.md +0 -127
  258. package/skills/qa-vitest-writer/references/patterns.md +0 -141
  259. package/skills/qa-webdriverio-writer/SKILL.md +0 -145
  260. package/skills/qa-webdriverio-writer/references/best-practices.md +0 -176
  261. package/skills/qa-webdriverio-writer/references/config.md +0 -240
  262. package/skills/qa-webdriverio-writer/references/patterns.md +0 -269
@@ -1,130 +0,0 @@
1
- # Label Taxonomy for QA GitHub Issues
2
-
3
- *Complete label taxonomy with naming conventions and color codes for GitHub Issues.*
4
-
5
- ---
6
-
7
- ## Naming Conventions
8
-
9
- - **Prefix format**: `category/value` (e.g., `type/bug`, `priority/high`)
10
- - **Flat labels**: Use for simple tags without hierarchy (e.g., `needs-triage`, `verified`)
11
- - **Lowercase**: All labels use lowercase with hyphens
12
- - **Consistent**: Same prefix for same category across all labels
13
-
14
- ---
15
-
16
- ## Type Labels (`type/`)
17
-
18
- | Label | Color | Description |
19
- | ----- | ----- | ----------- |
20
- | `type/bug` | `#d73a4a` (red) | Defect or incorrect behavior |
21
- | `type/enhancement` | `#a2eeef` (cyan) | New feature or improvement |
22
- | `type/task` | `#7f8c8d` (gray) | Work item, chore, or maintenance |
23
- | `type/documentation` | `#0075ca` (blue) | Docs, specs, or README updates |
24
- | `type/test-coverage-gap` | `#fbca04` (yellow) | Missing or insufficient test coverage |
25
- | `type/flaky-test` | `#f9d0c4` (light red) | Intermittent or unreliable test |
26
- | `type/security` | `#ee0701` (dark red) | Security vulnerability or hardening |
27
-
28
- ---
29
-
30
- ## Priority Labels (`priority/`)
31
-
32
- | Label | Color | Description |
33
- | ----- | ----- | ----------- |
34
- | `priority/critical` | `#b60205` (dark red) | Fix immediately; blocks release |
35
- | `priority/high` | `#d93f0b` (orange-red) | Fix in current sprint |
36
- | `priority/medium` | `#fbca04` (yellow) | Fix in next sprint |
37
- | `priority/low` | `#0e8a16` (green) | Backlog; fix when possible |
38
-
39
- ---
40
-
41
- ## Component Labels (`component/`)
42
-
43
- | Label | Color | Description |
44
- | ----- | ----- | ----------- |
45
- | `component/frontend` | `#1d76db` (blue) | UI, React, Vue, Angular |
46
- | `component/backend` | `#5319e7` (purple) | Server, services, business logic |
47
- | `component/api` | `#0052cc` (blue) | REST, GraphQL, gRPC endpoints |
48
- | `component/auth` | `#c5def5` (light blue) | Login, auth, permissions |
49
- | `component/database` | `#bfdadc` (light gray) | DB, migrations, queries |
50
- | `component/integration` | `#c2e0c6` (light green) | Third-party, external services |
51
- | `component/mobile` | `#bfd4f2` (light blue) | iOS, Android, mobile web |
52
- | `component/e2e` | `#d4c5f9` (lavender) | End-to-end tests |
53
- | `component/unit` | `#fef2c0` (light yellow) | Unit tests |
54
- | `component/performance` | `#f9d0c4` (light red) | Load, stress, performance tests |
55
-
56
- ---
57
-
58
- ## Status Labels (`status/`)
59
-
60
- | Label | Color | Description |
61
- | ----- | ----- | ----------- |
62
- | `status/needs-triage` | `#d93f0b` (orange) | New; awaiting review |
63
- | `status/in-progress` | `#0052cc` (blue) | Being worked on |
64
- | `status/ready-for-test` | `#0e8a16` (green) | PR merged; QA verification pending |
65
- | `status/verified` | `#0e8a16` (green) | QA confirmed fix |
66
- | `status/blocked` | `#b60205` (red) | Waiting on dependency |
67
- | `status/wontfix` | `#ffffff` (white) | Declined; out of scope |
68
-
69
- ---
70
-
71
- ## QA-Specific Labels
72
-
73
- | Label | Color | Description |
74
- | ----- | ----- | ----------- |
75
- | `docs-update` | `#0075ca` (blue) | Documentation change |
76
- | `spec-drift` | `#fbca04` (yellow) | Spec-auditor finding; spec vs implementation |
77
- | `regression-risk` | `#f9d0c4` (light red) | Changelog-analyzer flagged |
78
- | `needs-repro` | `#d93f0b` (orange) | Cannot reproduce; needs more info |
79
- | `duplicate` | `#cfd3d7` (gray) | Duplicate of another issue |
80
-
81
- ---
82
-
83
- ## Color Reference (Hex Codes)
84
-
85
- | Color Name | Hex | Use |
86
- | ---------- | --- | --- |
87
- | Red (critical) | `#d73a4a` | Bugs, critical priority |
88
- | Dark red | `#b60205` | Blockers, critical |
89
- | Orange | `#d93f0b` | High priority, needs attention |
90
- | Yellow | `#fbca04` | Medium priority, warnings |
91
- | Green | `#0e8a16` | Done, verified, low priority |
92
- | Blue | `#0052cc` | In progress, API, info |
93
- | Cyan | `#a2eeef` | Enhancements |
94
- | Purple | `#5319e7` | Backend, special |
95
- | Gray | `#7f8c8d` | Tasks, neutral |
96
- | Light gray | `#cfd3d7` | Duplicates, deprecated |
97
-
98
- ---
99
-
100
- ## GitHub Label Creation
101
-
102
- To create labels via GitHub MCP or API:
103
-
104
- ```json
105
- {
106
- "name": "type/bug",
107
- "color": "d73a4a",
108
- "description": "Defect or incorrect behavior"
109
- }
110
- ```
111
-
112
- **Note**: GitHub expects 6-character hex without `#`. Use lowercase.
113
-
114
- ---
115
-
116
- ## Recommended Label Sets by Repo Type
117
-
118
- | Repo Type | Essential Labels |
119
- | --------- | ----------------- |
120
- | **QA-focused** | `type/bug`, `type/test-coverage-gap`, `type/flaky-test`, `type/documentation`, `priority/*`, `component/*`, `status/*` |
121
- | **Full-stack** | All `type/`, `priority/`, `component/`, `status/` |
122
- | **Minimal** | `type/bug`, `type/enhancement`, `priority/high`, `priority/medium`, `status/needs-triage`, `status/in-progress` |
123
-
124
- ---
125
-
126
- ## Customization
127
-
128
- - Add project-specific components (e.g., `component/checkout`, `component/search`)
129
- - Add team labels (e.g., `team/qa`, `team/platform`)
130
- - Add sprint/release labels if not using milestones (e.g., `sprint/24-01`)
@@ -1,188 +0,0 @@
1
- # Structured Workflow Patterns for QA GitHub Issues
2
-
3
- *Workflow patterns: bug lifecycle, coverage gap → task → PR, flaky test → investigation → fix.*
4
-
5
- ---
6
-
7
- ## 1. Bug Lifecycle Workflow
8
-
9
- ```
10
- [Report] → [Triage] → [Fix] → [Verify] → [Close]
11
- ```
12
-
13
- ### States and Labels
14
-
15
- | Stage | Status Label | Actions |
16
- | ----- | ------------ | ------- |
17
- | **Report** | `status/needs-triage` | Create issue with `type/bug`; assign severity, component |
18
- | **Triage** | — | Confirm reproducibility; add `priority/*`; assign |
19
- | **Fix** | `status/in-progress` | Dev creates PR; link with "Fixes #N" |
20
- | **Verify** | `status/ready-for-test` | PR merged; QA runs verification tests |
21
- | **Close** | `status/verified` | QA confirms; close issue |
22
-
23
- ### Transitions
24
-
25
- 1. **Report → Triage**: Assignee reviews; adds `priority/critical` or `priority/high` if valid
26
- 2. **Triage → Fix**: Assign to dev; set `status/in-progress`
27
- 3. **Fix → Verify**: PR merged; auto or manual set `status/ready-for-test`
28
- 4. **Verify → Close**: QA passes verification; set `status/verified`; close
29
-
30
- ### Automation Hints
31
-
32
- - **GitHub Actions**: On PR merge with "Fixes #N", add `status/ready-for-test` to linked issue
33
- - **GitHub MCP**: When creating bug from test failure, auto-assign `type/bug`, `status/needs-triage`, `component/*`
34
-
35
- ---
36
-
37
- ## 2. Coverage Gap → Task → PR Workflow
38
-
39
- ```
40
- [Coverage Analyzer] → [Coverage Gap Issue] → [Fix Task] → [PR] → [Verify]
41
- ```
42
-
43
- ### Flow
44
-
45
- 1. **qa-coverage-analyzer** produces gap report (file:line, module, risk)
46
- 2. **qa-github-issues-enhanced** creates `type/test-coverage-gap` issue with:
47
- - Location (file:line)
48
- - Coverage type (code/requirement/technique)
49
- - Rationale (risk, complexity)
50
- - Suggested tests
51
- 3. **qa-task-creator** (or this skill) creates linked **fix task**:
52
- - Title: "Add tests for [module/function]"
53
- - Links to coverage gap issue
54
- - Labels: `type/task`, `component/unit` or `component/e2e`
55
- 4. Dev implements tests; opens PR referencing both issues
56
- 5. PR merged; coverage gap and task closed
57
-
58
- ### Issue Linking
59
-
60
- - Coverage gap issue: `#123`
61
- - Fix task: "Adds tests per #123" or "Closes #123"
62
- - PR: "Fixes #124" (fix task) — optionally "Addresses #123" (coverage gap)
63
-
64
- ### Bulk Creation
65
-
66
- When coverage analyzer outputs many gaps:
67
-
68
- 1. Group by component and priority
69
- 2. Create one issue per gap (or batch similar gaps into single issue)
70
- 3. Use bulk-create API; assign same milestone
71
- 4. Optionally create fix tasks in batch via qa-task-creator
72
-
73
- ---
74
-
75
- ## 3. Flaky Test → Investigation → Fix Workflow
76
-
77
- ```
78
- [Flaky Report] → [Investigation] → [Root Cause] → [Fix] → [Verify]
79
- ```
80
-
81
- ### Flow
82
-
83
- 1. **qa-flaky-detector** or manual report creates `type/flaky-test` issue
84
- 2. **Investigation**: Assign to dev/QA; add `status/in-progress`
85
- - Run test in loop; capture failure pattern
86
- - Classify: race-condition, shared-state, time-dependency, external-dependency
87
- 3. **Root cause**: Update issue with findings; create fix task if needed
88
- 4. **Fix**: Dev fixes test or code; PR with "Fixes #N"
89
- 5. **Verify**: Run test 50+ times in CI; confirm stability; close
90
-
91
- ### Labels by Pattern
92
-
93
- | Flaky Pattern | Suggested Labels | Fix Approach |
94
- | ------------- | ---------------- | ------------ |
95
- | race-condition | `type/flaky-test`, `component/e2e` | Add explicit waits; fix async ordering |
96
- | shared-state | `type/flaky-test`, `component/unit` | Isolate state; use fresh fixtures |
97
- | time-dependency | `type/flaky-test` | Mock time; use deterministic delays |
98
- | external-dependency | `type/flaky-test`, `component/integration` | Mock external service; retry with backoff |
99
-
100
- ### Sub-issues
101
-
102
- For complex flaky tests, create sub-tasks:
103
-
104
- - #201: Investigate flaky login test
105
- - #202: Add explicit wait for redirect (child)
106
- - #203: Verify stability in CI (child)
107
-
108
- ---
109
-
110
- ## 4. Spec Drift → Update Workflow
111
-
112
- ```
113
- [Spec Auditor] → [Spec Drift Issue] → [Update Task] → [PR] → [Verify]
114
- ```
115
-
116
- ### Flow
117
-
118
- 1. **qa-spec-auditor** finds mismatch (requirements vs implementation vs tests)
119
- 2. Create `type/documentation` or `spec-drift` issue:
120
- - What is drifted (requirement, spec, API contract)
121
- - Current vs expected state
122
- - Affected tests
123
- 3. Create update task: update spec, or fix implementation, or update tests
124
- 4. PR; verify spec-auditor passes
125
-
126
- ---
127
-
128
- ## 5. Bulk Operations Pattern
129
-
130
- ### Input Sources
131
-
132
- | Source | Output |
133
- | ------ | ------ |
134
- | qa-coverage-analyzer | Batch of coverage gap issues |
135
- | qa-spec-auditor | Batch of spec drift issues |
136
- | qa-flaky-detector | Batch of flaky test issues |
137
- | qa-changelog-analyzer | Batch of "recommended tests to run" tasks |
138
-
139
- ### Bulk Create Rules
140
-
141
- 1. **Deduplicate**: Search existing issues before creating; skip if similar exists
142
- 2. **Batch size**: Create in batches of 10–20 to avoid rate limits
143
- 3. **Milestone**: Assign same milestone to batch when provided
144
- 4. **Labels**: Apply consistent labels per batch type
145
- 5. **Throttle**: Add small delay between API calls if needed
146
-
147
- ---
148
-
149
- ## 6. Search and Deduplication
150
-
151
- ### Before Creating Any Issue
152
-
153
- 1. **Search** via GitHub MCP:
154
- - By title keywords (normalize: lowercase, remove punctuation)
155
- - By component + type
156
- - By error message snippet (for bugs)
157
- - By file:line (for coverage gaps)
158
- 2. **Compare**:
159
- - Same root cause? → Comment on existing; do not create
160
- - Related but distinct? → Create with "Related to #N"
161
- - Truly new? → Create
162
- 3. **Report**: If duplicate found, inform user and link to existing issue
163
-
164
- ### Search Query Examples
165
-
166
- ```
167
- # Bugs: similar title + component
168
- is:open label:type/bug "login" label:component/auth
169
-
170
- # Coverage: same file
171
- is:open label:type/test-coverage-gap "AuthService.ts"
172
-
173
- # Flaky: same test path
174
- is:open label:type/flaky-test "login.spec.ts"
175
- ```
176
-
177
- ---
178
-
179
- ## Integration Summary
180
-
181
- | Skill | Consumes | Produces |
182
- | ----- | -------- | -------- |
183
- | qa-github-issues-enhanced | Coverage gaps, spec drift, flaky reports, bug descriptions | Labeled issues, milestones, linked tasks |
184
- | qa-bug-ticket-creator | Test failures | Bug issues (uses this skill's labels/templates) |
185
- | qa-task-creator | Bug issues, coverage gaps | Fix/verification tasks |
186
- | qa-coverage-analyzer | Code, coverage reports | Coverage gap list |
187
- | qa-spec-auditor | Requirements, implementation, tests | Spec drift list |
188
- | qa-flaky-detector | CI history, test results | Flaky test list |
@@ -1,138 +0,0 @@
1
- ---
2
- name: qa-httpx-writer
3
- description: Generate httpx/requests API tests for Python with async support, session management, and schema validation using pytest.
4
- output_dir: tests/api
5
- dependencies:
6
- recommended:
7
- - qa-api-contract-curator
8
- ---
9
-
10
- # QA httpx Writer
11
-
12
- ## Purpose
13
-
14
- Write Python API tests using httpx (or requests) from test case specifications and API contracts. Transform structured test cases (from qa-testcase-from-docs, qa-manual-test-designer) and OpenAPI contracts (from qa-api-contract-curator) into executable pytest API tests with async support, session management, response schema validation, and authentication handling.
15
-
16
- ## Trigger Phrases
17
-
18
- - "Write httpx tests for [API/endpoint]"
19
- - "Generate Python API tests from OpenAPI contract"
20
- - "Create httpx API tests for [resource]"
21
- - "Add httpx tests with Pydantic validation"
22
- - "API tests with httpx.AsyncClient"
23
- - "Python API tests from test cases"
24
- - "httpx tests with auth and retry logic"
25
- - "requests API tests for [endpoint]"
26
-
27
- ## Key Features
28
-
29
- | Feature | Description |
30
- | ------- | ----------- |
31
- | **Async support** | `httpx.AsyncClient` for async tests; `httpx.Client` for sync |
32
- | **Session management** | Connection pooling, cookie persistence, header reuse |
33
- | **Response validation** | Pydantic models, JSON Schema for contract compliance |
34
- | **Authentication** | Bearer token, API key, OAuth2, Basic Auth, cookies |
35
- | **Retry logic** | Configurable retries for transient failures |
36
- | **Context managers** | `with httpx.Client()` / `async with httpx.AsyncClient()` |
37
-
38
- ## Workflow
39
-
40
- 1. **Read test cases + API contract** — From qa-testcase-from-docs, qa-manual-test-designer, or qa-api-contract-curator (OpenAPI)
41
- 2. **Generate pytest API test files** — Produce `test_{resource}_api.py` with test functions per endpoint
42
- 3. **Add fixtures** — `conftest.py` with `base_url`, client fixtures (sync/async)
43
- 4. **Validate responses** — Status codes, headers, JSON body; Pydantic/JSON Schema validation
44
-
45
- ## Context7 MCP
46
-
47
- Use **Context7 MCP** for httpx documentation when:
48
- - API signatures or async/sync usage are uncertain
49
- - Transport options, timeout, or retry configuration need verification
50
- - Response streaming or file upload APIs require clarification
51
-
52
- ## Key Patterns
53
-
54
- | Pattern | Usage |
55
- | ------- | ----- |
56
- | `httpx.Client()` | Sync client; use as context manager |
57
- | `httpx.AsyncClient()` | Async client; use with `async with` |
58
- | `response.status_code` | Assert HTTP status |
59
- | `response.json()` | Parse JSON body |
60
- | `response.headers` | Access response headers |
61
- | `client.get(url)` / `client.post(url)` | HTTP methods |
62
- | `client.get(url, headers=...)` | Custom headers (auth, etc.) |
63
- | Pydantic validation | `Model.model_validate(response.json())` |
64
- | pytest fixtures | `base_url`, `client`, `async_client` in conftest |
65
-
66
- See `references/patterns.md` for CRUD, auth, file upload, streaming, async.
67
-
68
- ## Test Structure
69
-
70
- - **conftest.py** — `base_url`, `client` (sync), `async_client` (async) fixtures
71
- - **test_{resource}_api.py** — One file per resource/endpoint group
72
- - **describe/it** equivalent — `class TestUsersAPI:` with `def test_*` methods
73
-
74
- ## Auth Patterns
75
-
76
- | Type | Usage |
77
- | ---- | ----- |
78
- | **Bearer token** | `headers={"Authorization": f"Bearer {token}"}` |
79
- | **API key** | `headers={"X-API-Key": api_key}` or `params={"api_key": key}` |
80
- | **OAuth2** | `httpx.OAuth2Client` or manual token in headers |
81
- | **Basic Auth** | `auth=httpx.BasicAuth(user, password)` |
82
- | **Cookies** | Session cookies via `client.cookies` or `headers={"Cookie": ...}` |
83
-
84
- ## File Naming
85
-
86
- - `test_{resource}_api.py` — e.g., `test_users_api.py`, `test_products_api.py`
87
- - Place in `tests/` or `tests/api/` per project convention
88
-
89
- ## Scope
90
-
91
- **Can do (autonomous):**
92
- - Generate httpx/requests API tests from test cases and OpenAPI contracts
93
- - Add conftest.py with base_url, client fixtures (sync/async)
94
- - Use Pydantic or JSON Schema for response validation
95
- - Implement auth patterns (Bearer, API key, Basic, cookies)
96
- - Add retry logic, timeout configuration
97
- - Call qa-api-contract-curator for contract when needed
98
- - Use Context7 MCP for httpx docs
99
-
100
- **Cannot do (requires confirmation):**
101
- - Change production API implementation
102
- - Add dependencies not in requirements.txt/pyproject.toml
103
- - Override project test config without approval
104
-
105
- **Will not do (out of scope):**
106
- - Execute tests (user runs `pytest`)
107
- - Write E2E browser tests (use qa-playwright-ts-writer)
108
- - Modify CI/CD pipelines
109
-
110
- ## References
111
-
112
- - `references/patterns.md` — CRUD, auth, file upload, streaming, async
113
- - `references/assertions.md` — Status codes, JSON body, headers, Pydantic/JSON Schema validation
114
- - `references/config.md` — conftest.py, fixtures, environment config, base URL
115
- - `references/best-practices.md` — Async vs sync, session reuse, schema validation, test isolation
116
-
117
- ## Quality Checklist
118
-
119
- - [ ] Tests match test case steps and expected results
120
- - [ ] Each endpoint has success and error scenarios (validation, 401, 404)
121
- - [ ] Auth setup is correct and isolated per test
122
- - [ ] No hardcoded secrets; use env vars or fixtures
123
- - [ ] Response assertions are specific (status, body shape, headers)
124
- - [ ] File naming follows `test_{resource}_api.py`
125
- - [ ] Client fixtures use context managers; proper teardown
126
- - [ ] Schema validation used where contract specifies response shape
127
-
128
- ## Troubleshooting
129
-
130
- | Symptom | Likely Cause | Fix |
131
- | ------- | ------------ | --- |
132
- | Connection refused | Wrong base_url or server not running | Verify `base_url` in conftest; ensure API is up |
133
- | Tests pass individually, fail together | Shared client state or connection pool | Use function-scoped client fixture; avoid session reuse across tests |
134
- | `response.json()` fails | Non-JSON response (204, HTML error) | Check `response.status_code`; use `response.text` for non-JSON |
135
- | Async tests fail | Missing pytest-asyncio | Add `@pytest.mark.asyncio`; install pytest-asyncio; set `asyncio_mode = "auto"` |
136
- | Auth not working | Token expired or wrong header | Check `Authorization` format; ensure token in scope |
137
- | Pydantic validation error | Response shape differs from model | Align model with API contract; use `model_validate` with `strict=False` if needed |
138
- | Timeout errors | Slow API or network | Increase `timeout` in client; add retry for transient failures |
@@ -1,195 +0,0 @@
1
- # httpx Response Validation
2
-
3
- ## Status Codes
4
-
5
- ```python
6
- response = client.get(f"{base_url}/users")
7
- assert response.status_code == 200
8
-
9
- response = client.post(f"{base_url}/users", json={...})
10
- assert response.status_code == 201
11
-
12
- response = client.delete(f"{base_url}/users/1")
13
- assert response.status_code == 204
14
-
15
- response = client.get(f"{base_url}/users/99999")
16
- assert response.status_code == 404
17
-
18
- response = client.get(f"{base_url}/users") # No auth
19
- assert response.status_code == 401
20
-
21
- response = client.post(f"{base_url}/users", json={"email": "invalid"})
22
- assert response.status_code == 400
23
- ```
24
-
25
- | Code | Typical Use |
26
- | ---- | ----------- |
27
- | 200 | OK — GET, PUT, PATCH success |
28
- | 201 | Created — POST success |
29
- | 204 | No Content — DELETE success |
30
- | 400 | Bad Request — validation error |
31
- | 401 | Unauthorized — missing/invalid auth |
32
- | 403 | Forbidden — insufficient permissions |
33
- | 404 | Not Found — resource missing |
34
- | 409 | Conflict — duplicate, constraint violation |
35
- | 422 | Unprocessable Entity — semantic validation |
36
- | 500 | Internal Server Error |
37
-
38
- ## JSON Body Assertions
39
-
40
- ### Basic Checks
41
-
42
- ```python
43
- data = response.json()
44
- assert "users" in data
45
- assert isinstance(data["users"], list)
46
- assert len(data["users"]) > 0
47
- ```
48
-
49
- ### Partial Match (Dynamic Fields)
50
-
51
- ```python
52
- # Use dict subset for id, createdAt, etc.
53
- user = response.json()
54
- assert user["email"] == "test@example.com"
55
- assert "id" in user
56
- assert isinstance(user["id"], int)
57
- ```
58
-
59
- ### Nested Structure
60
-
61
- ```python
62
- data = response.json()
63
- assert "data" in data
64
- assert "items" in data["data"]
65
- assert all("id" in item for item in data["data"]["items"])
66
- ```
67
-
68
- ## Header Assertions
69
-
70
- ```python
71
- assert "application/json" in response.headers.get("content-type", "")
72
- assert "x-request-id" in response.headers
73
- assert response.headers["cache-control"] == "no-cache"
74
- ```
75
-
76
- ## Schema Validation with Pydantic
77
-
78
- ### Define Model
79
-
80
- ```python
81
- from pydantic import BaseModel
82
-
83
- class UserResponse(BaseModel):
84
- id: int
85
- email: str
86
- name: str | None = None
87
- ```
88
-
89
- ### Validate Response
90
-
91
- ```python
92
- def test_user_response_schema(client, base_url, auth_headers):
93
- response = client.get(f"{base_url}/users/1", headers=auth_headers)
94
- assert response.status_code == 200
95
- user = UserResponse.model_validate(response.json())
96
- assert user.id == 1
97
- assert "@" in user.email
98
- ```
99
-
100
- ### List Response
101
-
102
- ```python
103
- class UserListResponse(BaseModel):
104
- users: list[UserResponse]
105
- total: int
106
-
107
- def test_user_list_schema(client, base_url, auth_headers):
108
- response = client.get(f"{base_url}/users", headers=auth_headers)
109
- assert response.status_code == 200
110
- data = UserListResponse.model_validate(response.json())
111
- assert isinstance(data.users, list)
112
- assert data.total >= 0
113
- ```
114
-
115
- ### ValidationError Handling
116
-
117
- ```python
118
- from pydantic import ValidationError
119
-
120
- def test_invalid_response_raises(client, base_url):
121
- response = client.get(f"{base_url}/broken")
122
- assert response.status_code == 200
123
- with pytest.raises(ValidationError):
124
- UserResponse.model_validate(response.json())
125
- ```
126
-
127
- ## JSON Schema Validation
128
-
129
- ```python
130
- import jsonschema
131
-
132
- USER_SCHEMA = {
133
- "type": "object",
134
- "required": ["id", "email"],
135
- "properties": {
136
- "id": {"type": "integer"},
137
- "email": {"type": "string", "format": "email"},
138
- "name": {"type": "string"},
139
- },
140
- }
141
-
142
- def test_user_json_schema(client, base_url, auth_headers):
143
- response = client.get(f"{base_url}/users/1", headers=auth_headers)
144
- assert response.status_code == 200
145
- jsonschema.validate(response.json(), USER_SCHEMA)
146
- ```
147
-
148
- ## Content-Type Check
149
-
150
- ```python
151
- def test_json_response(client, base_url):
152
- response = client.get(f"{base_url}/users")
153
- assert response.status_code == 200
154
- content_type = response.headers.get("content-type", "")
155
- assert "application/json" in content_type
156
- # Only then parse JSON
157
- data = response.json()
158
- ```
159
-
160
- ## Empty Response (204)
161
-
162
- ```python
163
- def test_delete_returns_empty(client, base_url, auth_headers):
164
- response = client.delete(f"{base_url}/users/1", headers=auth_headers)
165
- assert response.status_code == 204
166
- assert response.content == b""
167
- # Do not call response.json() on 204
168
- ```
169
-
170
- ## Error Response Structure
171
-
172
- ```python
173
- def test_validation_error_structure(client, base_url):
174
- response = client.post(f"{base_url}/users", json={})
175
- assert response.status_code == 400
176
- data = response.json()
177
- assert "errors" in data or "message" in data
178
- if "errors" in data:
179
- assert isinstance(data["errors"], list)
180
- ```
181
-
182
- ## Parametrized Assertions
183
-
184
- ```python
185
- @pytest.mark.parametrize("status,expected", [
186
- (200, True),
187
- (201, True),
188
- (400, False),
189
- (404, False),
190
- ])
191
- def test_status_codes(client, base_url, status, expected):
192
- # Adjust endpoint to trigger each status
193
- response = client.get(f"{base_url}/users")
194
- assert (response.status_code == status) == expected
195
- ```