qa-flowkit 0.4.0-alpha.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 (149) hide show
  1. package/.qa-ai/adapters/aider/.aider/README.md +25 -0
  2. package/.qa-ai/adapters/aider/.aider.conf.yml +6 -0
  3. package/.qa-ai/adapters/claude/agents/qa-workflow-orchestrator.md +18 -0
  4. package/.qa-ai/adapters/claude/commands/qa-add-tests.md +42 -0
  5. package/.qa-ai/adapters/claude/commands/qa-automation-plan.md +43 -0
  6. package/.qa-ai/adapters/claude/commands/qa-clean.md +42 -0
  7. package/.qa-ai/adapters/claude/commands/qa-config.md +51 -0
  8. package/.qa-ai/adapters/claude/commands/qa-coverage.md +46 -0
  9. package/.qa-ai/adapters/claude/commands/qa-doctor.md +11 -0
  10. package/.qa-ai/adapters/claude/commands/qa-full-flow.md +59 -0
  11. package/.qa-ai/adapters/claude/commands/qa-gate.md +36 -0
  12. package/.qa-ai/adapters/claude/commands/qa-help.md +30 -0
  13. package/.qa-ai/adapters/claude/commands/qa-init.md +70 -0
  14. package/.qa-ai/adapters/claude/commands/qa-status.md +56 -0
  15. package/.qa-ai/adapters/claude/commands/qa-update-tests.md +47 -0
  16. package/.qa-ai/adapters/claude/commands/qa-validate-features.md +36 -0
  17. package/.qa-ai/adapters/cline/.cline/README.md +25 -0
  18. package/.qa-ai/adapters/cline/.clinerules +9 -0
  19. package/.qa-ai/adapters/codex/README.md +44 -0
  20. package/.qa-ai/adapters/codex/prompts/implement-project.md +15 -0
  21. package/.qa-ai/adapters/continue/README.md +26 -0
  22. package/.qa-ai/adapters/continue/checks/qa-feature-conventions.md +15 -0
  23. package/.qa-ai/adapters/gemini/GEMINI.md +40 -0
  24. package/.qa-ai/adapters/generic/AGENTS.md +100 -0
  25. package/.qa-ai/adapters/goose/recipes/qa-flowkit.yaml +20 -0
  26. package/.qa-ai/adapters/opencode/README.md +57 -0
  27. package/.qa-ai/adapters/opencode/agents/qa-workflow.md +18 -0
  28. package/.qa-ai/adapters/opencode/commands/qa-add-tests.md +42 -0
  29. package/.qa-ai/adapters/opencode/commands/qa-automation-plan.md +43 -0
  30. package/.qa-ai/adapters/opencode/commands/qa-clean.md +42 -0
  31. package/.qa-ai/adapters/opencode/commands/qa-config.md +51 -0
  32. package/.qa-ai/adapters/opencode/commands/qa-coverage.md +46 -0
  33. package/.qa-ai/adapters/opencode/commands/qa-doctor.md +13 -0
  34. package/.qa-ai/adapters/opencode/commands/qa-full-flow.md +59 -0
  35. package/.qa-ai/adapters/opencode/commands/qa-gate.md +36 -0
  36. package/.qa-ai/adapters/opencode/commands/qa-help.md +30 -0
  37. package/.qa-ai/adapters/opencode/commands/qa-init.md +70 -0
  38. package/.qa-ai/adapters/opencode/commands/qa-status.md +56 -0
  39. package/.qa-ai/adapters/opencode/commands/qa-update-tests.md +47 -0
  40. package/.qa-ai/adapters/opencode/commands/qa-validate-features.md +36 -0
  41. package/.qa-ai/agents/README.md +39 -0
  42. package/.qa-ai/agents/api-testing-agent.md +73 -0
  43. package/.qa-ai/agents/automation-feasibility-agent.md +128 -0
  44. package/.qa-ai/agents/gherkin-test-design-agent.md +110 -0
  45. package/.qa-ai/agents/jira-task-agent.md +92 -0
  46. package/.qa-ai/agents/pr-agent.md +101 -0
  47. package/.qa-ai/agents/qa-context-intake-agent.md +75 -0
  48. package/.qa-ai/agents/qa-workflow-orchestrator.md +113 -0
  49. package/.qa-ai/agents/release-gate-agent.md +50 -0
  50. package/.qa-ai/agents/requirements-intake-agent.md +79 -0
  51. package/.qa-ai/agents/requirements-normalization-agent.md +80 -0
  52. package/.qa-ai/agents/specialists/available/appium.md +59 -0
  53. package/.qa-ai/agents/specialists/available/cypress.md +68 -0
  54. package/.qa-ai/agents/specialists/available/generic-test-design.md +117 -0
  55. package/.qa-ai/agents/specialists/available/jira.md +108 -0
  56. package/.qa-ai/agents/specialists/available/karate.md +97 -0
  57. package/.qa-ai/agents/specialists/available/playwright-api.md +87 -0
  58. package/.qa-ai/agents/specialists/available/playwright-ui.md +87 -0
  59. package/.qa-ai/agents/specialists/available/postman.md +108 -0
  60. package/.qa-ai/agents/specialists/available/rest-assured.md +103 -0
  61. package/.qa-ai/agents/specialists/available/selenium.md +91 -0
  62. package/.qa-ai/agents/specialists/available/testrail.md +85 -0
  63. package/.qa-ai/agents/specialists/available/webdriverio.md +81 -0
  64. package/.qa-ai/agents/test-design-system-agent.md +33 -0
  65. package/.qa-ai/agents/testrail-coverage-agent.md +84 -0
  66. package/.qa-ai/agents/testrail-sync-agent.md +96 -0
  67. package/.qa-ai/agents/webdriverio-implementation-agent.md +84 -0
  68. package/.qa-ai/presets/manual-only.yaml +65 -0
  69. package/.qa-ai/presets/selenium-jest-browserstack.yaml +72 -0
  70. package/.qa-ai/presets/webdriverio-playwright-api.yaml +85 -0
  71. package/.qa-ai/rules/api-testing.rules.md +7 -0
  72. package/.qa-ai/rules/approval.rules.md +8 -0
  73. package/.qa-ai/rules/automation.rules.md +7 -0
  74. package/.qa-ai/rules/gherkin.rules.md +12 -0
  75. package/.qa-ai/rules/testrail.rules.md +10 -0
  76. package/.qa-ai/rules/webdriverio.rules.md +9 -0
  77. package/.qa-ai/scripts/bootstrap-agent-adapters.mjs +127 -0
  78. package/.qa-ai/scripts/clean.mjs +243 -0
  79. package/.qa-ai/scripts/config.mjs +202 -0
  80. package/.qa-ai/scripts/doctor.mjs +383 -0
  81. package/.qa-ai/scripts/init.mjs +447 -0
  82. package/.qa-ai/scripts/lib/markdown-table.mjs +76 -0
  83. package/.qa-ai/scripts/lib/project-config.mjs +184 -0
  84. package/.qa-ai/scripts/lib/qa-next-steps.mjs +578 -0
  85. package/.qa-ai/scripts/lib/release-gate.mjs +66 -0
  86. package/.qa-ai/scripts/lib/test-design.mjs +92 -0
  87. package/.qa-ai/scripts/lib/test-management-mapping.mjs +73 -0
  88. package/.qa-ai/scripts/lib/utils.mjs +331 -0
  89. package/.qa-ai/scripts/qa-help.mjs +44 -0
  90. package/.qa-ai/scripts/smoke-npm-pack.mjs +187 -0
  91. package/.qa-ai/scripts/smoke-test.mjs +465 -0
  92. package/.qa-ai/scripts/sync-agent-adapters.mjs +121 -0
  93. package/.qa-ai/scripts/test-validators.mjs +334 -0
  94. package/.qa-ai/scripts/validate-active-specialists.mjs +106 -0
  95. package/.qa-ai/scripts/validate-features.mjs +277 -0
  96. package/.qa-ai/scripts/validate-release-gate.mjs +105 -0
  97. package/.qa-ai/scripts/validate-sync-plan.mjs +186 -0
  98. package/.qa-ai/scripts/validate-target.mjs +104 -0
  99. package/.qa-ai/scripts/validate-test-design.mjs +117 -0
  100. package/.qa-ai/scripts/validate-traceability.mjs +183 -0
  101. package/.qa-ai/templates/automation-feasibility-report.template.md +21 -0
  102. package/.qa-ai/templates/automation-implementation-plan.template.md +23 -0
  103. package/.qa-ai/templates/feature.template +13 -0
  104. package/.qa-ai/templates/jira-automation-task.template.md +25 -0
  105. package/.qa-ai/templates/pr-template.md +60 -0
  106. package/.qa-ai/templates/release-gate.template.yaml +16 -0
  107. package/.qa-ai/templates/requirement-analysis.template.md +17 -0
  108. package/.qa-ai/templates/test-design-proposal.template.md +26 -0
  109. package/.qa-ai/templates/test-design-system.template.md +15 -0
  110. package/.qa-ai/templates/test-management-mapping.template.json +18 -0
  111. package/.qa-ai/templates/testrail-coverage-analysis.template.md +17 -0
  112. package/.qa-ai/templates/testrail-sync-plan.template.md +22 -0
  113. package/.qa-ai/templates/traceability-matrix.template.md +4 -0
  114. package/.qa-ai/workflows/automation-analysis.md +23 -0
  115. package/.qa-ai/workflows/cleanup.md +52 -0
  116. package/.qa-ai/workflows/context-intake.md +66 -0
  117. package/.qa-ai/workflows/full-flow.md +55 -0
  118. package/.qa-ai/workflows/implementation.md +24 -0
  119. package/.qa-ai/workflows/intake.md +3 -0
  120. package/.qa-ai/workflows/pr.md +3 -0
  121. package/.qa-ai/workflows/release-gate.md +22 -0
  122. package/.qa-ai/workflows/test-design-system.md +33 -0
  123. package/.qa-ai/workflows/test-design.md +23 -0
  124. package/.qa-ai/workflows/testrail-sync.md +23 -0
  125. package/CHANGELOG.md +108 -0
  126. package/CODE_OF_CONDUCT.md +11 -0
  127. package/CONTRIBUTING.md +39 -0
  128. package/LICENSE +21 -0
  129. package/README.es.md +602 -0
  130. package/README.md +633 -0
  131. package/ROADMAP.md +107 -0
  132. package/SECURITY.md +18 -0
  133. package/bin/qa-flowkit.mjs +214 -0
  134. package/docs/qa-ai/agent-compatibility.md +100 -0
  135. package/docs/qa-ai/architecture.md +130 -0
  136. package/docs/qa-ai/backlog.md +393 -0
  137. package/docs/qa-ai/cleanup.md +104 -0
  138. package/docs/qa-ai/customizing-agents.md +148 -0
  139. package/docs/qa-ai/getting-started.md +385 -0
  140. package/docs/qa-ai/implementation-guide-for-codex.md +210 -0
  141. package/docs/qa-ai/npm-migration-plan.md +50 -0
  142. package/docs/qa-ai/open-source-release-checklist.md +17 -0
  143. package/docs/qa-ai/qa-help.md +76 -0
  144. package/docs/qa-ai/release-gate.md +60 -0
  145. package/docs/qa-ai/terminal-transcripts.md +316 -0
  146. package/docs/qa-ai/test-design-dual-mode.md +75 -0
  147. package/docs/qa-ai/troubleshooting.md +740 -0
  148. package/docs/qa-ai/workflow.md +147 -0
  149. package/package.json +72 -0
@@ -0,0 +1,740 @@
1
+ # Troubleshooting
2
+
3
+ Common failures and their resolutions, organized by area.
4
+
5
+ - [Init](#init)
6
+ - [Doctor](#doctor)
7
+ - [Feature validation](#feature-validation)
8
+ - [Traceability validation](#traceability-validation)
9
+ - [Sync plan validation](#sync-plan-validation)
10
+ - [CI](#ci)
11
+ - [Agent and adapter issues](#agent-and-adapter-issues)
12
+
13
+ ---
14
+
15
+ ## Init
16
+
17
+ ### `Cannot find module` or `SyntaxError` when running `init.mjs`
18
+
19
+ **Symptom**
20
+
21
+ ```
22
+ Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'yaml' imported from ...
23
+ ```
24
+
25
+ **Cause**
26
+
27
+ A third-party dependency was accidentally imported. QA FlowKit uses only native Node.js APIs.
28
+
29
+ **Fix**
30
+
31
+ Check that you are running Node.js 20 or later:
32
+
33
+ ```bash
34
+ node --version
35
+ ```
36
+
37
+ If the version is correct, verify that the `.qa-ai/` folder was copied intact from the source repository and that no `node_modules` installs have modified the scripts.
38
+
39
+ ---
40
+
41
+ ### `Error: path must stay inside the repository`
42
+
43
+ **Symptom**
44
+
45
+ ```
46
+ Error: path must stay inside the repository: ../traceability.md (label: traceability matrix)
47
+ ```
48
+
49
+ **Cause**
50
+
51
+ A config value or `--set` flag points to a path outside the repository root. QA FlowKit rejects all paths that resolve above the current working directory.
52
+
53
+ **Fix**
54
+
55
+ Use only repository-relative paths. For example:
56
+
57
+ ```bash
58
+ # Wrong
59
+ node .qa-ai/scripts/init.mjs --set traceability.matrixPath=../traceability.md
60
+
61
+ # Correct
62
+ node .qa-ai/scripts/init.mjs --set traceability.matrixPath=qa-ai-output/traceability-matrix.md
63
+ ```
64
+
65
+ The same restriction applies to `--qa-context`. The context folder must be inside the repository:
66
+
67
+ ```bash
68
+ # Wrong
69
+ node .qa-ai/scripts/init.mjs --qa-context ../qa-knowledge
70
+
71
+ # Correct
72
+ node .qa-ai/scripts/init.mjs --qa-context qa-ai-knowledge
73
+ ```
74
+
75
+ ---
76
+
77
+ ### Init skips a file that should have been updated
78
+
79
+ **Symptom**
80
+
81
+ Init runs without errors but a generated file still has old content.
82
+
83
+ **Cause**
84
+
85
+ `init.mjs` never overwrites existing files by default.
86
+
87
+ **Fix**
88
+
89
+ Pass `--force` to allow overwriting:
90
+
91
+ ```bash
92
+ node .qa-ai/scripts/init.mjs --force
93
+ ```
94
+
95
+ Or delete the specific file and re-run without `--force`.
96
+
97
+ ---
98
+
99
+ ### `qa-ai.config.yaml` was not created
100
+
101
+ **Symptom**
102
+
103
+ Init completes but `qa-ai.config.yaml` does not exist.
104
+
105
+ **Cause**
106
+
107
+ Most commonly the script was run from the wrong directory. `init.mjs` writes to the current working directory.
108
+
109
+ **Fix**
110
+
111
+ Verify you are running the script from the target repository root:
112
+
113
+ ```bash
114
+ # Should show the target repo root
115
+ pwd # Unix
116
+ cd # PowerShell
117
+
118
+ node .qa-ai/scripts/init.mjs
119
+ ```
120
+
121
+ ---
122
+
123
+ ## Doctor
124
+
125
+ ### `[FAIL] config: qa-ai.config.yaml`
126
+
127
+ **Symptom**
128
+
129
+ ```
130
+ [FAIL] config: qa-ai.config.yaml
131
+ FAILED - 1 required checks failed
132
+ ```
133
+
134
+ **Cause**
135
+
136
+ `qa-ai.config.yaml` does not exist. Doctor requires it in initialized target repositories and in strict mode.
137
+
138
+ **Fix**
139
+
140
+ Run init first:
141
+
142
+ ```bash
143
+ node .qa-ai/scripts/init.mjs
144
+ ```
145
+
146
+ If you are running doctor against the framework source repository (not a target repo), this is a warning, not a failure. The source repo detection relies on the presence of `docs/qa-ai/architecture.md`.
147
+
148
+ ---
149
+
150
+ ### `[FAIL] configured feature root` or `[FAIL] configured UI specs path`
151
+
152
+ **Symptom**
153
+
154
+ ```
155
+ [FAIL] configured feature root: features
156
+ [FAIL] configured UI specs path: tests/wdio/specs
157
+ ```
158
+
159
+ **Cause**
160
+
161
+ The folders configured in `qa-ai.config.yaml` do not exist. Doctor checks that init created them.
162
+
163
+ **Fix**
164
+
165
+ Re-run init to create the missing folders:
166
+
167
+ ```bash
168
+ node .qa-ai/scripts/init.mjs
169
+ ```
170
+
171
+ If the paths in config do not match your actual repository structure, update `qa-ai.config.yaml` directly or re-run init with the correct overrides:
172
+
173
+ ```bash
174
+ node .qa-ai/scripts/init.mjs --ui-specs-path tests/e2e/specs --force
175
+ ```
176
+
177
+ ---
178
+
179
+ ### `[FAIL] active specialists index: .qa-ai/agents/specialists/active.md`
180
+
181
+ **Symptom**
182
+
183
+ ```
184
+ [FAIL] active specialists index: .qa-ai/agents/specialists/active.md
185
+ ```
186
+
187
+ **Cause**
188
+
189
+ `qa-ai.config.yaml` exists but `active.md` was not generated. This file is created by `init.mjs` or `config.mjs --import`.
190
+
191
+ **Fix**
192
+
193
+ ```bash
194
+ node .qa-ai/scripts/init.mjs --force
195
+ ```
196
+
197
+ Or import a config profile which also refreshes the active specialist index:
198
+
199
+ ```bash
200
+ node .qa-ai/scripts/config.mjs --import .qa-ai/config-profiles/team.yaml
201
+ ```
202
+
203
+ ---
204
+
205
+ ### `[WARN]` for optional adapters (`.codex`, `.claude`, etc.)
206
+
207
+ **Symptom**
208
+
209
+ ```
210
+ [WARN] Codex adapter: .codex
211
+ [WARN] Cline rules: .clinerules
212
+ ```
213
+
214
+ **Cause**
215
+
216
+ These adapters were not generated during init. They are optional.
217
+
218
+ **Fix**
219
+
220
+ This is expected if you did not request those adapters. Generate them when needed:
221
+
222
+ ```bash
223
+ node .qa-ai/scripts/sync-agent-adapters.mjs --adapters codex,cline
224
+ ```
225
+
226
+ Or regenerate all adapters:
227
+
228
+ ```bash
229
+ node .qa-ai/scripts/sync-agent-adapters.mjs --adapters all
230
+ ```
231
+
232
+ ---
233
+
234
+ ### `[WARN]` for framework config files (`wdio.conf.js`, `playwright.config.js`)
235
+
236
+ **Symptom**
237
+
238
+ ```
239
+ [WARN] WebdriverIO config: wdio.conf.ts or wdio.conf.js or wdio.conf.mjs or wdio.conf.cjs
240
+ ```
241
+
242
+ **Cause**
243
+
244
+ The automation framework is configured in `qa-ai.config.yaml` but the corresponding config file does not yet exist in the repository. This is normal for new repositories.
245
+
246
+ **Fix**
247
+
248
+ Create the automation framework config file as part of your normal project setup. Doctor will then pass for that check. If you are using a different file name, verify the framework value in `qa-ai.config.yaml` matches your actual setup.
249
+
250
+ ---
251
+
252
+ ### Doctor fails in strict mode after a successful normal run
253
+
254
+ **Symptom**
255
+
256
+ ```
257
+ node .qa-ai/scripts/doctor.mjs # passes
258
+ node .qa-ai/scripts/doctor.mjs --strict # fails
259
+ ```
260
+
261
+ **Cause**
262
+
263
+ Strict mode promotes optional workflow artifact checks to required. If configured artifacts like `qa-ai-output/traceability-matrix.md` or `qa-ai-output/requirement-analysis.md` do not yet exist, they become failures.
264
+
265
+ **Fix**
266
+
267
+ Strict mode is intended for target repositories that have already run at least one complete QA flow. Do not use it until workflow artifacts exist. For an incomplete repository use:
268
+
269
+ ```bash
270
+ node .qa-ai/scripts/validate-target.mjs --allow-empty --allow-missing --no-strict-doctor
271
+ ```
272
+
273
+ ---
274
+
275
+ ## Feature validation
276
+
277
+ ### `FAILED - no feature files found`
278
+
279
+ **Symptom**
280
+
281
+ ```
282
+ No .feature files found under features.
283
+ FAILED - no feature files found. Pass --allow-empty when this is expected.
284
+ ```
285
+
286
+ **Cause**
287
+
288
+ The feature folder is empty or the configured `gherkin.featurePath` points to a folder that does not contain `.feature` files.
289
+
290
+ **Fix**
291
+
292
+ If you have not yet generated any feature files, use `--allow-empty` for source-repo CI or early-stage repositories:
293
+
294
+ ```bash
295
+ node .qa-ai/scripts/validate-features.mjs --allow-empty
296
+ ```
297
+
298
+ If features should exist, verify the path in `qa-ai.config.yaml` matches where the agent created them.
299
+
300
+ ---
301
+
302
+ ### `Missing Acceptance Criteria` or `Missing Criterios de aceptación`
303
+
304
+ **Symptom**
305
+
306
+ ```
307
+ [FAIL] features/RF-101-TC-001-login.feature
308
+ - Missing Acceptance Criteria.
309
+ ```
310
+
311
+ **Cause**
312
+
313
+ The feature file does not include the acceptance criteria block immediately after the Feature narrative. The expected label is `Acceptance Criteria:` for English or `Criterios de aceptación:` for Spanish.
314
+
315
+ **Fix**
316
+
317
+ Add the acceptance criteria block:
318
+
319
+ ```gherkin
320
+ Feature: RF-101 Login
321
+
322
+ Acceptance Criteria:
323
+ - User can sign in with valid credentials.
324
+
325
+ Scenario: RF-101 TC-001 Valid login
326
+ ...
327
+ ```
328
+
329
+ ---
330
+
331
+ ### `Expected exactly one Feature title, found 0` or `found 2`
332
+
333
+ **Symptom**
334
+
335
+ ```
336
+ - Expected exactly one Feature title, found 0.
337
+ - Expected exactly one Scenario, found 2.
338
+ ```
339
+
340
+ **Cause**
341
+
342
+ The file has no `Feature:` keyword, or it has more than one `Scenario:` block. QA FlowKit requires one scenario per file.
343
+
344
+ **Fix**
345
+
346
+ - If the Feature keyword is missing, add it.
347
+ - If there are multiple scenarios, split them into separate `.feature` files, one per test case.
348
+
349
+ ---
350
+
351
+ ### `Missing required tag value @priority:<value>`
352
+
353
+ **Symptom**
354
+
355
+ ```
356
+ - Missing required tag value @priority:<value>
357
+ - Missing required tag value @type:<value>
358
+ - Missing required tag value @manual:<value>
359
+ ```
360
+
361
+ **Cause**
362
+
363
+ One or more required tags are missing or present without a value (e.g. `@priority` without `:high`).
364
+
365
+ **Fix**
366
+
367
+ Add all required tags on the line before the Feature keyword:
368
+
369
+ ```gherkin
370
+ @priority:high @type:functional @manual:false
371
+ Feature: RF-101 Login
372
+ ```
373
+
374
+ ---
375
+
376
+ ### `Feature title does not contain an RF-like ID`
377
+
378
+ **Symptom**
379
+
380
+ ```
381
+ - Feature title does not contain an RF-like ID.
382
+ - Scenario title does not contain an RF-like ID.
383
+ - Feature filename does not contain an RF-like ID.
384
+ ```
385
+
386
+ **Cause**
387
+
388
+ The RF identifier (e.g. `RF-101`) is missing from the Feature title, Scenario title or filename. The validator looks for a pattern matching `RF-<alphanumeric>`.
389
+
390
+ **Fix**
391
+
392
+ Include the RF ID in all three places:
393
+
394
+ ```
395
+ # Filename
396
+ RF-101-TC-001-login.feature
397
+
398
+ # File content
399
+ Feature: RF-101 Login
400
+ Scenario: RF-101 TC-001 Valid login
401
+ ```
402
+
403
+ ---
404
+
405
+ ### `Spanish Gherkin files must declare "# language: es"`
406
+
407
+ **Symptom**
408
+
409
+ ```
410
+ - Spanish Gherkin files must declare "# language: es".
411
+ ```
412
+
413
+ **Cause**
414
+
415
+ `gherkin.language` is configured as `es` but the file does not include the language directive on the first line.
416
+
417
+ **Fix**
418
+
419
+ Add the directive as the first line of the file:
420
+
421
+ ```gherkin
422
+ # language: es
423
+ @priority:alta @type:funcional @manual:false
424
+ Característica: RF-101 Login
425
+ ```
426
+
427
+ ---
428
+
429
+ ### `Duplicate test case identifier TC-001 appears in: ...`
430
+
431
+ **Symptom**
432
+
433
+ ```
434
+ [FAIL] Duplicate identifier validation
435
+ - Duplicate test case identifier TC-001 appears in: features/RF-101-TC-001-login.feature, features/RF-101-TC-001-duplicate.feature
436
+ ```
437
+
438
+ **Cause**
439
+
440
+ Two or more feature files reference the same test case ID either in the filename or in a `@id:`, `@test:` or `@case:` tag.
441
+
442
+ **Fix**
443
+
444
+ Assign unique test case IDs. Each feature file must have a distinct identifier.
445
+
446
+ ---
447
+
448
+ ## Traceability validation
449
+
450
+ ### `Traceability matrix not found`
451
+
452
+ **Symptom**
453
+
454
+ ```
455
+ Traceability matrix not found at qa-ai-output/traceability-matrix.md.
456
+ FAILED - create the traceability matrix or pass --allow-missing.
457
+ ```
458
+
459
+ **Cause**
460
+
461
+ The traceability matrix artifact has not been generated yet.
462
+
463
+ **Fix**
464
+
465
+ If the matrix does not exist yet, use `--allow-missing`:
466
+
467
+ ```bash
468
+ node .qa-ai/scripts/validate-traceability.mjs --allow-missing
469
+ ```
470
+
471
+ Once the QA flow has generated `qa-ai-output/traceability-matrix.md`, remove the flag so CI catches missing coverage.
472
+
473
+ ---
474
+
475
+ ### `identifier RF-101 is missing from qa-ai-output/traceability-matrix.md`
476
+
477
+ **Symptom**
478
+
479
+ ```
480
+ [FAIL] features/RF-101-TC-001-login.feature identifier RF-101 is missing from qa-ai-output/traceability-matrix.md.
481
+ ```
482
+
483
+ **Cause**
484
+
485
+ A feature file contains an RF/test identifier that does not appear anywhere in the traceability matrix.
486
+
487
+ **Fix**
488
+
489
+ Add the missing identifier to the matrix. Each feature file must have at least one row in the matrix that includes its RF ID. Run the QA flow again to regenerate or update the matrix, or add the row manually.
490
+
491
+ ---
492
+
493
+ ### `Traceability matrix: missing required columns`
494
+
495
+ **Symptom**
496
+
497
+ ```
498
+ [FAIL] Traceability matrix: missing required columns: Feature File, Test Management Case ID
499
+ ```
500
+
501
+ **Cause**
502
+
503
+ The matrix Markdown table is missing one or more required columns. The required columns are: `Requirement Source`, `RF`, `Feature File`, `Test Management Case ID`, `Type`, `Priority`, `Automation Status`.
504
+
505
+ **Fix**
506
+
507
+ Ensure the matrix table header includes all required columns. Use the template at `.qa-ai/templates/traceability-matrix.template.md` as reference.
508
+
509
+ ---
510
+
511
+ ### `Identifier TC-001 appears in multiple traceability rows`
512
+
513
+ **Symptom**
514
+
515
+ ```
516
+ [FAIL] Identifier TC-001 appears in multiple traceability rows: 5, 6.
517
+ ```
518
+
519
+ **Cause**
520
+
521
+ The same test case ID appears in more than one row of the traceability matrix.
522
+
523
+ **Fix**
524
+
525
+ Remove the duplicate row or assign distinct IDs to each test case.
526
+
527
+ ---
528
+
529
+ ## Sync plan validation
530
+
531
+ ### `Sync plan claims an external write already happened`
532
+
533
+ **Symptom**
534
+
535
+ ```
536
+ [FAIL] Row TC-001: action appears to claim an external write was already performed: "Created in TestRail".
537
+ ```
538
+
539
+ **Cause**
540
+
541
+ The sync plan contains language that describes a past write (e.g. "Created in TestRail", "Updated in TestRail", "Synced"). QA FlowKit sync plans must be proposal-first: all actions must be described as pending proposals, not completed writes.
542
+
543
+ **Fix**
544
+
545
+ Change the action language to a proposal form:
546
+
547
+ ```
548
+ # Wrong
549
+ TC-001 | Created in TestRail | Done
550
+
551
+ # Correct
552
+ TC-001 | Propose create | Pending approval
553
+ ```
554
+
555
+ ---
556
+
557
+ ### `Sync plan: missing approval reference`
558
+
559
+ **Symptom**
560
+
561
+ ```
562
+ [FAIL] Sync plan does not mention approval or approval-pending language.
563
+ ```
564
+
565
+ **Cause**
566
+
567
+ The sync plan document does not include the word "approval" or equivalent language. QA FlowKit requires an explicit approval gate before any external write.
568
+
569
+ **Fix**
570
+
571
+ Include an approval statement in the document preamble:
572
+
573
+ ```markdown
574
+ Approval is required before any external write.
575
+ ```
576
+
577
+ ---
578
+
579
+ ### `Duplicate external ID in test management mapping`
580
+
581
+ **Symptom**
582
+
583
+ ```
584
+ [FAIL] Duplicate externalId C123 in test-management-mapping.json entries: TC-001, TC-002
585
+ ```
586
+
587
+ **Cause**
588
+
589
+ Two or more mapping entries share the same `externalId`. Each external test management case ID must map to exactly one local identifier.
590
+
591
+ **Fix**
592
+
593
+ Check the mapping file and assign unique `externalId` values to each entry.
594
+
595
+ ---
596
+
597
+ ## CI
598
+
599
+ ### `npm run validate:oss-extraction` fails with a validator error
600
+
601
+ The command runs seven steps in sequence. The first failure stops the chain. Identify which step failed from the output and refer to the relevant section above.
602
+
603
+ Steps in order:
604
+
605
+ 1. `doctor.mjs` → see [Doctor](#doctor)
606
+ 2. `validate-features.mjs --allow-empty` → see [Feature validation](#feature-validation)
607
+ 3. `validate-traceability.mjs --allow-empty --allow-missing` → see [Traceability validation](#traceability-validation)
608
+ 4. `validate-sync-plan.mjs --allow-empty --allow-missing` → see [Sync plan validation](#sync-plan-validation)
609
+ 5. `validate-active-specialists.mjs --allow-missing` → check that `.qa-ai/agents/specialists/available/` contains the expected specialist files
610
+ 6. `test-validators.mjs` → check `.qa-ai/scripts/lib/markdown-table.mjs` and `.qa-ai/scripts/lib/test-management-mapping.mjs` for syntax errors
611
+ 7. `smoke-test.mjs` → a framework-level regression; check that the scripts in `.qa-ai/scripts/` have not been accidentally modified
612
+
613
+ ---
614
+
615
+ ### `validate-target.mjs` fails after initialization
616
+
617
+ **Symptom**
618
+
619
+ ```
620
+ FAILED - 3 required checks failed
621
+ ```
622
+
623
+ **Cause**
624
+
625
+ The target repository has been initialized but has not yet run a full QA flow. Required workflow artifacts are missing.
626
+
627
+ **Fix**
628
+
629
+ For an incomplete repository, use the flags that match your actual state:
630
+
631
+ ```bash
632
+ # No feature files and no workflow artifacts yet
633
+ node .qa-ai/scripts/validate-target.mjs --allow-empty --allow-missing --no-strict-doctor
634
+
635
+ # Feature files exist but traceability matrix is not yet complete
636
+ node .qa-ai/scripts/validate-target.mjs --allow-missing
637
+ ```
638
+
639
+ Remove the flags incrementally as each artifact is generated.
640
+
641
+ ---
642
+
643
+ ### CI passes locally but fails on the CI server
644
+
645
+ **Common causes**
646
+
647
+ - Node.js version mismatch. The CI environment must use Node.js 20 or later.
648
+ - Line ending differences. QA FlowKit ships with `.gitattributes` that enforces LF. Verify `.gitattributes` was committed and that Git is not converting line endings.
649
+ - The `.qa-ai/` folder was not committed. Verify that `.gitignore` does not exclude it.
650
+
651
+ ---
652
+
653
+ ## Agent and adapter issues
654
+
655
+ ### `/qa-init` command is not found in Claude Code or OpenCode
656
+
657
+ **Cause**
658
+
659
+ The bootstrap script was not run before opening the agent, so `.claude/commands/qa-init.md` or `.opencode/commands/qa-init.md` does not exist.
660
+
661
+ **Fix**
662
+
663
+ ```bash
664
+ node .qa-ai/scripts/bootstrap-agent-adapters.mjs --agents claude,opencode
665
+ ```
666
+
667
+ Then restart the agent session.
668
+
669
+ ---
670
+
671
+ ### The agent runs `/init` instead of `/qa-init` and gets unexpected results
672
+
673
+ **Cause**
674
+
675
+ Both Claude Code and OpenCode have a built-in `/init` command that is unrelated to QA FlowKit. Running `/init` invokes the built-in agent initialization, not the QA workflow.
676
+
677
+ **Fix**
678
+
679
+ Always use `/qa-init` to trigger the QA FlowKit initialization command.
680
+
681
+ ---
682
+
683
+ ### Slash commands are available but the agent ignores QA rules
684
+
685
+ **Cause**
686
+
687
+ The agent may not have loaded the framework instructions. Each session should start with the agent reading the key framework files.
688
+
689
+ **Fix**
690
+
691
+ At the start of each session, prompt the agent explicitly:
692
+
693
+ ```text
694
+ Read AGENTS.md, qa-ai.config.yaml and .qa-ai/workflows/full-flow.md. Follow .qa-ai/rules/ before making changes.
695
+ ```
696
+
697
+ Or use `/qa-status` to orient the agent and get a summary of the current configuration and recommended next steps.
698
+
699
+ ---
700
+
701
+ ### An adapter file was overwritten by `sync-agent-adapters.mjs`
702
+
703
+ **Cause**
704
+
705
+ `sync-agent-adapters.mjs` was run with `--force` on a file that had been manually edited.
706
+
707
+ **Fix**
708
+
709
+ QA FlowKit does not overwrite files by default. If `--force` was used accidentally, restore the file from git:
710
+
711
+ ```bash
712
+ git checkout -- .claude/commands/qa-init.md
713
+ ```
714
+
715
+ To customize a command without risking overwrite, copy it to a different name (e.g. `qa-init-custom.md`) and edit the copy.
716
+
717
+ ---
718
+
719
+ ### The agent generates tests in the wrong language
720
+
721
+ **Cause**
722
+
723
+ `gherkin.language` in `qa-ai.config.yaml` does not match the language you want.
724
+
725
+ **Fix**
726
+
727
+ Update `qa-ai.config.yaml` directly:
728
+
729
+ ```yaml
730
+ gherkin:
731
+ language: es
732
+ ```
733
+
734
+ Or re-run init with the correct flag:
735
+
736
+ ```bash
737
+ node .qa-ai/scripts/init.mjs --gherkin-language es --force
738
+ ```
739
+
740
+ For Spanish, remind the agent to include `# language: es` in all `.feature` files.