@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.
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: qa-agent
3
3
  description: >
4
- Master QA orchestrator that follows the flowchart: Jira Card Input
5
- Automation Testing (GherkinStep Definitions POM Automated Testing)
6
- or Manual Testing (UI Testing/Figma Manual Testing Bug Reporting
7
- Test Charter)End-to-End Testing.
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 ~80 lines. Do NOT load individual SKILL.md files until you dispatch to that skill.
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 and artifact locations.
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
- ## Step 0 — Load Product Context
31
-
32
- Run this before asking the user anything.
33
-
34
- ### 0a Try to derive the product from the user's input
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
- If the user's message contains a Jira-style card ID (e.g. `QE-89`, `INDY-12`, `ZP-445`):
37
- - Extract the project key prefix: `QE`, `INDY`, `ZP`
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
- If no card ID in the message yet, set `PRODUCT_FOUND = false` and proceed to Step 1 normally.
38
+ ---
43
39
 
44
- ### 0bIf context found: pre-populate and skip questions
40
+ ## Step 0 Load Environment + Card ID
45
41
 
46
- Read the context file. Extract and store:
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
- **These values are silently pre-loaded. Do NOT announce them to the user unless asked.**
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
- Show one line only:
57
- > "Context loaded for **{PRODUCT_NAME}** — {n} prior runs, {n} known bugs."
49
+ ### 0b Extract the Jira card ID
58
50
 
59
- In any subsequent step that would ask for App URL or credentials — check these
60
- `CTX_*` values first. If set, use them silently and skip the question entirely.
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
- ### 0cIf context not found
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
- Proceed normally. After the run completes (Step 6) the context will be written for
65
- the first time, so the NEXT run benefits automatically.
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
- ### 0d — --reset-context flag
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
- - Proceed with fresh input collection as if no context exists
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 — Collect Jira Card Input
72
+ ## Step 1 — Gather Product Context
93
73
 
94
- If the user has not already provided a Jira card ID, ask once:
74
+ ### 1a Load the product context file
95
75
 
96
- > **QA Agent Ready**
97
- >
98
- > Please enter the **Jira card ID** to begin (e.g. `PROJ-123`).
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
- Wait for the user's response before proceeding.
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
- ## Step 2 Detect Intent
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
- ### If user provides a Jira card ID only (no other instruction)
90
+ ### 1b Fetch the Jira card
118
91
 
119
- Ask:
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
- > Got it **[CARD-ID]**. Which path do you want to run?
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 3Pre-flight MCP Check
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 2Ask Relevant Questions (gaps only)
166
101
 
167
- **Atlassian MCP** always treat as available (connected in this environment).
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
- **Playwright MCP** required for manual-testing and ui-test-figma. Before invoking
170
- either, display this reminder once:
106
+ Candidate questions, in order:
171
107
 
172
- > "Playwright MCP is required for this step. Confirm the MCP server is running,
173
- > then reply **ready** to proceed."
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
- Wait for confirmation before dispatching.
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 4Dispatch
126
+ ## Step 3Phase Selection
180
127
 
181
- ### [AUTOMATION BRANCH]
128
+ Ask (unless the user's original message already picked a phase — see intent table):
182
129
 
183
- Announce:
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
- > **Automation Testing[CARD-ID]**
186
- > Running: Gherkin Creation → Step Definitions → POM Creation → Automated Testing
140
+ ### Intent shortcutsskip the menu when the user already said it
187
141
 
188
- Then invoke:
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
- The automation skill runs all three phases internally (Gherkin → Step Defs → POM)
195
- with mandatory user confirmation gates between phases. Once complete, report back:
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
- > **Automation Testing complete for [CARD-ID].**
198
- > Artifacts: Feature file · Step definitions · POM class · Dry-run PASSED
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
- ### [MANUAL BRANCH]
164
+ ## Step 4 — Pre-flight Check + Dispatch
203
165
 
204
- Announce:
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
- > **Manual Testing[CARD-ID]**
207
- > Running: UI Testing (Figma) → Manual Testing → Bug Reporting → Test Charter
171
+ ### Parameter blockpassed to every dispatched skill
208
172
 
209
- Then invoke:
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
- Skill: manual-testing args: [CARD-ID]
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
- The manual-testing skill orchestrates all four sub-steps internally:
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
- Once complete, report back:
189
+ > **Phase 1 — Manual Testing — [CARD-ID]**
222
190
 
223
- > **Manual Testing complete for [CARD-ID].**
224
- > Artifacts: UI comparison report · Test execution report · Bugs filed · Charter published
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
- ### [FULL E2E PIPELINE]
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
- Activate when the user selects option 6 / says "full QA" / "run everything" / "end to end".
201
+ ### Phase 2 Write Automation
231
202
 
232
- #### Pre-pipeline setup
203
+ > **Phase 2 — Automation — [CARD-ID]**
233
204
 
234
- **If AUTO_APPROVE = true (context loaded with URL and credentials):**
205
+ ```
206
+ Skill: automation args: [CARD-ID] + parameter block
207
+ ```
235
208
 
236
- Skip all setup questions. Announce:
237
- > "**Full E2E Pipeline [CARD-ID]** running with saved context for {PRODUCT_NAME}.
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
- Proceed immediately to Phase 1 — Automation Testing.
212
+ On completion report:
213
+ > **Phase 2 complete for [CARD-ID].** Feature + steps + POM · reuse {X}% · test run {PASSED/FAILED}
241
214
 
242
- **If AUTO_APPROVE = false (no context, first run, or reset):**
215
+ ### Phase 3 Run Both (manual first, then automation)
243
216
 
244
- Ask once in a single message:
245
- > **Full E2E Pipeline Quick Setup for [CARD-ID]**
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 3Full QA [CARD-ID]** running with saved context for {PRODUCT_NAME}.
219
+ > App: {APP_URL} | Env: {environment} | Auto-approve: ON"
250
220
 
251
- Wait for response. Then run the pipeline in order:
221
+ Order is fixed:
252
222
 
253
223
  ```
254
- Phase 1 Automation Testing
255
- Skill: automation (Gherkin Step Defs POM Dry Run)
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
- #### Between phases
264
-
265
- After each phase completes, display:
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
- > "Phase [N] complete. Moving to Phase [N+1]..."
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 1 — Automation Testing : Gherkin + Step Defs + POM generated, dry-run PASSED
278
- Phase 2 — Manual Testing : UI comparison + tests executed + bugs filed + charter published
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
- Then immediately invoke the cleanup skill:
241
+ ### Standalone Dispatch
285
242
 
286
- ```
287
- Skill: delete-files
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
- ### Post-pipeline cleanup (all branches)
249
+ ## Step 5 Regression Suggestion
293
250
 
294
- After **any** branch completes successfully Automation, Manual, or Full E2E
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
- Skill: delete-files
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
- The delete-files skill will list all files in `outputs/`, present three options
303
- (delete all / delete selected / keep all), and wait for user consent before
304
- removing anything.
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 (Automation, Manual, or Full E2E), before `delete-files`.
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`, "Indy Auction" → `INDY`, "ZoodPay Admin" → `ZOODPAY_ADMIN`
318
- - Do NOT ask the user unless the name truly cannot be derived. If it can't, ask once: "What product does this card belong to?"
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` as the template.
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 (`CTX_APP_URL` or value collected this run), environment (detect from URL — staging/dev/prod), auth method, login URL, OTP required
339
- - **Credentials**: Username and Password collected during this run
340
- - **Runs Log**: one row for this run — date, card, branch (Automation/Manual/Full E2E), outcome, bugs filed, one-line note
341
- - **Known Bugs**: rows for every bug ID filed during this run (or placeholder row if none)
342
- - **Covered Flows**: rows for every Gherkin Rule (automation) or test charter section (manual) exercised
343
- - **Element Selectors**: rows from `outputs/automation-hints-{CARD_ID}-*.md` if the file exists read the "Elements Discovered" table and copy each row
344
- - **Environment Notes**: any observations noted during the run (OTP behaviour, redirect URLs, test data quirks)
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** — for each bug filed this run: add a new row if the bug ID is not present; update the Status column only if it is already present
352
- 3. **Covered Flows** — append any new flows not already listed (match by Flow name)
353
- 4. **Element Selectors** — merge from `outputs/automation-hints-{CARD_ID}-*.md` if it exists: append each row whose Element Label is not already in the table
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
- Use the Write tool to save `context.md`.
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
- ## Step 5 Standalone Skill Dispatch
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
- | Target | Invocation |
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
- The skill handles its own input collection.
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
- | Jira card ID not provided when needed | Ask once before dispatching |
387
- | Card not found in Jira | Ask user to verify the key |
388
- | A phase fails | Report the failure, ask whether to retry or skip to next phase |
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 input after menu shown | Re-display options with: "I didn't catch thatpick a number or describe what you need." |
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 — always use 999999 | no}
14
+ - **OTP Required**: {yes — code in .env QA_OTP_CODE | no}
15
15
 
16
- ## Credentials
17
- - **Username**: {USERNAME}
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 | Branch | Outcome | Bugs Filed | Notes |
27
- |------|------|--------|---------|------------|-------|
28
- | {YYYY-MM-DD} | {CARD-ID} | {Automation / Manual / Full E2E} | {PASSED / BUGS FOUND / PARTIAL} | {bug keys} | {one-line summary} |
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 bypass values, test data patterns, known flaky areas, redirect quirks, API base URL, etc.}
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 format, quirks)
19
+ - Environment notes (URLs, quirks — never credentials; those live only in `.env`)