This prompt is designed for QA engineers, support-to-engineering handoff teams, and triage leads who need to convert a raw, unstructured bug report into a structured, actionable defect record. The job-to-be-done is reducing the back-and-forth clarification that slows down defect triage by producing a complete, standardized defect description from the first pass. The ideal user has access to the original report, any attached screenshots or logs, and enough product knowledge to validate the model's inferences about severity and environment. The required context includes the raw bug report text, any available system environment details, and the target defect tracking system's field schema so the output can be mapped directly into Jira, Azure DevOps, or a similar tool.
Prompt
Bug Report to Structured Defect Prompt Template

When to Use This Prompt
Define the job, reader, and constraints for converting raw bug reports into structured, triage-ready defect records.
Do not use this prompt when the bug report describes a security vulnerability that requires responsible disclosure handling, when the report contains personally identifiable information (PII) that cannot be sent to a model, or when the defect involves complex multi-service interactions that require architecture diagrams to understand. This prompt is also inappropriate for performance defects that need precise metric baselines or for intermittent issues where reproduction steps cannot be inferred from a single report. In those cases, use the specialized sibling prompts for security, performance, or flaky behavior defects instead. The prompt assumes the input is a single, coherent bug report; if you are synthesizing multiple reports into one defect, use the Minimal Reproduction Steps Synthesis prompt.
Before wiring this prompt into a production triage pipeline, establish a human review step for severity and priority classification. The model can propose these fields, but misclassification can route critical defects to the wrong SLA queue. Also validate that the generated reproduction steps can actually be followed by a tester unfamiliar with the issue—if the steps reference UI elements ambiguously, flag the defect for manual enrichment. The next section provides the copy-ready template you can adapt to your defect schema and severity taxonomy.
Use Case Fit
Where the Bug Report to Structured Defect prompt works well and where it introduces risk. Use these cards to decide if this prompt fits your triage workflow.
Good Fit: Structured Triage Pipelines
Use when: raw bug reports arrive through a ticketing system and need consistent formatting for downstream automation. Guardrail: Validate that the output schema matches your defect tracker's required fields before ingestion.
Bad Fit: Real-Time Production Incidents
Avoid when: a production outage requires immediate human coordination. The prompt adds latency and may misinterpret urgent signals. Guardrail: Route P0 incidents to on-call engineers first; use this prompt only for post-incident defect documentation.
Required Input: Source Material with Symptoms
What to watch: the prompt cannot invent reproduction steps from vague complaints like 'it's broken.' Guardrail: Require at least a user description, error message, or screenshot. Return a structured clarification request instead of hallucinating steps when input is insufficient.
Operational Risk: Severity Misclassification
What to watch: the model may assign incorrect severity or priority based on language patterns rather than business impact. Guardrail: Always require human review of severity and priority fields before the defect enters the engineering backlog.
Operational Risk: Environment Assumptions
What to watch: missing environment details lead to non-reproducible defects that waste engineering time. Guardrail: Flag defects with incomplete environment data and route them back to the reporter before triage acceptance.
Scale Limit: Duplicate Detection
What to watch: the prompt processes one report at a time and cannot detect duplicates across a backlog. Guardrail: Pair this prompt with a deduplication step that checks similarity against existing defects before creating a new record.
Copy-Ready Prompt Template
A reusable prompt template with square-bracket placeholders that converts raw bug reports into structured, triage-ready defect records.
This template is the core instruction set you will send to the model. It is designed to be copied directly into your prompt management system, IDE, or orchestration code. Every variable is enclosed in square brackets and must be replaced at runtime by your application layer. The template forces the model to produce a predictable JSON output with fields essential for QA triage: title, severity, environment, reproduction steps, observed versus expected behavior, and an attachments summary. It also includes a self-evaluation block that asks the model to flag missing information and assess reproduction confidence before returning the final object.
textYou are a QA defect triage assistant. Your task is to convert the raw bug report below into a structured defect record. ## INPUT [Bug Report Text] ## CONSTRAINTS - Do not invent details not present in the input. If information is missing, mark it as "UNKNOWN" and flag it in the `missing_information` field. - Use the exact severity levels: BLOCKER, CRITICAL, MAJOR, MINOR, TRIVIAL. - Reproduction steps must be numbered, atomic actions that a new team member could follow. - The `observed_behavior` and `expected_behavior` fields must be direct quotes or tight paraphrases from the report when available. - If the report includes references to screenshots, logs, or attachments, summarize them in the `attachments_summary` field. ## OUTPUT_SCHEMA Return ONLY valid JSON matching this schema: { "defect_id": "string (generate a unique ID with prefix BUG-)", "title": "string (concise, descriptive summary)", "severity": "BLOCKER | CRITICAL | MAJOR | MINOR | TRIVIAL", "environment": { "os": "string | UNKNOWN", "browser": "string | UNKNOWN", "device": "string | UNKNOWN", "app_version": "string | UNKNOWN", "additional_context": "string | UNKNOWN" }, "reproduction_steps": [ { "step_number": number, "action": "string", "expected_result": "string | UNKNOWN" } ], "observed_behavior": "string", "expected_behavior": "string", "attachments_summary": [ { "reference": "string (filename or description from report)", "relevance": "string (what the attachment shows)" } ], "missing_information": ["string (list of fields or details not provided in the report)"], "reproduction_confidence": "HIGH | MEDIUM | LOW", "clarification_questions": ["string (questions to ask the reporter if confidence is LOW or MEDIUM)"], "triage_notes": "string (any additional observations for the triage team)" } ## EVALUATION CRITERIA Before returning the JSON, verify: 1. Every reproduction step is atomic and executable by a new team member. 2. Severity is justified by the observed impact described in the report. 3. All `UNKNOWN` fields are explicitly listed in `missing_information`. 4. `reproduction_confidence` reflects how complete the reproduction steps are. 5. No invented details appear outside of `triage_notes` (and those must be labeled as assumptions). ## RISK_LEVEL [HIGH | MEDIUM | LOW] - If HIGH: add a `human_review_required: true` field and flag any safety, security, or data-loss implications. - If MEDIUM: add a `human_review_recommended: true` field and note areas needing verification. - If LOW: proceed with automated triage.
To adapt this template, replace each bracketed placeholder with values from your application context. The [Bug Report Text] placeholder should receive the full, unedited text from the user's report, support ticket, or log snippet. The [RISK_LEVEL] placeholder should be set by your application logic based on the source of the report (e.g., production crash reports are HIGH, minor UI glitches from internal testing are LOW). If your defect tracking system uses different severity labels or environment fields, adjust the enum values and schema keys accordingly, but preserve the square-bracket placeholder pattern for any runtime-variable sections. The evaluation criteria block is designed to work as a self-check; if your model tends to skip it, move those checks into a separate validation prompt in your harness.
Prompt Variables
Required and optional inputs for the Bug Report to Structured Defect prompt. Validate each placeholder before calling the model to prevent ambiguous or incomplete defect records.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[BUG_REPORT] | Raw bug report text from user, tester, or support ticket | The login button does nothing when I click it on Chrome. I tried clearing cache but still broken. | Must be non-empty string. Check for minimum 20 characters. Flag if no symptom or action described. |
[REPORTER_ROLE] | Role of the person submitting the bug to contextualize language | Customer Support Agent | Must be one of: Customer, QA Engineer, Developer, Support Agent, Product Manager, null. Affects severity inference. |
[PRODUCT_NAME] | Name of the product or service where the defect was found | AcmePay Mobile v3.2.1 | Must match a known product identifier in your defect tracker. Validate against product catalog if available. |
[ENVIRONMENT_HINT] | Optional known environment details to seed extraction | Staging EU-West, Chrome 122, iOS 17.4 | Can be null. If provided, parse for OS, browser, version, region. Flag if format is unstructured prose. |
[KNOWN_ACCEPTANCE_CRITERIA] | Optional acceptance criteria or expected behavior reference | Login button must redirect to dashboard within 2 seconds and show loading spinner | Can be null. If provided, use to validate observed-vs-expected extraction. Flag if criteria are vague or untestable. |
[OUTPUT_SCHEMA] | Target structure for the defect record | JSON with title, severity, environment, steps, observed, expected, attachments_summary | Must be a valid JSON Schema or explicit field list. Validate parseability before prompt assembly. Reject if schema is empty. |
[SEVERITY_SCALE] | Organization-specific severity definitions for classification | S1: Critical outage, S2: Major feature broken, S3: Minor bug, S4: Cosmetic | Must contain at least 2 levels with definitions. If null, prompt uses default generic scale. Flag if definitions overlap. |
Implementation Harness Notes
How to wire the bug report to structured defect prompt into a QA or support workflow with validation, retries, and human review.
This prompt is designed to sit inside a defect intake pipeline—typically a webhook, support bot, or internal QA tool that receives raw bug reports and needs to produce a triage-ready defect record. The implementation harness should treat the LLM call as a transformation step, not a final destination. After the model returns structured JSON, the application must validate the output against the expected schema, check for completeness flags, and decide whether the result is confident enough to auto-create a ticket or whether it should be routed to a human for review. The prompt template itself uses placeholders like [RAW_BUG_REPORT], [PRODUCT_CONTEXT], and [SEVERITY_GUIDELINES] that your application must populate from upstream sources before invoking the model.
Wiring the prompt into an application starts with a function that assembles the final prompt string by injecting the raw bug report text, any known product area or component context, and your organization's severity classification guidelines. Choose a model that reliably produces structured JSON—GPT-4o, Claude 3.5 Sonnet, or Gemini 1.5 Pro with response_format or tool-calling mode enabled. Set temperature low (0.0–0.2) to reduce creative drift in severity classification and reproduction step ordering. After receiving the model response, run a validation layer that checks: (1) all required fields are present and non-null, (2) severity and priority values match your allowed enum, (3) reproduction steps contain at least one actionable step with a concrete action verb, and (4) the observed-vs-expected behavior fields are distinct and non-trivial. If validation fails, retry once with the validation errors appended to the prompt as feedback. If the second attempt also fails, flag the record for human triage and log the raw input and partial output for later prompt debugging.
Logging and observability are critical because defect misclassification can delay critical fixes. Log the raw input, the assembled prompt, the model response, validation results, and the final action taken (auto-created, sent for review, or failed). Include a confidence field in your application schema—derived from validation pass/fail and any explicit uncertainty signals the model returns—so that downstream systems can route low-confidence records differently. For high-severity defects (P0/P1), consider requiring human approval regardless of validation confidence. The harness should also support deduplication checks: before creating a new defect, query your existing defect database for similar titles or stack traces and present potential duplicates alongside the new record. This prompt is not a replacement for your defect management system; it is a structured ingestion layer that reduces manual formatting work while keeping humans in control of triage decisions.
Expected Output Contract
Validation rules for each field in the structured defect output. Use this contract to build a post-processing validator or an eval harness before the defect reaches a triage queue.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
defect_id | string (slug) | If present, must match pattern [A-Z]+-[0-9]+. Null allowed for new defects. | |
title | string | Length 10-120 chars. Must contain a symptom keyword and affected component. Reject if generic like 'Bug' or 'Issue'. | |
severity | enum | Must be one of: critical, high, medium, low. Reject any other value. Default to medium if confidence < 0.8. | |
environment | object | Must include os, browser, device, and version fields. Each field can be null if unknown, but the object must be present. | |
reproduction_steps | array of strings | Minimum 1 step. Each step must start with an action verb. Reject if any step is empty or purely descriptive. | |
observed_behavior | string | Minimum 20 chars. Must describe actual system output or state. Reject if identical to expected_behavior. | |
expected_behavior | string | Minimum 20 chars. Must describe intended behavior. Reject if it contains only 'should work' or similar vague phrasing. | |
attachments_summary | array of objects | If present, each object must have file_name and description fields. Null allowed. Empty array allowed. |
Common Failure Modes
When converting raw bug reports into structured defects, these failures surface first in production. Each card identifies a specific breakage pattern and a concrete guardrail to prevent it.
Missing Reproduction Steps
What to watch: The model produces a defect with observed vs. expected behavior but skips numbered reproduction steps or leaves them vague ('do the thing'). This breaks triage because engineers can't reproduce the issue. Guardrail: Add a post-generation validator that checks for at least three numbered steps with concrete actions, UI element identifiers, and expected intermediate states. If missing, trigger a retry prompt that explicitly requests step-by-step reproduction from the raw report.
Environment Details Omission
What to watch: The raw bug report lacks OS, browser, device, or version details, and the model silently fills in defaults or omits the environment section entirely. This causes 'works on my machine' rejections. Guardrail: Require an explicit environment block in the output schema. If the source material is missing environment data, the model must emit an [UNKNOWN] placeholder and flag the defect as environment_incomplete: true rather than guessing.
Severity Inflation from User Tone
What to watch: The model infers severity from the reporter's emotional language ('THIS IS CRITICAL!!!') rather than from actual impact, frequency, and business context. This floods the triage queue with false P0/P1 defects. Guardrail: Separate severity classification into a distinct prompt step that receives only the structured symptoms, not the original user sentiment. Use a severity rubric with explicit criteria (users affected, data loss, workaround exists) and require a one-sentence rationale for each classification.
Assumption Contamination
What to watch: When the raw report is ambiguous, the model invents plausible details (specific button names, exact error codes, user permissions) that weren't in the source. These hallucinations become 'facts' in the defect tracker. Guardrail: Require the output to include an assumptions array listing every detail the model inferred rather than extracted. Add an eval check that compares each claim in the defect against the source text and flags unsupported statements for human review before the defect is accepted.
Duplicate Blindness
What to watch: The model converts a bug report into a clean defect without checking whether the same issue already exists in the backlog. This creates duplicate triage work and splits conversation threads. Guardrail: Before generating the final defect, run a retrieval step against the existing defect database using the synthesized symptoms as a search query. If a high-similarity candidate is found, generate a merge suggestion instead of a new defect, linking the raw report to the existing record.
Attachment Evidence Disconnect
What to watch: The raw report includes screenshots, logs, or screen recordings, but the model's defect description doesn't reference them or misinterprets visual evidence. Engineers waste time re-gathering evidence the reporter already provided. Guardrail: If the input includes attachments, require the output to include an evidence_references array that maps each attachment to the specific defect claim it supports. For screenshot inputs, add a validation step that checks whether UI element descriptions in the steps match visible elements in the image.
Evaluation Rubric
Use this rubric to evaluate the quality of structured defect records generated by the prompt before integrating into your triage pipeline. Each criterion targets a specific failure mode common in automated bug report conversion.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Title Completeness | Title contains component, failure mode, and trigger condition in under 100 characters | Vague title like 'Bug fix needed' or missing the affected module | Regex check for [Component] + [Symptom] pattern; length assertion |
Reproduction Step Actionability | Each step is a single, concrete action with a specific UI element or API endpoint; no compound steps | Steps contain 'and then' conjunctions, ambiguous pronouns like 'it', or skip preconditions | LLM-as-judge with pairwise comparison against golden set; manual spot-check of 10 samples |
Observed vs. Expected Specificity | Both observed and expected behavior describe exact system state, error codes, or UI text, not interpretations | Expected behavior is 'it should work' or observed behavior is 'it broke' | Schema check for non-null, non-generic strings; keyword blocklist for 'work', 'broke', 'issue' |
Environment Fingerprint Completeness | All fields in [ENVIRONMENT] placeholder are populated: OS, version, browser/device, config flags | Environment section is null, 'production', or missing version numbers | JSON schema validation requiring non-null values for all environment sub-fields |
Severity Justification | Severity level is accompanied by a rationale referencing user impact, frequency, and data integrity risk | Severity is assigned without evidence or contradicts the described impact | LLM judge checks for logical consistency between impact description and severity label |
Attachment Evidence Grounding | Every referenced attachment or log snippet is cited in the steps or observed behavior with a specific line or timestamp | Attachments listed but never referenced; 'see screenshot' without annotation | Citation extraction regex to verify each attachment appears at least once in the body |
Clarification Question Relevance | Any generated clarification question targets a specific missing fact needed for triage, not generic information | Questions ask for 'more details' or repeat information already present in the input | LLM judge evaluates question necessity against the source [BUG_REPORT] completeness |
Confidence Score Calibration | Confidence score for inferred fields is below 0.7 when source evidence is ambiguous; assumptions are explicitly tagged | High confidence assigned to fields derived from vague or contradictory source language | Threshold check: if [CONFIDENCE] > 0.8, require direct quote evidence from source |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Use the base prompt with minimal validation. Focus on getting structured output from raw bug reports without strict schema enforcement. Accept free-text fields for [STEPS_TO_REPRODUCE] and [ENVIRONMENT] while you tune the extraction quality.
Prompt modification
- Remove [OUTPUT_SCHEMA] constraints and use a looser markdown template instead
- Replace strict enum values for [SEVERITY] with a free-text field and a note: "Suggest a severity level"
- Add: "If any field is unclear, mark it as [NEEDS_CLARIFICATION] and continue"
Watch for
- Missing schema checks letting malformed records through
- Overly broad instructions producing narrative summaries instead of structured fields
- Severity inflation when the model defaults to 'Critical' for ambiguous reports

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us