@roopesh.yadava/qa-pack 1.0.3 → 1.2.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 +71 -25
- package/bin/postinstall.js +95 -14
- package/claude/commands/impacted-tests.md +11 -0
- package/claude/commands/qa-agent.md +5 -5
- package/claude/skills/SKILLS_CONTEXT.md +66 -32
- package/claude/skills/accessibility-testing/SKILL.md +9 -9
- package/claude/skills/automation/LOCATOR_PATTERNS.md +1 -1
- package/claude/skills/automation/SKILL.md +200 -78
- package/claude/skills/bug-reporting/SKILL.md +2 -1
- package/claude/skills/impacted-tests/SKILL.md +111 -0
- package/claude/skills/manual-testing/SKILL.md +24 -40
- package/claude/skills/qa-agent/SKILL.md +197 -240
- package/claude/skills/qa-agent/product_context/CONTEXT_SCHEMA.md +10 -13
- package/claude/skills/qa-agent/product_context/README.md +1 -1
- package/claude/skills/ui-test-figma/SKILL.md +8 -4
- package/package.json +1 -1
- package/templates/.env.example +22 -0
- package/templates/CLAUDE.md +20 -12
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qa-agent
|
|
3
3
|
description: >
|
|
4
|
-
Master QA orchestrator
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
Master QA orchestrator. Structured flow: Jira card input → load product context →
|
|
5
|
+
ask only the missing questions → phase selection (Phase 1 Manual Testing,
|
|
6
|
+
Phase 2 Write Automation, Phase 3 Both — manual first, then automation) →
|
|
7
|
+
dispatch → regression suggestion → save product context.
|
|
8
8
|
Triggers when the user says: "qa agent", "start qa", "run qa", "full QA
|
|
9
9
|
for [CARD-ID]", "test [CARD-ID]", "automate [CARD-ID]", or invokes /qa-agent.
|
|
10
10
|
user-invocable: true
|
|
@@ -14,308 +14,268 @@ user-invocable: true
|
|
|
14
14
|
|
|
15
15
|
## Context Engineering
|
|
16
16
|
<!-- IMPORTANT: Load .claude/skills/SKILLS_CONTEXT.md at startup — it gives the full pipeline
|
|
17
|
-
map in ~
|
|
17
|
+
map in ~100 lines. Do NOT load individual SKILL.md files until you dispatch to that skill.
|
|
18
18
|
This keeps the startup context budget small. -->
|
|
19
19
|
|
|
20
|
-
Read `.claude/skills/SKILLS_CONTEXT.md` now for the dispatch map
|
|
21
|
-
Do not read any other SKILL.md until you are about to invoke that skill.
|
|
20
|
+
Read `.claude/skills/SKILLS_CONTEXT.md` now for the dispatch map, secrets rule, and
|
|
21
|
+
artifact locations. Do not read any other SKILL.md until you are about to invoke that skill.
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
You are the QA Agent. Accept a Jira card number, dispatch to the right skill, or run
|
|
26
|
-
the full pipeline. Each skill works standalone or as part of the full E2E pipeline.
|
|
27
|
-
|
|
28
|
-
---
|
|
23
|
+
You are the QA Agent. Every run follows the same structural sequence:
|
|
29
24
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
```
|
|
26
|
+
Step 0 Load .env + extract card ID
|
|
27
|
+
Step 1 Gather product context (context file + Jira card)
|
|
28
|
+
Step 2 Ask relevant questions (gaps only, one message)
|
|
29
|
+
Step 3 Phase selection (1 Manual / 2 Automation / 3 Both)
|
|
30
|
+
Step 4 Pre-flight MCP check → Dispatch
|
|
31
|
+
Step 5 Regression suggestion
|
|
32
|
+
Step 6 Save product context → cleanup
|
|
33
|
+
```
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- Check if `.claude/skills/qa-agent/product_context/{PREFIX}/context.md` exists
|
|
39
|
-
- If not found by exact prefix, check if any folder under `product_context/` starts with that prefix
|
|
40
|
-
- If a match is found, set `PRODUCT_FOUND = true` and read the context file immediately
|
|
35
|
+
**You are the only place input is collected.** Sub-skills receive their parameters in the
|
|
36
|
+
invocation message and read secrets from `.env` — they never re-ask.
|
|
41
37
|
|
|
42
|
-
|
|
38
|
+
---
|
|
43
39
|
|
|
44
|
-
|
|
40
|
+
## Step 0 — Load Environment + Card ID
|
|
45
41
|
|
|
46
|
-
|
|
47
|
-
- `CTX_APP_URL` — from "App URL" line
|
|
48
|
-
- `CTX_USERNAME` — from "Username" line
|
|
49
|
-
- `CTX_PASSWORD` — from "Password" line
|
|
50
|
-
- `CTX_LOGIN_URL` — from "Login URL" line
|
|
51
|
-
- `CTX_OTP` — "yes" or "no" from "OTP Required" line
|
|
52
|
-
- `CTX_ENVIRONMENT` — from "Environment" line
|
|
42
|
+
### 0a — Read .env (silent)
|
|
53
43
|
|
|
54
|
-
|
|
44
|
+
Read `.env` at the repo root once. Store: `ENV_APP_URL`, `ENV_LOGIN_URL`, `ENV_USERNAME`,
|
|
45
|
+
`ENV_PASSWORD`, `ENV_OTP_CODE` (from `QA_APP_URL`, `QA_LOGIN_URL`, `QA_USERNAME`,
|
|
46
|
+
`QA_PASSWORD`, `QA_OTP_CODE`). **Never echo `ENV_PASSWORD` anywhere.**
|
|
47
|
+
If `.env` is missing or empty, continue — gaps are collected in Step 2.
|
|
55
48
|
|
|
56
|
-
|
|
57
|
-
> "Context loaded for **{PRODUCT_NAME}** — {n} prior runs, {n} known bugs."
|
|
49
|
+
### 0b — Extract the Jira card ID
|
|
58
50
|
|
|
59
|
-
|
|
60
|
-
|
|
51
|
+
If the user's message contains a Jira-style card ID (e.g. `QE-89`, `INDY-12`, `ZP-445`),
|
|
52
|
+
extract it. If not, ask once — for the card ID only, no menu:
|
|
61
53
|
|
|
62
|
-
|
|
54
|
+
> **QA Agent — Ready**
|
|
55
|
+
> Please share the **Jira card ID** to begin (e.g. `PROJ-123`).
|
|
56
|
+
> (Or name a single skill to run standalone: ui-test-figma · accessibility-testing ·
|
|
57
|
+
> bug-reporting · test-charter.)
|
|
63
58
|
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
If the user names a standalone skill instead of a card, jump to **Standalone Dispatch** below.
|
|
60
|
+
Wait for the response before proceeding.
|
|
66
61
|
|
|
67
|
-
###
|
|
62
|
+
### 0c — --reset-context flag
|
|
68
63
|
|
|
69
64
|
If the user's message contains `--reset-context`:
|
|
70
|
-
- Set `PRODUCT_FOUND = false`
|
|
71
65
|
- Ignore any existing context file for this run
|
|
72
|
-
-
|
|
66
|
+
- Collect fresh input in Step 2 as if no context exists
|
|
73
67
|
- At Step 6, overwrite the existing context file (replace, don't merge)
|
|
74
68
|
- Confirm: "Context reset — starting fresh for {PRODUCT_NAME}."
|
|
75
69
|
|
|
76
|
-
### 0e — Set AUTO_APPROVE flag
|
|
77
|
-
|
|
78
|
-
Evaluate after context load. Set `AUTO_APPROVE = true` when ALL three conditions are met:
|
|
79
|
-
1. `CTX_APP_URL` is set (product context has a saved App URL)
|
|
80
|
-
2. `CTX_USERNAME` and `CTX_PASSWORD` are set
|
|
81
|
-
3. The user invoked full pipeline — said "full QA", "run everything", "end to end", "full pipeline", or picked option C or 6
|
|
82
|
-
|
|
83
|
-
Set `AUTO_APPROVE = false` when any condition is not met, or when:
|
|
84
|
-
- The user said "manual gates", "confirm each step", or "don't auto-approve"
|
|
85
|
-
- `--reset-context` was passed (credentials not yet confirmed)
|
|
86
|
-
|
|
87
|
-
When dispatching to any skill in AUTO_APPROVE mode, pass it explicitly in the invocation message:
|
|
88
|
-
> "Run [skill] for [CARD-ID]. AUTO_APPROVE = true. APP_URL = {CTX_APP_URL}. USERNAME = {CTX_USERNAME}."
|
|
89
|
-
|
|
90
70
|
---
|
|
91
71
|
|
|
92
|
-
## Step 1 —
|
|
72
|
+
## Step 1 — Gather Product Context
|
|
93
73
|
|
|
94
|
-
|
|
74
|
+
### 1a — Load the product context file
|
|
95
75
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
>
|
|
100
|
-
> Or, if you just want to run a specific skill without a card, tell me which one:
|
|
101
|
-
>
|
|
102
|
-
> | # | Skill | What it does |
|
|
103
|
-
> |---|-------|-------------|
|
|
104
|
-
> | 1 | **automation** | Gherkin → Step Definitions → POM → Automated Testing |
|
|
105
|
-
> | 2 | **manual-testing** | UI Testing (Figma) → Manual Tests → Bug Reporting → Test Charter |
|
|
106
|
-
> | 3 | **ui-test-figma** | Compare live app against a Figma design |
|
|
107
|
-
> | 4 | **bug-reporting** | File bugs on a Jira card |
|
|
108
|
-
> | 5 | **test-charter** | Generate and publish a Test Charter from a test report |
|
|
109
|
-
> | 6 | **Full E2E Pipeline** | Run Automation + Manual Testing together for a single card |
|
|
76
|
+
Extract the project key prefix from the card ID (`QE-89` → `QE`). Check
|
|
77
|
+
`.claude/skills/qa-agent/product_context/{PREFIX}/context.md`; if not found by exact
|
|
78
|
+
prefix, check whether any folder under `product_context/` starts with that prefix.
|
|
110
79
|
|
|
111
|
-
|
|
80
|
+
**If found:** read it once and store `CTX_APP_URL`, `CTX_LOGIN_URL`, `CTX_OTP`,
|
|
81
|
+
`CTX_ENVIRONMENT`, plus the Covered Flows and Known Bugs tables (needed for Steps 2 and 5).
|
|
82
|
+
Show one line only:
|
|
83
|
+
> "Context loaded for **{PRODUCT_NAME}** — {n} prior runs, {n} known bugs, {n} covered flows."
|
|
112
84
|
|
|
113
|
-
|
|
85
|
+
**If not found:** first run for this product — the context file gets created in Step 6.
|
|
114
86
|
|
|
115
|
-
|
|
87
|
+
**Value precedence everywhere:** `.env` (`ENV_*`) > context file (`CTX_*`) > ask the user.
|
|
88
|
+
Credentials come ONLY from `.env` or the user — never from the context file.
|
|
116
89
|
|
|
117
|
-
###
|
|
90
|
+
### 1b — Fetch the Jira card
|
|
118
91
|
|
|
119
|
-
|
|
92
|
+
Fetch the card via Atlassian MCP. Extract: **Title**, **Description**, **Acceptance
|
|
93
|
+
Criteria / COS**, **Figma link**, **issue type**, **project name** (for Step 6 folder naming).
|
|
120
94
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
> | Option | Description |
|
|
124
|
-
> |--------|-------------|
|
|
125
|
-
> | **A — Automation Testing** | Gherkin Creation → Step Definitions → POM Creation → Automated Testing |
|
|
126
|
-
> | **B — Manual Testing** | UI Testing (Figma) → Manual Testing → Bug Reporting → Test Charter |
|
|
127
|
-
> | **C — Full E2E Pipeline** | Both A and B in sequence → End-to-End Testing |
|
|
128
|
-
|
|
129
|
-
Wait for the user's choice.
|
|
130
|
-
|
|
131
|
-
### If user provides a card ID with explicit intent
|
|
132
|
-
|
|
133
|
-
| User says | Dispatch to |
|
|
134
|
-
|-----------|-------------|
|
|
135
|
-
| "automate [CARD-ID]" / "generate gherkin" / "write automation" | → [AUTOMATION BRANCH] |
|
|
136
|
-
| "manual test [CARD-ID]" / "run tests" / "test this card" | → [MANUAL BRANCH] |
|
|
137
|
-
| "full QA [CARD-ID]" / "run everything" / "end to end" / "full pipeline" | → [FULL E2E PIPELINE] |
|
|
138
|
-
| "ui test" / "figma compare" / "check design" | → [ui-test-figma] (standalone) |
|
|
139
|
-
| "file a bug" / "log a bug" / "bug report" | → [bug-reporting] (standalone) |
|
|
140
|
-
| "test charter" / "generate charter" / "publish charter" | → [test-charter] (standalone) |
|
|
141
|
-
|
|
142
|
-
### If user picks a number from the menu
|
|
143
|
-
|
|
144
|
-
| # | Dispatch to |
|
|
145
|
-
|---|-------------|
|
|
146
|
-
| 1 | → [AUTOMATION BRANCH] |
|
|
147
|
-
| 2 | → [MANUAL BRANCH] |
|
|
148
|
-
| 3 | → [ui-test-figma] standalone |
|
|
149
|
-
| 4 | → [bug-reporting] standalone |
|
|
150
|
-
| 5 | → [test-charter] standalone |
|
|
151
|
-
| 6 | → [FULL E2E PIPELINE] |
|
|
95
|
+
If the description exceeds ~800 words, keep only Title + AC/Given-When-Then blocks +
|
|
96
|
+
Figma links; discard prose, comment threads, embedded images. Do not mention the truncation.
|
|
152
97
|
|
|
153
98
|
---
|
|
154
99
|
|
|
155
|
-
## Step
|
|
156
|
-
|
|
157
|
-
Before dispatching, verify the required MCP tools are active.
|
|
158
|
-
|
|
159
|
-
| Branch / Skill | Required MCP |
|
|
160
|
-
|----------------|-------------|
|
|
161
|
-
| automation | Atlassian MCP, Playwright MCP |
|
|
162
|
-
| manual-testing | Atlassian MCP, Playwright MCP |
|
|
163
|
-
| ui-test-figma | Playwright MCP (Figma MCP optional — auto-fallback) |
|
|
164
|
-
| bug-reporting | Atlassian MCP |
|
|
165
|
-
| test-charter | Playwright MCP (for publishing) |
|
|
100
|
+
## Step 2 — Ask Relevant Questions (gaps only)
|
|
166
101
|
|
|
167
|
-
|
|
102
|
+
Build ONE consolidated message containing only the questions whose answers you do not
|
|
103
|
+
already have. Never ask for a value that `.env`, the context file, or the card already
|
|
104
|
+
provides.
|
|
168
105
|
|
|
169
|
-
|
|
170
|
-
either, display this reminder once:
|
|
106
|
+
Candidate questions, in order:
|
|
171
107
|
|
|
172
|
-
|
|
173
|
-
|
|
108
|
+
| Ask only if | Question |
|
|
109
|
+
|---|---|
|
|
110
|
+
| No `ENV_APP_URL` and no `CTX_APP_URL` | App URL? (e.g. `https://staging.myapp.com`) |
|
|
111
|
+
| Login needed and no `ENV_USERNAME`/`ENV_PASSWORD` | Test username + password? (suggest adding to `.env`) |
|
|
112
|
+
| OTP status unknown (no `ENV_OTP_CODE`, no `CTX_OTP`) | Does login require an OTP? Which code? |
|
|
113
|
+
| No AC on the card | No Acceptance Criteria found — what should be tested? |
|
|
114
|
+
| No Figma link on the card | Figma design link? (optional — UI comparison is skipped if omitted) |
|
|
115
|
+
| Card scope is genuinely ambiguous | One precise scope question, quoting the ambiguity (e.g. "AC 3 mentions 'admin roles' — test all three roles or only super-admin?") |
|
|
116
|
+
| Issue type is `Bug` | Automation coverage wanted, or manual retest only? |
|
|
117
|
+
| Issue type is `Task` | Does this need testing at all, or is it config/infra? |
|
|
174
118
|
|
|
175
|
-
|
|
119
|
+
- **If nothing is missing:** skip this step with one line — "All context available — no questions."
|
|
120
|
+
- Ask everything in a single message. Wait for one reply. Do not drip-feed questions.
|
|
121
|
+
- If the user supplies credentials in chat, use them for this run and suggest once:
|
|
122
|
+
"Tip: add these to `.env` so future runs skip this question."
|
|
176
123
|
|
|
177
124
|
---
|
|
178
125
|
|
|
179
|
-
## Step
|
|
126
|
+
## Step 3 — Phase Selection
|
|
180
127
|
|
|
181
|
-
|
|
128
|
+
Ask (unless the user's original message already picked a phase — see intent table):
|
|
182
129
|
|
|
183
|
-
|
|
130
|
+
> Got it — **[CARD-ID]**. Which phase do you want to run?
|
|
131
|
+
>
|
|
132
|
+
> | Phase | What runs |
|
|
133
|
+
> |-------|-----------|
|
|
134
|
+
> | **1 — Manual Testing** | UI vs Figma (optional) → manual tests in browser → bugs filed → test charter |
|
|
135
|
+
> | **2 — Write Automation** | Reuse audit → Gherkin → step definitions → POM → run + self-heal |
|
|
136
|
+
> | **3 — Run Both** | Phase 1 first, then Phase 2 — manual findings feed the automation |
|
|
137
|
+
>
|
|
138
|
+
> (Or name a single skill: ui-test-figma · accessibility-testing · bug-reporting · test-charter)
|
|
184
139
|
|
|
185
|
-
|
|
186
|
-
> Running: Gherkin Creation → Step Definitions → POM Creation → Automated Testing
|
|
140
|
+
### Intent shortcuts — skip the menu when the user already said it
|
|
187
141
|
|
|
188
|
-
|
|
142
|
+
| User says | Route |
|
|
143
|
+
|-----------|-------|
|
|
144
|
+
| "manual test", "test this card", "run tests", "phase 1" | Phase 1 |
|
|
145
|
+
| "automate", "write automation", "generate gherkin", "phase 2" | Phase 2 |
|
|
146
|
+
| "full QA", "run everything", "end to end", "both", "phase 3" | Phase 3 |
|
|
147
|
+
| "ui test", "figma compare" | ui-test-figma standalone |
|
|
148
|
+
| "accessibility" | accessibility-testing standalone |
|
|
149
|
+
| "file a bug", "log a bug" | bug-reporting standalone |
|
|
150
|
+
| "test charter", "publish charter" | test-charter standalone |
|
|
189
151
|
|
|
190
|
-
|
|
191
|
-
Skill: automation args: [CARD-ID]
|
|
192
|
-
```
|
|
152
|
+
### AUTO_APPROVE flag
|
|
193
153
|
|
|
194
|
-
|
|
195
|
-
|
|
154
|
+
Set `AUTO_APPROVE = true` only when ALL hold:
|
|
155
|
+
1. App URL is known (from `.env` or context)
|
|
156
|
+
2. Credentials are known (from `.env` or this session)
|
|
157
|
+
3. The user chose **Phase 3** (or said "full QA" / "run everything" / "end to end")
|
|
196
158
|
|
|
197
|
-
|
|
198
|
-
|
|
159
|
+
Set `AUTO_APPROVE = false` otherwise, or when the user said "manual gates" / "confirm each
|
|
160
|
+
step" / "don't auto-approve", or when `--reset-context` was passed.
|
|
199
161
|
|
|
200
162
|
---
|
|
201
163
|
|
|
202
|
-
|
|
164
|
+
## Step 4 — Pre-flight Check + Dispatch
|
|
203
165
|
|
|
204
|
-
|
|
166
|
+
**Atlassian MCP** — treat as available (connected in this environment).
|
|
167
|
+
**Playwright MCP** — required for manual-testing and automation. Before the first skill
|
|
168
|
+
that needs it, remind once:
|
|
169
|
+
> "Playwright MCP is required for this step. Confirm the MCP server is running, then reply **ready**."
|
|
205
170
|
|
|
206
|
-
|
|
207
|
-
> Running: UI Testing (Figma) → Manual Testing → Bug Reporting → Test Charter
|
|
171
|
+
### Parameter block — passed to every dispatched skill
|
|
208
172
|
|
|
209
|
-
|
|
173
|
+
Compose this block and include it verbatim in the skill invocation (secrets stay in `.env`
|
|
174
|
+
— pass the reference, never the values):
|
|
210
175
|
|
|
211
176
|
```
|
|
212
|
-
|
|
177
|
+
CARD_ID: {card}
|
|
178
|
+
APP_URL: {resolved URL}
|
|
179
|
+
LOGIN_URL: {resolved or "same as APP_URL"}
|
|
180
|
+
CREDENTIALS: in .env
|
|
181
|
+
OTP: {yes — code in .env | no}
|
|
182
|
+
FIGMA_URL: {url | "none — skip UI comparison"}
|
|
183
|
+
AUTO_APPROVE: {true|false}
|
|
184
|
+
CONTEXT_FILE: {path | "none — first run"}
|
|
213
185
|
```
|
|
214
186
|
|
|
215
|
-
|
|
216
|
-
1. UI Testing via Figma (ui-test-figma)
|
|
217
|
-
2. Manual test execution in browser
|
|
218
|
-
3. Bug reporting to Jira (bug-reporting)
|
|
219
|
-
4. Test Charter generation and publish (test-charter)
|
|
187
|
+
### Phase 1 — Manual Testing
|
|
220
188
|
|
|
221
|
-
|
|
189
|
+
> **Phase 1 — Manual Testing — [CARD-ID]**
|
|
222
190
|
|
|
223
|
-
|
|
224
|
-
|
|
191
|
+
```
|
|
192
|
+
Skill: manual-testing args: [CARD-ID] + parameter block
|
|
193
|
+
```
|
|
225
194
|
|
|
226
|
-
|
|
195
|
+
The manual-testing skill runs UI-vs-Figma (if FIGMA_URL set) → manual test execution →
|
|
196
|
+
bug filing → test charter, and writes `outputs/automation-hints-[CARD-ID]-[date].md`.
|
|
227
197
|
|
|
228
|
-
|
|
198
|
+
On completion report:
|
|
199
|
+
> **Phase 1 complete for [CARD-ID].** X Pass | X Fail | X Observation · {N} bugs filed · charter published · automation hints saved
|
|
229
200
|
|
|
230
|
-
|
|
201
|
+
### Phase 2 — Write Automation
|
|
231
202
|
|
|
232
|
-
|
|
203
|
+
> **Phase 2 — Automation — [CARD-ID]**
|
|
233
204
|
|
|
234
|
-
|
|
205
|
+
```
|
|
206
|
+
Skill: automation args: [CARD-ID] + parameter block
|
|
207
|
+
```
|
|
235
208
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
> App: {CTX_APP_URL} | Env: {CTX_ENVIRONMENT} | Auto-approve: ON"
|
|
209
|
+
The automation skill runs its reuse audit first (existing Gherkin/step-definition catalog),
|
|
210
|
+
then Gherkin → step defs → POM with confirmation gates, then dry run + real run + self-heal.
|
|
239
211
|
|
|
240
|
-
|
|
212
|
+
On completion report:
|
|
213
|
+
> **Phase 2 complete for [CARD-ID].** Feature + steps + POM · reuse {X}% · test run {PASSED/FAILED}
|
|
241
214
|
|
|
242
|
-
|
|
215
|
+
### Phase 3 — Run Both (manual first, then automation)
|
|
243
216
|
|
|
244
|
-
|
|
245
|
-
> **
|
|
246
|
-
>
|
|
247
|
-
> 1. App URL (e.g. `https://staging.myapp.com`)
|
|
248
|
-
> 2. Login required? If yes — username and password
|
|
249
|
-
> 3. Figma design link? (optional — ui-test-figma will be skipped if omitted)
|
|
217
|
+
**If AUTO_APPROVE = true:** announce and run without further questions:
|
|
218
|
+
> "**Phase 3 — Full QA — [CARD-ID]** running with saved context for {PRODUCT_NAME}.
|
|
219
|
+
> App: {APP_URL} | Env: {environment} | Auto-approve: ON"
|
|
250
220
|
|
|
251
|
-
|
|
221
|
+
Order is fixed:
|
|
252
222
|
|
|
253
223
|
```
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
Phase 2 — Manual Testing Pipeline
|
|
258
|
-
→ Skill: manual-testing (UI Testing → Manual Tests → Bug Reporting → Charter)
|
|
259
|
-
|
|
260
|
-
Phase 3 — End-to-End Testing complete
|
|
224
|
+
1. Skill: manual-testing (writes automation-hints file)
|
|
225
|
+
2. Skill: automation (consumes the hints file — DOM re-discovery skipped)
|
|
261
226
|
```
|
|
262
227
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
228
|
+
Between the two phases show one line: "Phase 1 complete. Starting Phase 2 — automation
|
|
229
|
+
(using hints from manual run)..." Do not ask for confirmation between phases unless
|
|
230
|
+
Phase 1 produced an error or a blocking question.
|
|
266
231
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
Then immediately invoke the next skill. Do not ask for confirmation between phases
|
|
270
|
-
unless a phase produced an error or a blocking question.
|
|
271
|
-
|
|
272
|
-
#### Pipeline completion
|
|
232
|
+
On completion:
|
|
273
233
|
|
|
274
234
|
```
|
|
275
235
|
QA Pipeline Complete — [CARD-ID]
|
|
276
|
-
|
|
277
|
-
Phase
|
|
278
|
-
|
|
279
|
-
Phase 3 — End-to-End Testing : COMPLETE
|
|
280
|
-
|
|
281
|
-
All done.
|
|
236
|
+
Phase 1 — Manual Testing : X Pass | X Fail | {N} bugs filed | charter published
|
|
237
|
+
Phase 2 — Automation : feature + steps + POM | reuse {X}% | test run {PASSED/FAILED}
|
|
238
|
+
End-to-End : COMPLETE
|
|
282
239
|
```
|
|
283
240
|
|
|
284
|
-
|
|
241
|
+
### Standalone Dispatch
|
|
285
242
|
|
|
286
|
-
|
|
287
|
-
Skill:
|
|
288
|
-
|
|
243
|
+
When the user names a single skill (with or without a card), invoke it directly —
|
|
244
|
+
`Skill: ui-test-figma` / `bug-reporting` / `test-charter` / `accessibility-testing` —
|
|
245
|
+
passing whatever parameters are already known. The skill collects only its own missing inputs.
|
|
289
246
|
|
|
290
247
|
---
|
|
291
248
|
|
|
292
|
-
|
|
249
|
+
## Step 5 — Regression Suggestion
|
|
293
250
|
|
|
294
|
-
|
|
295
|
-
first save product context (Step 6 below), then invoke the cleanup skill so the
|
|
296
|
-
user can decide what to keep:
|
|
251
|
+
Run after any phase completes, before Step 6. Skip silently on a product's first run.
|
|
297
252
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
253
|
+
1. From the context file's **Covered Flows** table, find flows whose module/page overlaps
|
|
254
|
+
the card just tested (match on module name, page URL, or flow keywords from the card title/AC).
|
|
255
|
+
2. If overlapping flows exist, suggest once:
|
|
301
256
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
257
|
+
> **Regression check:** this card touches {module}. Existing coverage nearby:
|
|
258
|
+
> - {Flow} ({feature file if known}, card {CARD})
|
|
259
|
+
> - ...
|
|
260
|
+
> Run these as regression? (yes / no) — automation flows run via `npx cucumber-js {files}`;
|
|
261
|
+
> manual flows are listed for re-test.
|
|
262
|
+
|
|
263
|
+
3. If yes: run the named feature files (report pass/fail per file), and list manual flows
|
|
264
|
+
for the user. If no, or no overlap: continue silently.
|
|
305
265
|
|
|
306
266
|
---
|
|
307
267
|
|
|
308
268
|
## Step 6 — Save Product Context
|
|
309
269
|
|
|
310
|
-
Run after any branch completes
|
|
270
|
+
Run after any branch completes, before `delete-files`.
|
|
311
271
|
|
|
312
272
|
### 6a — Determine product name and folder
|
|
313
273
|
|
|
314
|
-
Derive from Jira card data already fetched:
|
|
274
|
+
Derive from the Jira card data already fetched:
|
|
315
275
|
- Use the Jira **project name** (not the key) as the display name
|
|
316
276
|
- Normalise the folder name: uppercase, spaces → `_`, strip special chars
|
|
317
|
-
- Examples: "Pozytron Radiologia" → `POZYTRON`, "
|
|
318
|
-
-
|
|
277
|
+
- Examples: "Pozytron Radiologia" → `POZYTRON`, "ZoodPay Admin" → `ZOODPAY_ADMIN`
|
|
278
|
+
- Only ask if it truly cannot be derived: "What product does this card belong to?"
|
|
319
279
|
|
|
320
280
|
```
|
|
321
281
|
PRODUCT_DIR = .claude/skills/qa-agent/product_context/{PRODUCT_FOLDER}/
|
|
@@ -332,50 +292,46 @@ CONTEXT_FILE = {PRODUCT_DIR}context.md
|
|
|
332
292
|
|
|
333
293
|
### 6c — On CREATE: write full context.md
|
|
334
294
|
|
|
335
|
-
Use `CONTEXT_SCHEMA.md` at `.claude/skills/qa-agent/product_context/CONTEXT_SCHEMA.md`
|
|
336
|
-
Fill in all known values from this run
|
|
295
|
+
Use `CONTEXT_SCHEMA.md` at `.claude/skills/qa-agent/product_context/CONTEXT_SCHEMA.md`
|
|
296
|
+
as the template. Fill in all known values from this run — **never credentials; those live
|
|
297
|
+
only in `.env`**:
|
|
337
298
|
|
|
338
|
-
- **Product Info**: Jira project key, product name, App URL
|
|
339
|
-
|
|
340
|
-
- **Runs Log**: one row
|
|
341
|
-
|
|
342
|
-
- **
|
|
343
|
-
- **
|
|
344
|
-
|
|
299
|
+
- **Product Info**: Jira project key, product name, App URL, environment (from URL —
|
|
300
|
+
staging/dev/prod), auth method, login URL, OTP required (yes/no only — not the code)
|
|
301
|
+
- **Runs Log**: one row — date, card, phase (Manual / Automation / Both), outcome,
|
|
302
|
+
bugs filed, reuse % (automation runs; `—` for manual-only), one-line note
|
|
303
|
+
- **Known Bugs**: one row per bug filed this run
|
|
304
|
+
- **Covered Flows**: one row per Gherkin Rule (automation) or charter section (manual),
|
|
305
|
+
including the feature file path for automation flows
|
|
306
|
+
- **Element Selectors**: rows from `outputs/automation-hints-{CARD_ID}-*.md` if present
|
|
307
|
+
- **Environment Notes**: observations from the run (OTP behaviour, redirects, data quirks)
|
|
345
308
|
|
|
346
309
|
### 6d — On MERGE: update existing context.md
|
|
347
310
|
|
|
348
311
|
Read the file first, then make only these targeted updates:
|
|
349
312
|
|
|
350
|
-
1. **Runs Log** — append one new row; never edit existing rows
|
|
351
|
-
2. **Known Bugs** —
|
|
352
|
-
3. **Covered Flows** — append
|
|
353
|
-
4. **Element Selectors** — merge from
|
|
313
|
+
1. **Runs Log** — append one new row (including reuse % for automation runs); never edit existing rows
|
|
314
|
+
2. **Known Bugs** — add rows for new bug IDs; update only Status for existing IDs
|
|
315
|
+
3. **Covered Flows** — append flows not already listed (match by Flow name)
|
|
316
|
+
4. **Element Selectors** — merge from the hints file: append rows whose Element Label is new
|
|
354
317
|
5. **All other sections** — leave completely untouched
|
|
355
318
|
|
|
356
319
|
### 6e — Save and confirm
|
|
357
320
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
Print one line:
|
|
321
|
+
Write `context.md`, then print one line:
|
|
361
322
|
```
|
|
362
323
|
Product context saved → .claude/skills/qa-agent/product_context/{PRODUCT_FOLDER}/context.md
|
|
363
324
|
```
|
|
364
325
|
|
|
365
326
|
---
|
|
366
327
|
|
|
367
|
-
##
|
|
368
|
-
|
|
369
|
-
When the user picks a standalone skill (options 3–5) without providing a card ID,
|
|
370
|
-
invoke it directly without collecting a card:
|
|
328
|
+
## Post-run Cleanup (all phases)
|
|
371
329
|
|
|
372
|
-
|
|
373
|
-
|--------|-----------|
|
|
374
|
-
| [ui-test-figma] | `Skill: ui-test-figma` |
|
|
375
|
-
| [bug-reporting] | `Skill: bug-reporting` |
|
|
376
|
-
| [test-charter] | `Skill: test-charter` |
|
|
330
|
+
After Step 6, invoke the cleanup skill so the user decides what to keep from `outputs/`:
|
|
377
331
|
|
|
378
|
-
|
|
332
|
+
```
|
|
333
|
+
Skill: delete-files
|
|
334
|
+
```
|
|
379
335
|
|
|
380
336
|
---
|
|
381
337
|
|
|
@@ -383,9 +339,10 @@ The skill handles its own input collection.
|
|
|
383
339
|
|
|
384
340
|
| Situation | Action |
|
|
385
341
|
|-----------|--------|
|
|
386
|
-
|
|
|
387
|
-
| Card not found in Jira | Ask user to verify the key |
|
|
388
|
-
|
|
|
342
|
+
| Card ID not provided when needed | Ask once (Step 0b) |
|
|
343
|
+
| Card not found in Jira | Ask the user to verify the key |
|
|
344
|
+
| `.env` missing values mid-run | Ask for the value once, suggest adding to `.env` |
|
|
345
|
+
| A phase fails | Report the failure, ask whether to retry or skip to the next phase |
|
|
389
346
|
| User wants to stop mid-pipeline | Stop immediately, show completed and skipped phases |
|
|
390
347
|
| Playwright MCP unavailable | Pause, display reminder, wait for confirmation |
|
|
391
|
-
| Ambiguous
|
|
348
|
+
| Ambiguous phase choice | Re-show the 3-phase table: "Pick 1, 2, or 3 — or name a skill." |
|
|
@@ -11,21 +11,18 @@ _Auto-generated by QA Agent. Updated after each run on this product._
|
|
|
11
11
|
- **Environment**: {staging | dev | prod | unknown}
|
|
12
12
|
- **Auth Method**: {form_login | SSO | token | none}
|
|
13
13
|
- **Login URL**: {LOGIN_URL or same as App URL}
|
|
14
|
-
- **OTP Required**: {yes —
|
|
14
|
+
- **OTP Required**: {yes — code in .env QA_OTP_CODE | no}
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- **Password**: {PASSWORD}
|
|
19
|
-
|
|
20
|
-
_Note: Store real credentials here only in local dev. Use env vars in CI._
|
|
16
|
+
_Credentials are NEVER stored in this file — they live only in the gitignored `.env`
|
|
17
|
+
(`QA_USERNAME` / `QA_PASSWORD`)._
|
|
21
18
|
|
|
22
19
|
---
|
|
23
20
|
|
|
24
21
|
## Runs Log
|
|
25
22
|
|
|
26
|
-
| Date | Card |
|
|
27
|
-
|
|
28
|
-
| {YYYY-MM-DD} | {CARD-ID} | {
|
|
23
|
+
| Date | Card | Phase | Outcome | Bugs Filed | Reuse % | Notes |
|
|
24
|
+
|------|------|-------|---------|------------|---------|-------|
|
|
25
|
+
| {YYYY-MM-DD} | {CARD-ID} | {Manual / Automation / Both} | {PASSED / BUGS FOUND / PARTIAL} | {bug keys} | {step reuse % for automation runs, — for manual} | {one-line summary} |
|
|
29
26
|
|
|
30
27
|
---
|
|
31
28
|
|
|
@@ -39,9 +36,9 @@ _Note: Store real credentials here only in local dev. Use env vars in CI._
|
|
|
39
36
|
|
|
40
37
|
## Covered Flows
|
|
41
38
|
|
|
42
|
-
| Flow | Scenarios | Card | Date |
|
|
43
|
-
|
|
44
|
-
| {e.g. User Login} | {n} | {CARD-ID} | {date} |
|
|
39
|
+
| Flow | Scenarios | Feature file | Card | Date |
|
|
40
|
+
|------|-----------|--------------|------|------|
|
|
41
|
+
| {e.g. User Login} | {n} | {path or — for manual} | {CARD-ID} | {date} |
|
|
45
42
|
|
|
46
43
|
---
|
|
47
44
|
|
|
@@ -55,4 +52,4 @@ _Note: Store real credentials here only in local dev. Use env vars in CI._
|
|
|
55
52
|
|
|
56
53
|
## Environment Notes
|
|
57
54
|
|
|
58
|
-
{Freeform: OTP
|
|
55
|
+
{Freeform: OTP behaviour, test data patterns, known flaky areas, redirect quirks, API base URL, etc. — no secrets}
|
|
@@ -16,4 +16,4 @@ The QA Agent writes to `{PRODUCT}/context.md` automatically at the end of every
|
|
|
16
16
|
- Runs log (one row per QA session)
|
|
17
17
|
- Known bugs accumulated across all runs
|
|
18
18
|
- Covered test flows
|
|
19
|
-
- Environment notes (URLs, credentials
|
|
19
|
+
- Environment notes (URLs, quirks — never credentials; those live only in `.env`)
|