Testland
Browse all skills & agents

bug-lifecycle-reference

Pure-reference catalog of defect lifecycle states and transitions. Defines the ISTQB-canonical states (new / open / assigned / in-progress / fixed / verified / closed / reopened / deferred / rejected / duplicate) and the transitions between them, distinguishes the ISTQB terms (error → fault / defect → failure), maps the lifecycle to the standard Jira / Linear / GitHub Issues workflows, and cites IEEE 1044-2009 and ISO/IEC/IEEE 29119-3 for the canonical anchors. Use as the lifecycle vocabulary for bug-report review, duplicate detection, and the platform-workflow skills.

Install with skills.sh (any agent)

npx skills add testland/qa --skill bug-lifecycle-reference
View source

bug-lifecycle-reference

Catalogs the ISTQB-canonical defect lifecycle and maps it to Jira, Linear, and GitHub Issues workflows. Consumed by the platform-workflow skills (jira-bug-workflow-runner, linear-bug-workflow-runner, github-issues-bug-workflow) for state-transition logic.

When to use

  • Aligning a team's tracker configuration with the ISTQB-canonical vocabulary.
  • Reviewing a bug report's current state against expected transitions (e.g., is "Closed" appropriate before verification?).
  • Onboarding a tester to the canonical defect vocabulary.

How to use

  1. Read the defect's current tracker state and map it to a canonical state via references/tracker-vocabulary-map.md.
  2. Find that canonical state in the allowed-transitions table.
  3. Check the proposed next state is in the allowed set; if it matches a forbidden transition (New -> Closed, Fixed -> Closed without Verified), flag it.
  4. Apply the guardrails (triage SLA, verification gate, reopen audit, duplicate / deferred linking) before recording the move.
  5. Confirm ISTQB term usage is correct (fault vs failure) in the report wording.
  6. Record the transition; for Duplicate / Deferred / Rejected attach the required link or reason.
  7. For metrics, count Reopened separately from New inflow.

ISTQB terms - error, fault, defect, failure, anomaly

Per the ISTQB Glossary (glossary.istqb.org (opens in new window)):

TermDefinition
ErrorA human action that produces an incorrect result.
Fault (synonyms: defect, bug)A manifestation of an error in software.
DefectAn imperfection or deficiency in a work product where it does not meet its requirements or specifications. Synonyms: bug, fault, problem.
FailureAn event in which a component or system does not perform a required function within specified limits. Failure is what users experience; fault is what produced it.
AnomalyAny condition that deviates from expectation. Broader than defect - could be a usability issue, a documentation gap, or a defect.

These terms are surprisingly often misused: developers say "the bug failed in production" when they mean "the failure, caused by the fault, occurred in production." The lifecycle below tracks defects (faults), not failures (events).

Canonical lifecycle states

The standard set per IEEE 1044-2009 "Standard Classification for Software Anomalies" and ISO/IEC/IEEE 29119-3:2021 "Test documentation":

StateMeaningTypical owner
NewJust reported. Not yet triaged.Reporter
Open (or Acknowledged)Triaged; confirmed as a real defect.Triage lead
AssignedA developer / team owns it.Engineering manager
In ProgressActive investigation / fix.Assigned developer
Fixed (or Resolved)Code change merged; awaiting verification.Assigned developer
Verified (or Tested)A tester confirmed the fix.QA
ClosedDefect lifecycle complete.Release manager / QA
ReopenedVerification failed; back to assigned.QA / Reporter
DeferredReal defect, fix postponed (next release / never).Product manager
Rejected (or Not a Bug)Triage concluded this isn't a defect (misuse, by design, dup).Triage lead
DuplicateAlready tracked as another defect. Link to canonical.Triage lead

Cite: ISO/IEC/IEEE 29119-3:2021 §6 "Test documentation - Anomaly report" - section enumerates the recommended fields and lifecycle states. Cite by stable ID; full text behind iso.org paywall.

State transition diagram

                +-----+
                | New |
                +-----+
                   |
       triage      |  (or reject / dup)
                   v
   +-----------+       +-----------+
   |   Open    |------>| Rejected  |
   +-----------+       +-----------+
        |                     ^
        |                     |
   assign                     |
        v                     |
   +-----------+              |
   | Assigned  |              |
   +-----------+              |
        |                     |
        v                     |
   +-----------+   defer +-----------+
   |In Progress|-------->| Deferred  |
   +-----------+         +-----------+
        |
        v
   +-----------+
   |   Fixed   |
   +-----------+
        |
   verify
        |
        +------- fail ----+
        |                 |
        v                 v
   +-----------+   +-----------+
   | Verified  |   | Reopened  |
   +-----------+   +-----------+
        |                 |
        v          assigned (back to In Progress)
   +-----------+
   |  Closed   |
   +-----------+

Allowed transitions (defensible):

FromAllowed →
NewOpen, Rejected, Duplicate
OpenAssigned, Deferred, Rejected
AssignedIn Progress, Deferred, Reopened
In ProgressFixed, Deferred
FixedVerified, Reopened
VerifiedClosed, Reopened (rare - late finding)
ReopenedAssigned, In Progress
DeferredOpen, Closed (wontfix)

Forbidden transitions (smells):

  • New → Closed (skips triage + verification - only legitimate for spam / duplicate where triager catches it immediately)
  • Assigned → Closed (no fix, no verification - what was closed?)
  • Fixed → Closed without Verified (no verification - possibly the fix never worked)
  • Closed → anything except Reopened (reopening is the only way back)

Tracker-vocabulary map

The canonical lifecycle maps to platform-specific terminology across Jira, Linear, and GitHub Issues, with per-platform notes on how configurable each tracker's states are. See the full cross-platform table in references/tracker-vocabulary-map.md.

Recommended state-transition guardrails

The platform-workflow skills enforce these:

GuardrailRule
Triage SLANew → Open or Rejected within 1 business day
Verification gateFixed → Closed must pass via Verified
Reopen auditReopened transitions are tracked; >3 reopens on the same defect signals fix-quality issues
Deferred reviewDeferred items reviewed at sprint planning; auto-expire to Closed (wontfix) after N sprints
Duplicate linkingDuplicate transitions require duplicate_of: link to canonical

Worked example

A Jira ticket sits in In Review and a developer wants to drag it straight to Done.

  1. Map the tracker state: In Review -> canonical Fixed (per references/tracker-vocabulary-map.md); Done -> canonical Closed.
  2. The requested move is therefore Fixed -> Closed.
  3. Check the allowed-transitions table: Fixed allows only Verified or Reopened. Fixed -> Closed is a forbidden transition ("Fixed -> Closed without Verified").
  4. Apply the verification gate guardrail: a tester must confirm the fix first, moving it to Verified.

Result: block the drag to Done, route the ticket to a QA verification step, and only allow Verified -> Closed once the fix is confirmed.

Anti-patterns

Anti-patternWhy it failsFix
"Closed" used as "Done" without verificationDefect re-emerges in productionRequire Verified → Closed transition
All defects start in "Assigned" with no triageTriage data lost; metrics unreliableNew → Open → Assigned (triage step is informative)
Reopened defects re-counted as new in metricsInflates inflow / understates fix qualityDistinguish New vs Reopened in dashboards
Deferred = forgottenDeferred items accumulate; technical debtDeferred review at every sprint planning
Multiple "Open" subtypes ("In Triage", "Triaged", "Confirmed")Workflow becomes opaque; reporters don't know which state means whatCollapse to fewer states; use fields for nuance
Direct New → Closed by triageLost signal - was it spam? duplicate? rejected?Always transition through a meaningful state
Different teams use different workflows in the same trackerCross-team metrics impossibleStandardise to the canonical lifecycle above

Limitations

  • Workflow customisation is the norm. Real-world Jira / Linear configurations often add custom states (UX Review, Legal Review, Customer Confirmation). The canonical lifecycle is the floor, not the ceiling.
  • State enumeration vs. label-based. GitHub Issues' Open / Closed binary is impoverished; teams supplement with labels and Projects status columns. This reference treats the effective lifecycle (state + label + assignee) as a single concept.
  • The terms "bug" and "defect" remain interchangeable in practice. ISTQB makes the distinction sharp; most trackers don't. Adopt the canonical vocabulary or accept the colloquial use - but don't mix midstream.
  • Severity / priority are separate axes. State doesn't capture how bad / how urgent. See severity-vs-priority-reference.

References

  • ISTQB Glossary - glossary.istqb.org (opens in new window). Canonical definitions of error / fault / defect / failure / anomaly.
  • IEEE 1044-2009 "Standard Classification for Software Anomalies" - cite by stable ID; defines defect lifecycle.
  • ISO/IEC/IEEE 29119-3:2021 "Software and systems engineering - Software testing - Part 3: Test documentation" §6 - defines anomaly-report fields and lifecycle.
  • Atlassian "Configure issue workflows" - Jira default workflows.
  • Linear documentation "Workflow states" - fixed enum + per-team subdivision.
  • GitHub Issues docs - Open / Closed + labels + Projects.
  • Related references: severity-vs-priority-reference, defect-taxonomy-istqb.
  • Consumed by: bug-report-from-failure and platform-workflow skills.
  • Related neighbour: bug-report-template (reproduction-focused; this reference is workflow / lifecycle / taxonomy-focused).

Tracker-vocabulary map

View source (opens in new window)

Tracker-vocabulary map

The canonical ISTQB / IEEE lifecycle maps to platform-specific terminology across Jira, Linear, and GitHub Issues.

ISTQB / IEEEJira (default workflow)Linear (default workflow)GitHub Issues (default + Projects)
NewTo DoBacklogOpen + label triage
OpenIn Triage (custom)TodoOpen + label confirmed
Assigned(Assignee set)In Progress + assigneeOpen + assignee
In ProgressIn ProgressIn ProgressOpen + linked PR draft
FixedIn ReviewIn ReviewOpen + linked PR ready
VerifiedDone (pre-release)DoneClosed (PR merged) - but often kept Open until verified
ClosedDoneDoneClosed
ReopenedReopenedReopened (custom)Reopened
DeferredWon't Do (deferred subtype)Cancelled (with reason)Closed not-planned
RejectedWon't Do / Cannot ReproduceCancelled with reasonClosed not-planned + label not-a-bug
DuplicateResolved as Duplicate (link to canonical)Cancelled with Duplicate of: linkClosed + comment Duplicate of #N

Per the platform docs (Atlassian "Issue workflow", Linear "Workflow states", GitHub "Issue templates"):

  • Jira workflow is fully configurable - the table reflects the default Software project template.
  • Linear workflow states are fixed enums (Backlog, Todo, In Progress, In Review, Done, Cancelled) but each can be subdivided per team.
  • GitHub Issues has only Open / Closed as states; richer lifecycle requires Projects (status column) + labels.

Related skills

azuredevops-bug-workflow

Authors and triages Bug work items in Azure DevOps Boards via the Work Item Tracking REST API (api-version 7.1) - Bug creation with JSON Patch, state transitions across New/Active/Resolved/Closed, and WIQL queries for triage queues and duplicate detection. Deep operational blocks (field-value fetch, PR / build artifact links, bulk close, az boards CLI, CI wiring) live in references/. Use when programmatically managing Azure DevOps Bug lifecycle states: creating from CI failures, triaging open defect queues, transitioning states in bulk, or attaching traceability links to builds and pull requests.

bug-report-from-failure

On-demand builder that converts a SINGLE test failure record (JUnit XML, Allure JSON, pytest --tb=short, Playwright HTML, Cypress mocha-junit) into a structured, tracker-agnostic bug SPEC: extracts test name, assertion, stack trace, environment, and artefacts, and proposes severity, defect type (IEEE 1044), and a root-cause hypothesis (ISTQB CTAL-TA), then hands the JSON spec to a jira/linear/github-issues-bug-workflow runner to file. Use when you already hold a failure artefact and want one classified, ready-to-file report. Distinct from the event-driven CI orchestrator that triggers automatically on a pipeline failure and files in bulk, and from screen-recording-driven bug reporting; this is the on-demand, single-record spec builder.

confirmation-testing-workflow

Procedure for proving that a claimed defect fix actually reached the build under test and actually works. Covers the merge-base ancestry check that proves the running build contains the fix commit rather than trusting a version label, the priority order for choosing which reproduction to re-run, and the VERIFIED / NOT FIXED / BLOCKED verdict table whose governing rule is that any ambiguous, flaky, or unreproducible result resolves to BLOCKED and is never guessed. Scoped to ISTQB confirmation testing (does this specific fix work?), not regression testing (did the fix break something else?), and not triage or severity assignment. Use when a developer has marked a defect Fixed and someone must decide whether it moves to Verified or back to Reopened.

defect-taxonomy-istqb

Pure-reference catalog of defect categorisation taxonomies. Covers the IEEE 1044-2009 anomaly classification (anomaly class, anomaly type, anomaly severity, root cause category), the ISTQB CTAL-TA root-cause taxonomy (requirements / design / implementation / interface / test-data / build-environment), and the Orthogonal Defect Classification (ODC) eight-attribute framework. Maps each taxonomy to a worked example showing how the same defect classifies under each. Use to categorise defects consistently across a team, drive root-cause analysis, and inform process-improvement decisions (where in the SDLC do we leak the most defects?).

github-issues-bug-workflow

Author and run GitHub Issues bug workflows via REST API (2026-03-10): issue creation, state changes (open / closed with `state_reason`), label-based severity/priority classification, and comment attachment. Covers `POST /repos/{owner}/{repo}/issues`, `PATCH` for `state_reason` transitions (completed / not_planned / duplicate / reopened), and label conventions for GitHub's binary open/closed model; Projects v2, `gh` CLI, and CI wiring live in references/. Use when programmatically managing the GitHub Issues bug lifecycle; for the same workflow on another tracker use azuredevops-bug-workflow, jira-bug-workflow-runner, or linear-bug-workflow-runner.

jira-bug-workflow-runner

Jira Cloud bug workflow runner using the REST API v3: issue creation with an ADF description, runtime transition lookup and apply, JQL search for triage queues and duplicate detection, severity/priority field updates, label-based classification (severity/priority/regression), and idempotent CI-driven filing from JUnit XML test failures. Use when the target tracker is Jira Cloud and the task involves Jira lifecycle states (create, triage, transition, close). Distinct from a platform-agnostic event-driven CI defect filer, and from linear-bug-workflow-runner / github-issues-bug-workflow for other trackers.

linear-bug-workflow-runner

Author and run Linear bug workflows via the GraphQL API: issue creation, state transitions (workflowState assignment), priority assignment (0 No priority / 1 Urgent / 2 High / 3 Medium / 4 Low), label-based classification, search by team and content. Covers the issueCreate mutation, issueUpdate for state transitions, the workflowStates query for per-team state IDs, and Linear's API-key vs OAuth Bearer auth modes; resolve-by-type, CI wiring, and result parsing live in references/. Use when the target tracker is Linear specifically; for other trackers use jira-bug-workflow-runner (Jira) or github-issues-bug-workflow (GitHub Issues). Files and transitions the issue; reproducing the defect is a separate concern.

severity-vs-priority-reference

Pure-reference catalog distinguishing defect severity (impact on the system / user) from defect priority (urgency of fix), each on its own axis. Enumerates the canonical 5-point severity scale (Critical / High / Medium / Low / Trivial) and the 5-point priority scale (Immediate / High / Medium / Low / Deferred), explains why they must be tracked separately (a Critical/Deferred legacy bug exists; a Trivial/Immediate spelling bug on the homepage exists), maps to IEEE 1044-2009 severity classes, and ties to bug-lifecycle-reference state transitions. Use when triaging a defect, configuring a tracker's severity/priority fields, or reviewing whether a bug report assigned them consistently.