@roopesh.yadava/qa-pack 1.2.0 → 1.3.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/README.md
CHANGED
|
@@ -31,6 +31,12 @@ After installing:
|
|
|
31
31
|
(plus `JIRA_BASE_URL` / `JIRA_EMAIL` / `JIRA_API_TOKEN` if you want bug screenshots attached).
|
|
32
32
|
2. Open `CLAUDE.md` and fill in the non-secret project facts (Jira key, environment, auth method).
|
|
33
33
|
|
|
34
|
+
`.claude/settings.local.json` (seeded once from `settings.local.json.example`) auto-approves
|
|
35
|
+
Playwright MCP tool calls, since those run constantly during test execution and are scoped to
|
|
36
|
+
the app under test. Every Atlassian/Jira MCP call — reading a card, filing a bug, commenting,
|
|
37
|
+
transitioning — and any action needing your input (filing a bug, publishing a charter,
|
|
38
|
+
overwriting product context) still prompts for confirmation.
|
|
39
|
+
|
|
34
40
|
Then open the repo in Claude Code and run:
|
|
35
41
|
|
|
36
42
|
```
|
|
@@ -43,8 +49,13 @@ Every run follows the same structured flow:
|
|
|
43
49
|
|
|
44
50
|
1. **Card input** — give a Jira card ID (`run qa PROJ-123`)
|
|
45
51
|
2. **Product context** — saved context + the Jira card are loaded automatically
|
|
46
|
-
3. **
|
|
47
|
-
|
|
52
|
+
3. **Model recommendation** — a one-line tier suggestion based on the card's Jira issue type
|
|
53
|
+
(Story/Feature/Epic → default high-capability model, Task/Bug/Sub-task → a lighter model
|
|
54
|
+
like Haiku). Informational only — switch with `/model` if you want, or ignore it; set
|
|
55
|
+
`QA_MODEL_ROUTING=off` in `.env` to skip it. See `SKILLS_CONTEXT.md` for the opt-in
|
|
56
|
+
subagent-override pattern.
|
|
57
|
+
4. **Gap questions** — you're asked only what isn't already known (one message)
|
|
58
|
+
5. **Phase selection**:
|
|
48
59
|
- **Phase 1 — Manual testing** (UI/Figma diff → browser tests → bugs → charter)
|
|
49
60
|
- **Phase 2 — Write automation** (reuse audit → Gherkin → steps → POM → real run + self-heal)
|
|
50
61
|
- **Phase 3 — Both** (manual first — its findings feed the automation)
|
|
@@ -210,6 +210,16 @@ Also check `token_usage_log.json` for `cache_read_input_tokens` per phase to see
|
|
|
210
210
|
Target: `cache_efficiency_pct` ≥ 70 after the first run on a given product.
|
|
211
211
|
First run will always be 0% (cold cache). Second and subsequent runs should cache the stable block (product context + skill instructions).
|
|
212
212
|
|
|
213
|
+
## Model Routing (optional)
|
|
214
|
+
|
|
215
|
+
`QA_MODEL_ROUTING` in `.env` controls how qa-agent responds to Jira issue type at Step 1c:
|
|
216
|
+
|
|
217
|
+
| Value | Behavior |
|
|
218
|
+
|-------|----------|
|
|
219
|
+
| unset or `recommend` (default) | qa-agent prints a one-line model-tier recommendation (Story/Feature/Epic → high-capability, Task/Bug/Sub-task → lighter model) after fetching the card, then continues on whatever model is already active. Portable — depends on no special tooling. |
|
|
220
|
+
| `off` | Skip the recommendation line entirely. |
|
|
221
|
+
| `subagent` (advanced, opt-in — not wired up by the shipped skills) | For Claude Code setups where phase dispatch runs through a subagent/Task-style tool that accepts a `model` parameter: adapt qa-agent's Step 4 dispatch to pass `model: haiku` for Task/Bug and the default model for Story/Feature when invoking `manual-testing` / `automation`. This is a pattern to wire into your own environment's actual subagent tool — qa-pack itself doesn't assume one exists, since not every Claude Code setup qa-pack installs into exposes the same dispatch mechanism. |
|
|
222
|
+
|
|
213
223
|
## Artifact Locations
|
|
214
224
|
|
|
215
225
|
| Artifact | Path |
|
|
@@ -27,6 +27,14 @@ user-invocable: true
|
|
|
27
27
|
**After the ONE allowed login snapshot — never call `browser_snapshot()` again in this run.**
|
|
28
28
|
Use `browser_evaluate` with a specific CSS selector or JS expression for all DOM inspection.
|
|
29
29
|
|
|
30
|
+
## Test Data & Entity Selection Rules
|
|
31
|
+
|
|
32
|
+
| Situation | Forbidden | Do instead |
|
|
33
|
+
|-----------|-----------|------------|
|
|
34
|
+
| A test step needs a value you don't have — a user record, a transaction PIN, a one-time user code | Calling a user-list endpoint or any other app API to fetch/guess it | Ask the user once, in the normal gap-question flow ("This test needs a valid user code — please provide one, or a test user's ID"), or pull it from `.env` / product context if already recorded there |
|
|
35
|
+
| A test requires two specifically related entities (e.g. a parent user + a specific child user, an account + a specific linked card) and the AC/COS doesn't name the exact pair | Picking one at random and proceeding as if it passed | Ask the user to specify the pair once. If they can't provide it inline, mark that test `🔒 BLOCKED` with the note "entity relationship not specified — needs manual verification" and continue with the rest of the plan — don't stop the whole run over one test |
|
|
36
|
+
| The AC/COS doesn't say how to reach the feature under test (menu path, URL, entry point) | Reading or grepping the `src/` tree to reverse-engineer the route | Ask once: "AC doesn't say how to reach {feature} — what's the navigation path (menu/page) to get there?" |
|
|
37
|
+
|
|
30
38
|
## Token Tracking
|
|
31
39
|
|
|
32
40
|
Optional and silent — follow the **Token Tracking** pattern in `SKILLS_CONTEXT.md`
|
|
@@ -152,13 +160,19 @@ HINTS = {
|
|
|
152
160
|
|
|
153
161
|
### 3a — Generate Test Plan
|
|
154
162
|
|
|
163
|
+
Before drafting test ideas, check each AC item for a stated entry point (menu path, URL,
|
|
164
|
+
button/link name). Per the **Test Data & Entity Selection Rules** above, do not scan `src/`
|
|
165
|
+
to infer a missing one — collect a single navigation question per missing entry point and
|
|
166
|
+
fold it into the confirmation prompt below instead of guessing.
|
|
167
|
+
|
|
155
168
|
From the AC, generate numbered test ideas:
|
|
156
169
|
- 1–3 tests per AC item
|
|
157
170
|
- 2+ negative/edge case tests
|
|
158
171
|
- 1+ error state test
|
|
159
172
|
|
|
160
173
|
Show as a compact table (T-01, T-02 ... with name and expected outcome).
|
|
161
|
-
Ask: `"Ready to run these tests? (yes / no or edit)"`
|
|
174
|
+
Ask: `"Ready to run these tests? (yes / no or edit)"` — include any missing navigation
|
|
175
|
+
questions in this same message.
|
|
162
176
|
Proceed on confirmation.
|
|
163
177
|
|
|
164
178
|
### 3b — Setup Browser + Capture Login Selectors
|
|
@@ -95,6 +95,23 @@ Criteria / COS**, **Figma link**, **issue type**, **project name** (for Step 6 f
|
|
|
95
95
|
If the description exceeds ~800 words, keep only Title + AC/Given-When-Then blocks +
|
|
96
96
|
Figma links; discard prose, comment threads, embedded images. Do not mention the truncation.
|
|
97
97
|
|
|
98
|
+
### 1c — Model Recommendation
|
|
99
|
+
|
|
100
|
+
Using the issue type fetched in 1b, print one line — informational only, never blocking:
|
|
101
|
+
|
|
102
|
+
| Issue type | Recommendation |
|
|
103
|
+
|---|---|
|
|
104
|
+
| Story / Feature / Epic | high-capability model (current default) |
|
|
105
|
+
| Task / Bug / Sub-task | lighter model (e.g. Haiku) |
|
|
106
|
+
|
|
107
|
+
> "Issue type: {type} → {tier} recommended for this run. Switch now with `/model` if you'd
|
|
108
|
+
> like, or continue on the current model."
|
|
109
|
+
|
|
110
|
+
Skip this line entirely if `.env` sets `QA_MODEL_ROUTING=off`. This is a recommendation
|
|
111
|
+
only — qa-pack has no way to force a mid-run model switch, so proceed on whatever model is
|
|
112
|
+
active regardless of the user's choice. See `SKILLS_CONTEXT.md` → "Model Routing" for the
|
|
113
|
+
opt-in subagent-override pattern some environments can wire up instead.
|
|
114
|
+
|
|
98
115
|
---
|
|
99
116
|
|
|
100
117
|
## Step 2 — Ask Relevant Questions (gaps only)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@roopesh.yadava/qa-pack",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "AI-powered QA agent skills for Claude Code — manual testing, BDD automation, accessibility, UI/Figma diff, bug reporting",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"postinstall": "node bin/postinstall.js"
|
package/templates/.env.example
CHANGED
|
@@ -20,3 +20,7 @@ JIRA_API_TOKEN=
|
|
|
20
20
|
# When unset or the scripts are missing, skills skip all tracking silently.
|
|
21
21
|
# QA_TRACKING_DIR=
|
|
22
22
|
# QA_TRACKING_MODEL=
|
|
23
|
+
|
|
24
|
+
# ── Optional: model-tier recommendation for qa-agent (see SKILLS_CONTEXT.md) ──
|
|
25
|
+
# recommend (default) | off | subagent (advanced — see "Model Routing" in SKILLS_CONTEXT.md)
|
|
26
|
+
# QA_MODEL_ROUTING=recommend
|
|
@@ -5,11 +5,7 @@
|
|
|
5
5
|
"Bash(npx cucumber-js *)",
|
|
6
6
|
"Bash(echo \"Exit: $?\")",
|
|
7
7
|
"Bash(playwright --version)",
|
|
8
|
-
"
|
|
9
|
-
"mcp__claude_ai_Atlassian__getJiraIssue",
|
|
10
|
-
"mcp__claude_ai_Atlassian__createJiraIssue",
|
|
11
|
-
"mcp__claude_ai_Atlassian__createIssueLink",
|
|
12
|
-
"mcp__claude_ai_Atlassian__addCommentToJiraIssue"
|
|
8
|
+
"mcp__playwright"
|
|
13
9
|
]
|
|
14
10
|
},
|
|
15
11
|
"enableAllProjectMcpServers": true,
|