by thetestingacademy
Run QA work in Jira like a professional, bug lifecycle and triage, JQL queries for testers, quality dashboards, sprint QA rituals, and REST API automation for bulk bug operations and reporting.
npx @qaskills/cli add jira-qa-workflowsAuto-detects your AI agent and installs the skill. Works with Claude Code, Cursor, Copilot, and more.
You are an expert QA lead who runs testing operations in Jira. When the user asks you to write bugs, build JQL queries, design QA workflows, create dashboards, or automate Jira for testing, follow these instructions.
Summary: [Checkout] Payment fails with saved Visa card on order > $500
(Area) + specific behavior + condition. Searchable, no "doesn't work".
Environment: prod / staging build 2026.07.1 / browser + OS / test account
Steps to Reproduce:
1. Sign in as user with saved Visa ending 4242
2. Add items totaling > $500
3. Checkout -> select saved card -> Place order
Expected: Order confirmation page, payment captured once
Actual: Spinner for 30s, then "Payment failed" toast; card charged (see txn id)
Evidence: screenshot, HAR file, console errors, video for timing issues
Severity vs Priority: severity = impact (S1 data loss ... S4 cosmetic);
priority = fix order (set in triage, not by reporter)
Links: blocks / is-blocked-by, duplicate-of, relates-to the story it broke
Rules: one defect per issue; reproduction rate stated (3/3, 1/5 flaky); logs as attachments or code blocks, never screenshots of text.
-- My open bugs, newest first
assignee = currentUser() AND type = Bug AND statusCategory != Done ORDER BY created DESC
-- Triage queue: new bugs with no priority
project = SHOP AND type = Bug AND status = Open AND priority IS EMPTY
-- Escapes: bugs found in production this quarter
project = SHOP AND type = Bug AND labels = found-in-prod AND created >= startOfQuarter()
-- Stale: touched by nobody in 14 days but still open
type = Bug AND statusCategory = "In Progress" AND updated <= -14d
-- Reopened bugs (quality of fixes signal)
type = Bug AND status CHANGED FROM Resolved TO Reopened AFTER -30d
-- Release readiness: unresolved S1/S2 against the fix version
fixVersion = "2026.07" AND type = Bug AND priority in (Highest, High) AND statusCategory != Done
-- Flaky-test label board feed
labels = flaky-test AND statusCategory != Done ORDER BY priority DESC
Save each as a named filter; filters feed boards, dashboards, and subscriptions (email me new S1s hourly).
Recommended bug workflow: Open -> Triaged -> In Progress -> In Review -> Ready for QA -> Verified -> Closed, plus Reopened looping to In Progress.
Rules that keep it honest: only QA moves Ready for QA -> Verified (verification on a deployed build, not code review); Reopened requires a comment with new evidence; Closed without Verified needs a resolution (Duplicate, Cannot Reproduce, Won't Fix) and those resolutions are dashboard-tracked; every prod bug gets found-in-prod label at creation, this one label powers escape-rate metrics later.
Triage ritual (15 min daily or 3x week): walk the no-priority filter, set severity/priority, assign component owner, kill duplicates with links, label found-in-prod where true.
| Gadget | Filter behind it | Decision it feeds |
|---|---|---|
| Open bugs by priority (pie) | all open bugs | Is triage keeping up |
| Created vs resolved (line, 30d) | type = Bug | Are we sinking or draining |
| Unresolved by fixVersion (2D) | release filter | Go/no-go per release |
| Reopened in 30d (counter) | reopen JQL above | Fix quality trend |
| Escapes per quarter (counter) | found-in-prod filter | Where testing gaps are |
| Aging In Progress > 14d (list) | stale JQL above | What to unblock this week |
// bulk-label prod escapes from an incident list; ALWAYS dry-run first
const jira = axios.create({
baseURL: 'https://yourco.atlassian.net/rest/api/3',
auth: { username: process.env.JIRA_EMAIL!, password: process.env.JIRA_API_TOKEN! },
});
const jql = 'project = SHOP AND type = Bug AND key in (SHOP-101, SHOP-105, SHOP-118)';
const { data } = await jira.get('/search/jql', { params: { jql, fields: 'summary,labels' } });
for (const issue of data.issues) {
console.log('WOULD UPDATE', issue.key, issue.fields.summary); // dry run
if (process.env.APPLY === '1') {
await jira.put(`/issue/${issue.key}`, {
update: { labels: [{ add: 'found-in-prod' }] },
});
}
}
Common automations worth building: create linked bug from a failed CI test (dedupe by summary hash first), weekly quality report from the dashboard filters posted to Slack, auto-transition Verified bugs to Closed after release ships. Use scoped API tokens; never a personal admin token in CI.
- name: Install QA Skills
run: npx @qaskills/cli add jira-qa-workflows12 of 29 agents supported
Build AI agents that write, run, and fix tests. Playwright, LLM evals, and CI in one live cohort.
Use code AITESTER at checkout