@roopesh.yadava/qa-pack 1.0.3

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.
@@ -0,0 +1,391 @@
1
+ ---
2
+ name: qa-agent
3
+ description: >
4
+ Master QA orchestrator that follows the flowchart: Jira Card Input →
5
+ Automation Testing (Gherkin → Step Definitions → POM → Automated Testing)
6
+ or Manual Testing (UI Testing/Figma → Manual Testing → Bug Reporting →
7
+ Test Charter) → End-to-End Testing.
8
+ Triggers when the user says: "qa agent", "start qa", "run qa", "full QA
9
+ for [CARD-ID]", "test [CARD-ID]", "automate [CARD-ID]", or invokes /qa-agent.
10
+ user-invocable: true
11
+ ---
12
+
13
+ # QA Agent — Master Orchestrator
14
+
15
+ ## Context Engineering
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.
18
+ This keeps the startup context budget small. -->
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.
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
+ ---
29
+
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
35
+
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
41
+
42
+ If no card ID in the message yet, set `PRODUCT_FOUND = false` and proceed to Step 1 normally.
43
+
44
+ ### 0b — If context found: pre-populate and skip questions
45
+
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
53
+
54
+ **These values are silently pre-loaded. Do NOT announce them to the user unless asked.**
55
+
56
+ Show one line only:
57
+ > "Context loaded for **{PRODUCT_NAME}** — {n} prior runs, {n} known bugs."
58
+
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.
61
+
62
+ ### 0c — If context not found
63
+
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.
66
+
67
+ ### 0d — --reset-context flag
68
+
69
+ If the user's message contains `--reset-context`:
70
+ - Set `PRODUCT_FOUND = false`
71
+ - Ignore any existing context file for this run
72
+ - Proceed with fresh input collection as if no context exists
73
+ - At Step 6, overwrite the existing context file (replace, don't merge)
74
+ - Confirm: "Context reset — starting fresh for {PRODUCT_NAME}."
75
+
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
+ ---
91
+
92
+ ## Step 1 — Collect Jira Card Input
93
+
94
+ If the user has not already provided a Jira card ID, ask once:
95
+
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 |
110
+
111
+ Wait for the user's response before proceeding.
112
+
113
+ ---
114
+
115
+ ## Step 2 — Detect Intent
116
+
117
+ ### If user provides a Jira card ID only (no other instruction)
118
+
119
+ Ask:
120
+
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] |
152
+
153
+ ---
154
+
155
+ ## Step 3 — Pre-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) |
166
+
167
+ **Atlassian MCP** — always treat as available (connected in this environment).
168
+
169
+ **Playwright MCP** — required for manual-testing and ui-test-figma. Before invoking
170
+ either, display this reminder once:
171
+
172
+ > "Playwright MCP is required for this step. Confirm the MCP server is running,
173
+ > then reply **ready** to proceed."
174
+
175
+ Wait for confirmation before dispatching.
176
+
177
+ ---
178
+
179
+ ## Step 4 — Dispatch
180
+
181
+ ### [AUTOMATION BRANCH]
182
+
183
+ Announce:
184
+
185
+ > **Automation Testing — [CARD-ID]**
186
+ > Running: Gherkin Creation → Step Definitions → POM Creation → Automated Testing
187
+
188
+ Then invoke:
189
+
190
+ ```
191
+ Skill: automation args: [CARD-ID]
192
+ ```
193
+
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:
196
+
197
+ > **Automation Testing complete for [CARD-ID].**
198
+ > Artifacts: Feature file · Step definitions · POM class · Dry-run PASSED
199
+
200
+ ---
201
+
202
+ ### [MANUAL BRANCH]
203
+
204
+ Announce:
205
+
206
+ > **Manual Testing — [CARD-ID]**
207
+ > Running: UI Testing (Figma) → Manual Testing → Bug Reporting → Test Charter
208
+
209
+ Then invoke:
210
+
211
+ ```
212
+ Skill: manual-testing args: [CARD-ID]
213
+ ```
214
+
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)
220
+
221
+ Once complete, report back:
222
+
223
+ > **Manual Testing complete for [CARD-ID].**
224
+ > Artifacts: UI comparison report · Test execution report · Bugs filed · Charter published
225
+
226
+ ---
227
+
228
+ ### [FULL E2E PIPELINE]
229
+
230
+ Activate when the user selects option 6 / says "full QA" / "run everything" / "end to end".
231
+
232
+ #### Pre-pipeline setup
233
+
234
+ **If AUTO_APPROVE = true (context loaded with URL and credentials):**
235
+
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"
239
+
240
+ Proceed immediately to Phase 1 — Automation Testing.
241
+
242
+ **If AUTO_APPROVE = false (no context, first run, or reset):**
243
+
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)
250
+
251
+ Wait for response. Then run the pipeline in order:
252
+
253
+ ```
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
261
+ ```
262
+
263
+ #### Between phases
264
+
265
+ After each phase completes, display:
266
+
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
273
+
274
+ ```
275
+ 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.
282
+ ```
283
+
284
+ Then immediately invoke the cleanup skill:
285
+
286
+ ```
287
+ Skill: delete-files
288
+ ```
289
+
290
+ ---
291
+
292
+ ### Post-pipeline cleanup (all branches)
293
+
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:
297
+
298
+ ```
299
+ Skill: delete-files
300
+ ```
301
+
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.
305
+
306
+ ---
307
+
308
+ ## Step 6 — Save Product Context
309
+
310
+ Run after any branch completes (Automation, Manual, or Full E2E), before `delete-files`.
311
+
312
+ ### 6a — Determine product name and folder
313
+
314
+ Derive from Jira card data already fetched:
315
+ - Use the Jira **project name** (not the key) as the display name
316
+ - 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?"
319
+
320
+ ```
321
+ PRODUCT_DIR = .claude/skills/qa-agent/product_context/{PRODUCT_FOLDER}/
322
+ CONTEXT_FILE = {PRODUCT_DIR}context.md
323
+ ```
324
+
325
+ ### 6b — Determine write mode
326
+
327
+ | Condition | Write mode |
328
+ |-----------|-----------|
329
+ | `--reset-context` was passed this run | OVERWRITE — replace entire file |
330
+ | File does not exist | CREATE — write fresh file from schema |
331
+ | File exists, no reset flag | MERGE — append/update, never overwrite existing rows |
332
+
333
+ ### 6c — On CREATE: write full context.md
334
+
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:
337
+
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)
345
+
346
+ ### 6d — On MERGE: update existing context.md
347
+
348
+ Read the file first, then make only these targeted updates:
349
+
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
354
+ 5. **All other sections** — leave completely untouched
355
+
356
+ ### 6e — Save and confirm
357
+
358
+ Use the Write tool to save `context.md`.
359
+
360
+ Print one line:
361
+ ```
362
+ Product context saved → .claude/skills/qa-agent/product_context/{PRODUCT_FOLDER}/context.md
363
+ ```
364
+
365
+ ---
366
+
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:
371
+
372
+ | Target | Invocation |
373
+ |--------|-----------|
374
+ | [ui-test-figma] | `Skill: ui-test-figma` |
375
+ | [bug-reporting] | `Skill: bug-reporting` |
376
+ | [test-charter] | `Skill: test-charter` |
377
+
378
+ The skill handles its own input collection.
379
+
380
+ ---
381
+
382
+ ## Error Handling
383
+
384
+ | Situation | Action |
385
+ |-----------|--------|
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 |
389
+ | User wants to stop mid-pipeline | Stop immediately, show completed and skipped phases |
390
+ | Playwright MCP unavailable | Pause, display reminder, wait for confirmation |
391
+ | Ambiguous input after menu shown | Re-display options with: "I didn't catch that — pick a number or describe what you need." |
@@ -0,0 +1,58 @@
1
+ # {Product Name} — QA Context
2
+
3
+ _Auto-generated by QA Agent. Updated after each run on this product._
4
+
5
+ ---
6
+
7
+ ## Product Info
8
+ - **Jira Project Key**: {PROJECT_KEY}
9
+ - **Product Name**: {PRODUCT_NAME}
10
+ - **App URL**: {APP_URL}
11
+ - **Environment**: {staging | dev | prod | unknown}
12
+ - **Auth Method**: {form_login | SSO | token | none}
13
+ - **Login URL**: {LOGIN_URL or same as App URL}
14
+ - **OTP Required**: {yes — always use 999999 | no}
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._
21
+
22
+ ---
23
+
24
+ ## Runs Log
25
+
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} |
29
+
30
+ ---
31
+
32
+ ## Known Bugs
33
+
34
+ | Bug ID | Title | Severity | Status | Card |
35
+ |--------|-------|----------|--------|------|
36
+ | — | No bugs filed yet | — | — | — |
37
+
38
+ ---
39
+
40
+ ## Covered Flows
41
+
42
+ | Flow | Scenarios | Card | Date |
43
+ |------|-----------|------|------|
44
+ | {e.g. User Login} | {n} | {CARD-ID} | {date} |
45
+
46
+ ---
47
+
48
+ ## Element Selectors
49
+
50
+ | Element Label | Page URL | Locator | Method | data-testid | Card |
51
+ |---------------|----------|---------|--------|-------------|------|
52
+ | {e.g. Email input} | {/login} | {input[name="email"]} | {testid / role / css} | {auth-email} | {CARD-ID} |
53
+
54
+ ---
55
+
56
+ ## Environment Notes
57
+
58
+ {Freeform: OTP bypass values, test data patterns, known flaky areas, redirect quirks, API base URL, etc.}
@@ -0,0 +1,19 @@
1
+ # Product Context Store
2
+
3
+ Each subfolder here is named after a product (e.g. `INDY/`, `POZYTRON/`, `ZOODPAY_ADMIN/`).
4
+
5
+ The QA Agent writes to `{PRODUCT}/context.md` automatically at the end of every run.
6
+
7
+ ## Folder naming rules
8
+ - Uppercase, no spaces — use `_` instead
9
+ - Derived from the Jira project name (not the card key)
10
+ - Examples:
11
+ - "Indy Auction" → `INDY/`
12
+ - "Pozytron Radiologia" → `POZYTRON/`
13
+ - "ZoodPay Admin" → `ZOODPAY_ADMIN/`
14
+
15
+ ## What context.md contains
16
+ - Runs log (one row per QA session)
17
+ - Known bugs accumulated across all runs
18
+ - Covered test flows
19
+ - Environment notes (URLs, credentials format, quirks)