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.
- package/.qa-ai/adapters/aider/.aider/README.md +25 -0
- package/.qa-ai/adapters/aider/.aider.conf.yml +6 -0
- package/.qa-ai/adapters/claude/agents/qa-workflow-orchestrator.md +18 -0
- package/.qa-ai/adapters/claude/commands/qa-add-tests.md +42 -0
- package/.qa-ai/adapters/claude/commands/qa-automation-plan.md +43 -0
- package/.qa-ai/adapters/claude/commands/qa-clean.md +42 -0
- package/.qa-ai/adapters/claude/commands/qa-config.md +51 -0
- package/.qa-ai/adapters/claude/commands/qa-coverage.md +46 -0
- package/.qa-ai/adapters/claude/commands/qa-doctor.md +11 -0
- package/.qa-ai/adapters/claude/commands/qa-full-flow.md +59 -0
- package/.qa-ai/adapters/claude/commands/qa-gate.md +36 -0
- package/.qa-ai/adapters/claude/commands/qa-help.md +30 -0
- package/.qa-ai/adapters/claude/commands/qa-init.md +70 -0
- package/.qa-ai/adapters/claude/commands/qa-status.md +56 -0
- package/.qa-ai/adapters/claude/commands/qa-update-tests.md +47 -0
- package/.qa-ai/adapters/claude/commands/qa-validate-features.md +36 -0
- package/.qa-ai/adapters/cline/.cline/README.md +25 -0
- package/.qa-ai/adapters/cline/.clinerules +9 -0
- package/.qa-ai/adapters/codex/README.md +44 -0
- package/.qa-ai/adapters/codex/prompts/implement-project.md +15 -0
- package/.qa-ai/adapters/continue/README.md +26 -0
- package/.qa-ai/adapters/continue/checks/qa-feature-conventions.md +15 -0
- package/.qa-ai/adapters/gemini/GEMINI.md +40 -0
- package/.qa-ai/adapters/generic/AGENTS.md +100 -0
- package/.qa-ai/adapters/goose/recipes/qa-flowkit.yaml +20 -0
- package/.qa-ai/adapters/opencode/README.md +57 -0
- package/.qa-ai/adapters/opencode/agents/qa-workflow.md +18 -0
- package/.qa-ai/adapters/opencode/commands/qa-add-tests.md +42 -0
- package/.qa-ai/adapters/opencode/commands/qa-automation-plan.md +43 -0
- package/.qa-ai/adapters/opencode/commands/qa-clean.md +42 -0
- package/.qa-ai/adapters/opencode/commands/qa-config.md +51 -0
- package/.qa-ai/adapters/opencode/commands/qa-coverage.md +46 -0
- package/.qa-ai/adapters/opencode/commands/qa-doctor.md +13 -0
- package/.qa-ai/adapters/opencode/commands/qa-full-flow.md +59 -0
- package/.qa-ai/adapters/opencode/commands/qa-gate.md +36 -0
- package/.qa-ai/adapters/opencode/commands/qa-help.md +30 -0
- package/.qa-ai/adapters/opencode/commands/qa-init.md +70 -0
- package/.qa-ai/adapters/opencode/commands/qa-status.md +56 -0
- package/.qa-ai/adapters/opencode/commands/qa-update-tests.md +47 -0
- package/.qa-ai/adapters/opencode/commands/qa-validate-features.md +36 -0
- package/.qa-ai/agents/README.md +39 -0
- package/.qa-ai/agents/api-testing-agent.md +73 -0
- package/.qa-ai/agents/automation-feasibility-agent.md +128 -0
- package/.qa-ai/agents/gherkin-test-design-agent.md +110 -0
- package/.qa-ai/agents/jira-task-agent.md +92 -0
- package/.qa-ai/agents/pr-agent.md +101 -0
- package/.qa-ai/agents/qa-context-intake-agent.md +75 -0
- package/.qa-ai/agents/qa-workflow-orchestrator.md +113 -0
- package/.qa-ai/agents/release-gate-agent.md +50 -0
- package/.qa-ai/agents/requirements-intake-agent.md +79 -0
- package/.qa-ai/agents/requirements-normalization-agent.md +80 -0
- package/.qa-ai/agents/specialists/available/appium.md +59 -0
- package/.qa-ai/agents/specialists/available/cypress.md +68 -0
- package/.qa-ai/agents/specialists/available/generic-test-design.md +117 -0
- package/.qa-ai/agents/specialists/available/jira.md +108 -0
- package/.qa-ai/agents/specialists/available/karate.md +97 -0
- package/.qa-ai/agents/specialists/available/playwright-api.md +87 -0
- package/.qa-ai/agents/specialists/available/playwright-ui.md +87 -0
- package/.qa-ai/agents/specialists/available/postman.md +108 -0
- package/.qa-ai/agents/specialists/available/rest-assured.md +103 -0
- package/.qa-ai/agents/specialists/available/selenium.md +91 -0
- package/.qa-ai/agents/specialists/available/testrail.md +85 -0
- package/.qa-ai/agents/specialists/available/webdriverio.md +81 -0
- package/.qa-ai/agents/test-design-system-agent.md +33 -0
- package/.qa-ai/agents/testrail-coverage-agent.md +84 -0
- package/.qa-ai/agents/testrail-sync-agent.md +96 -0
- package/.qa-ai/agents/webdriverio-implementation-agent.md +84 -0
- package/.qa-ai/presets/manual-only.yaml +65 -0
- package/.qa-ai/presets/selenium-jest-browserstack.yaml +72 -0
- package/.qa-ai/presets/webdriverio-playwright-api.yaml +85 -0
- package/.qa-ai/rules/api-testing.rules.md +7 -0
- package/.qa-ai/rules/approval.rules.md +8 -0
- package/.qa-ai/rules/automation.rules.md +7 -0
- package/.qa-ai/rules/gherkin.rules.md +12 -0
- package/.qa-ai/rules/testrail.rules.md +10 -0
- package/.qa-ai/rules/webdriverio.rules.md +9 -0
- package/.qa-ai/scripts/bootstrap-agent-adapters.mjs +127 -0
- package/.qa-ai/scripts/clean.mjs +243 -0
- package/.qa-ai/scripts/config.mjs +202 -0
- package/.qa-ai/scripts/doctor.mjs +383 -0
- package/.qa-ai/scripts/init.mjs +447 -0
- package/.qa-ai/scripts/lib/markdown-table.mjs +76 -0
- package/.qa-ai/scripts/lib/project-config.mjs +184 -0
- package/.qa-ai/scripts/lib/qa-next-steps.mjs +578 -0
- package/.qa-ai/scripts/lib/release-gate.mjs +66 -0
- package/.qa-ai/scripts/lib/test-design.mjs +92 -0
- package/.qa-ai/scripts/lib/test-management-mapping.mjs +73 -0
- package/.qa-ai/scripts/lib/utils.mjs +331 -0
- package/.qa-ai/scripts/qa-help.mjs +44 -0
- package/.qa-ai/scripts/smoke-npm-pack.mjs +187 -0
- package/.qa-ai/scripts/smoke-test.mjs +465 -0
- package/.qa-ai/scripts/sync-agent-adapters.mjs +121 -0
- package/.qa-ai/scripts/test-validators.mjs +334 -0
- package/.qa-ai/scripts/validate-active-specialists.mjs +106 -0
- package/.qa-ai/scripts/validate-features.mjs +277 -0
- package/.qa-ai/scripts/validate-release-gate.mjs +105 -0
- package/.qa-ai/scripts/validate-sync-plan.mjs +186 -0
- package/.qa-ai/scripts/validate-target.mjs +104 -0
- package/.qa-ai/scripts/validate-test-design.mjs +117 -0
- package/.qa-ai/scripts/validate-traceability.mjs +183 -0
- package/.qa-ai/templates/automation-feasibility-report.template.md +21 -0
- package/.qa-ai/templates/automation-implementation-plan.template.md +23 -0
- package/.qa-ai/templates/feature.template +13 -0
- package/.qa-ai/templates/jira-automation-task.template.md +25 -0
- package/.qa-ai/templates/pr-template.md +60 -0
- package/.qa-ai/templates/release-gate.template.yaml +16 -0
- package/.qa-ai/templates/requirement-analysis.template.md +17 -0
- package/.qa-ai/templates/test-design-proposal.template.md +26 -0
- package/.qa-ai/templates/test-design-system.template.md +15 -0
- package/.qa-ai/templates/test-management-mapping.template.json +18 -0
- package/.qa-ai/templates/testrail-coverage-analysis.template.md +17 -0
- package/.qa-ai/templates/testrail-sync-plan.template.md +22 -0
- package/.qa-ai/templates/traceability-matrix.template.md +4 -0
- package/.qa-ai/workflows/automation-analysis.md +23 -0
- package/.qa-ai/workflows/cleanup.md +52 -0
- package/.qa-ai/workflows/context-intake.md +66 -0
- package/.qa-ai/workflows/full-flow.md +55 -0
- package/.qa-ai/workflows/implementation.md +24 -0
- package/.qa-ai/workflows/intake.md +3 -0
- package/.qa-ai/workflows/pr.md +3 -0
- package/.qa-ai/workflows/release-gate.md +22 -0
- package/.qa-ai/workflows/test-design-system.md +33 -0
- package/.qa-ai/workflows/test-design.md +23 -0
- package/.qa-ai/workflows/testrail-sync.md +23 -0
- package/CHANGELOG.md +108 -0
- package/CODE_OF_CONDUCT.md +11 -0
- package/CONTRIBUTING.md +39 -0
- package/LICENSE +21 -0
- package/README.es.md +602 -0
- package/README.md +633 -0
- package/ROADMAP.md +107 -0
- package/SECURITY.md +18 -0
- package/bin/qa-flowkit.mjs +214 -0
- package/docs/qa-ai/agent-compatibility.md +100 -0
- package/docs/qa-ai/architecture.md +130 -0
- package/docs/qa-ai/backlog.md +393 -0
- package/docs/qa-ai/cleanup.md +104 -0
- package/docs/qa-ai/customizing-agents.md +148 -0
- package/docs/qa-ai/getting-started.md +385 -0
- package/docs/qa-ai/implementation-guide-for-codex.md +210 -0
- package/docs/qa-ai/npm-migration-plan.md +50 -0
- package/docs/qa-ai/open-source-release-checklist.md +17 -0
- package/docs/qa-ai/qa-help.md +76 -0
- package/docs/qa-ai/release-gate.md +60 -0
- package/docs/qa-ai/terminal-transcripts.md +316 -0
- package/docs/qa-ai/test-design-dual-mode.md +75 -0
- package/docs/qa-ai/troubleshooting.md +740 -0
- package/docs/qa-ai/workflow.md +147 -0
- 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.
|