This prompt is built for incident responders, AI SREs, and platform engineers who are staring at two production traces from the same time window: one that represents a healthy baseline and one that is failing. The job-to-be-done is a structured differential diagnosis. Instead of manually scanning thousands of spans, you provide two pre-reconstructed chronological narratives and the prompt isolates the first divergent event, a configuration change, or a behavioral difference that likely caused the failure. This is a precision instrument for narrowing the search space before you escalate to broader incident correlation or pull in the full on-call team.
Prompt
Incident Trace Comparison Prompt

When to Use This Prompt
Understand the job-to-be-done, the ideal user, and the required context before running the Incident Trace Comparison Prompt.
You should use this prompt when you already have two clean, reconstructed traces. If you are starting from raw spans, you must run the End-to-End Trace Reconstruction Prompt first to convert those spans into the required chronological narratives. The prompt assumes the traces are from the same production window and share a common entry point, such as the same user query or API call. It is not designed for comparing traces from different code versions, different users, or different time periods unless you explicitly frame those as the baseline and failing conditions. The ideal input includes metadata like model version, prompt version, and deployment tags so the diff can surface configuration drift alongside behavioral drift.
Do not use this prompt for aggregate trend analysis, capacity planning, or cost attribution across many sessions—those tasks belong to monitoring dashboards and continuous trace analysis pipelines. This prompt is also a poor fit if the failure is already known to be a single-point infrastructure error like a network timeout or an out-of-memory kill; in those cases, the trace diff will only confirm what your metrics already show. After running this prompt, the next step is to take the isolated divergent event and feed it into a root-cause classification prompt or an incident runbook for remediation. If the diff is ambiguous, you may need to run the comparison against a second healthy baseline to rule out flukes.
Use Case Fit
Where the Incident Trace Comparison Prompt works, where it fails, and what you must provide before running it.
Good Fit: Post-Incident Differential Diagnosis
Use when: You have two complete, timestamped traces from the same production window—one healthy baseline and one failing trace—and you need to isolate the first divergent event. Guardrail: Confirm both traces share the same prompt version, model, and configuration before comparison to avoid false divergence signals.
Bad Fit: Aggregate Trend Analysis
Avoid when: You need to analyze patterns across hundreds of traces or calculate statistical regressions. This prompt is designed for pairwise comparison, not bulk aggregation. Guardrail: Use a trace aggregation pipeline or monitoring dashboard for trend analysis, then apply this prompt to representative sample pairs.
Required Inputs: Two Complete Traces
What you must provide: A healthy baseline trace and a failing trace, both with full span data including user input, retrieval steps, tool calls, model outputs, and metadata. Guardrail: Validate trace completeness before comparison—missing spans in either trace will produce unreliable divergence detection and false root-cause attribution.
Operational Risk: Configuration Drift Masking
What to watch: The prompt may flag a behavioral difference as a code defect when the actual cause is a silent configuration change between the two traces, such as a model version bump or temperature adjustment. Guardrail: Always cross-reference trace metadata for configuration differences before accepting the prompt's root-cause classification.
Operational Risk: False Equivalence
What to watch: The prompt assumes the two traces are comparable, but if the inputs differ significantly, the divergence may be expected behavior rather than a defect. Guardrail: Pre-screen trace pairs for input similarity—if the user queries or retrieved context differ materially, the comparison may produce misleading divergence signals.
Operational Risk: Single-Pair Overconfidence
What to watch: A single pairwise comparison may identify a divergence that is coincidental rather than causal, leading the incident responder to fix the wrong component. Guardrail: Validate the differential diagnosis by comparing additional healthy-failing trace pairs from the same incident window before committing to a root-cause decision.
Copy-Ready Prompt Template
Paste this prompt into your observability tool or incident response harness. Replace square-bracket placeholders with actual trace data.
This prompt template is designed to be the first executable step in your incident response workflow. When you have identified a failing trace and a known-healthy baseline trace from the same production window, this prompt performs a structured differential diagnosis. It isolates the first point of divergence—whether that is a tool-call argument change, a missing retrieval step, a prompt version mismatch, or an unexpected model output—and produces a report that an engineer can act on immediately. The template is model-agnostic and expects pre-extracted trace data to be injected via the placeholders.
textYou are an AI incident responder specializing in production trace analysis. Your task is to compare two traces from the same time window and isolate the root cause of a failure. ## INPUT DATA ### BASELINE (Healthy Trace) - Trace ID: [BASELINE_TRACE_ID] - Prompt Version: [BASELINE_PROMPT_VERSION] - Model: [BASELINE_MODEL] - Trace Events (chronological JSON): [BASELINE_TRACE_EVENTS] ### INCIDENT (Failing Trace) - Trace ID: [INCIDENT_TRACE_ID] - Prompt Version: [INCIDENT_PROMPT_VERSION] - Model: [INCIDENT_MODEL] - Trace Events (chronological JSON): [INCIDENT_TRACE_EVENTS] ## CONSTRAINTS - Compare events step-by-step in chronological order. - Ignore fields that are expected to differ (e.g., timestamps, unique IDs) unless they indicate a timing anomaly. - Flag the **first** event where the incident trace deviates from the baseline in a way that could cause downstream failure. - If prompt versions differ, note this as a primary suspect before comparing events. - If models differ, flag this as a potential cause but continue the event comparison. ## OUTPUT SCHEMA Return a JSON object with the following structure: { "divergence_point": { "step_index": <integer, the first step where divergence occurred>, "baseline_event": <the baseline event at that step>, "incident_event": <the incident event at that step>, "divergence_type": <"tool_call_change" | "retrieval_gap" | "output_drift" | "missing_step" | "extra_step" | "config_change" | "model_change"> }, "root_cause_hypothesis": <string, concise explanation of why this divergence caused the failure>, "confidence": <"high" | "medium" | "low">, "recommended_action": <string, immediate next step for the engineer>, "additional_observations": [<string, any other notable differences>] } ## RISK LEVEL [RISK_LEVEL] ## INSTRUCTIONS 1. Parse both trace event arrays. 2. Align them by step index where possible. If step counts differ, note the first missing or extra step. 3. For each aligned pair, compare the event type, tool name, arguments, and output summary. 4. Stop at the first meaningful divergence and populate the output schema. 5. If [RISK_LEVEL] is "high", prefix your root_cause_hypothesis with "URGENT: " and prioritize speed over exhaustive comparison.
Before running this prompt in production, ensure that the trace event arrays are normalized to a consistent schema. Raw spans from OpenTelemetry, LangSmith, or custom logging must be converted into a chronological list of objects containing at minimum step_index, event_type, and a payload summary. If your traces contain sensitive data, redact PII before injection. For high-severity incidents, pair this prompt with a human-in-the-loop review step: the model's output should be treated as a diagnostic aid, not a final root-cause determination. Validate the divergence point against your runbooks before taking automated remediation actions.
Prompt Variables
Required inputs for the Incident Trace Comparison Prompt. Each placeholder must be populated before execution to ensure reliable differential diagnosis between the baseline and failing traces.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[BASELINE_TRACE] | The healthy production trace serving as the reference for comparison. Must contain the full span tree from the same time window as the failing trace. | {"trace_id": "abc123", "spans": [...]} | Validate JSON structure with required fields: trace_id, spans array, and timestamp. Reject if spans array is empty or missing root span. |
[FAILING_TRACE] | The anomalous production trace exhibiting the failure behavior. Must be from the same application version and configuration baseline as the healthy trace. | {"trace_id": "def456", "spans": [...]} | Validate JSON structure matches baseline schema. Reject if trace_id equals baseline trace_id. Confirm timestamps fall within the incident window. |
[COMPARISON_DEPTH] | Controls how far into the span tree the differential analysis proceeds. Options: shallow (top-level spans only), standard (two levels), deep (full tree). | standard | Must be one of: shallow, standard, deep. Default to standard if null. Reject unrecognized values. |
[DIVERGENCE_THRESHOLD] | The minimum difference score required to flag a span or event as divergent. Expressed as a float between 0.0 and 1.0. | 0.15 | Must be a float between 0.0 and 1.0. Values below 0.05 may produce noise; values above 0.5 may miss real divergence. Default to 0.1 if null. |
[IGNORED_FIELDS] | A list of span or event fields to exclude from comparison to reduce noise from non-deterministic values like timestamps, request IDs, or random seeds. | ["timestamp", "span_id", "request_id"] | Must be a JSON array of strings. Validate each field name exists in the trace schema. Warn if common noise fields like timestamp are missing from the list. |
[OUTPUT_SCHEMA] | The expected structure for the differential diagnosis output. Defines required fields, types, and nesting for the divergence report. | {"first_divergent_event": {...}, "divergence_chain": [...], "root_cause_hypothesis": "..."} | Validate against JSON Schema. Required fields: first_divergent_event, divergence_chain, root_cause_hypothesis. Reject if schema is not valid JSON. |
[CONFIGURATION_SNAPSHOT] | Optional snapshot of the prompt version, model version, tool schemas, and routing rules active during both traces. Used to rule out configuration drift as a cause. | {"prompt_version": "v2.3.1", "model": "gpt-4o", "tool_schemas": [...]} | If provided, validate that prompt_version and model fields match between baseline and failing traces. If null, configuration drift cannot be ruled out and must be noted in the output. |
Implementation Harness Notes
How to wire the Incident Trace Comparison Prompt into a production incident response workflow with validation, retries, and human review gates.
The Incident Trace Comparison Prompt is designed to be called programmatically during an active incident, not just used in a chat interface. The typical integration point is an internal incident response tool or a runbook automation that fetches two trace payloads—one from a known-healthy baseline window and one from the failing session—and passes them as structured inputs. The prompt expects a [BASELINE_TRACE] and a [FAILING_TRACE], each containing the full span tree, tool-call logs, retrieval events, and metadata. Before calling the model, the harness should validate that both traces are from the same application version, share the same prompt version identifier, and fall within the same production deployment window. If these preconditions are not met, the comparison is likely to produce spurious divergence signals, so the harness should abort early and request a better baseline.
The output of this prompt is a structured differential diagnosis, so the harness must enforce a strict output contract. Wrap the model call in a validation layer that parses the response against the expected [OUTPUT_SCHEMA], which includes fields for first_divergent_event, divergence_type (e.g., tool_call_missing, retrieval_ranking_change, model_output_drift), confidence_score, and root_cause_hypothesis. If the model returns malformed JSON or missing required fields, implement a retry loop with a maximum of three attempts, appending the parse error to the next request as a correction hint. For high-severity incidents where the divergence type is classified as model_output_drift or safety_filter_activation, route the diagnosis to a human responder for review before publishing to the incident channel. Log every comparison—including the raw traces, the model's response, the validation result, and the reviewer's decision—to an audit table so the diagnosis is reproducible and can be used for post-incident review.
Model choice matters here. Use a model with strong instruction-following and long-context capabilities, such as claude-sonnet-4-20250514 or gpt-4o, because the combined trace payloads can exceed 20,000 tokens. Do not use a lightweight routing model for this task; the comparison requires careful reasoning over structured spans, and a smaller model will miss subtle divergences. If your observability platform supports trace differencing natively, use that as a pre-filter to reduce the trace payload to only the divergent segments before passing them to the model. This reduces token consumption and improves comparison accuracy. Finally, avoid running this prompt on every failure automatically—reserve it for incidents where the root cause is not immediately obvious from alert dashboards or where multiple teams are reporting inconsistent behavior from the same deployment.
Expected Output Contract
Defines the exact fields, types, and validation rules for the differential diagnosis output. Use this contract to parse the model response, validate correctness, and trigger retries or human review when rules fail.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
divergence_point | object | Must contain span_id, event_type, and timestamp. span_id must match a span in the input traces. timestamp must be ISO 8601. | |
divergence_point.span_id | string | Must be a non-empty string present in either the baseline or failing trace spans. | |
divergence_point.event_type | string | Must be one of: tool_call, model_output, retrieval_result, state_change, routing_decision, safety_filter, user_input, null. | |
root_cause_classification | string | Must be one of: prompt_defect, model_behavior_change, retrieval_gap, tool_failure, infrastructure_error, configuration_change, unknown. If unknown, confidence must be <= 0.5. | |
confidence | number | Must be a float between 0.0 and 1.0. If root_cause_classification is unknown, value must be <= 0.5. | |
differential_events | array | Must contain 1-10 objects, each with trace_origin, span_id, event_summary, and anomaly_flag. trace_origin must be baseline or failing. | |
differential_events[].anomaly_flag | boolean | Must be true for at least one event in the failing trace. No more than one event in the baseline trace can have anomaly_flag set to true. | |
recommended_action | string | Must be a non-empty string from a predefined action list: rollback_prompt, fix_tool_schema, reindex_retrieval, restart_agent, escalate_human, monitor, no_action. |
Common Failure Modes
When comparing an incident trace against a healthy baseline, these failures surface first. Each card explains what breaks, why it happens, and how to guard against it before the diagnosis reaches an on-call engineer.
Divergent Event Misidentification
What to watch: The prompt flags a superficial difference—such as a timestamp or random ID—as the first divergent event, burying the real behavioral deviation. Guardrail: Add a pre-processing step that normalizes non-deterministic fields (timestamps, UUIDs, span IDs) before diffing. Include explicit instructions to ignore cosmetic differences and focus on semantic or structural divergence.
Configuration Drift Blindness
What to watch: The model compares trace events but misses that the failing trace used a different prompt version, model alias, or temperature setting. Guardrail: Require a dedicated configuration diff section in the output schema. Extract and compare model, prompt_version, and runtime parameters from trace metadata before analyzing events. Flag any config delta as a high-priority signal.
Causal Overconfidence
What to watch: The prompt asserts a single root cause with high confidence when the evidence only supports correlation—especially dangerous when the incident responder treats the output as a solved diagnosis. Guardrail: Structure the output to separate 'Divergence Timeline' from 'Root-Cause Hypotheses.' Require confidence scores and explicit evidence links for each hypothesis. Add a mandatory 'Alternative Explanations' field to force consideration of multiple causes.
Context Window Truncation in Long Traces
What to watch: Production traces can be long. The model silently drops middle spans when the combined baseline and failing trace exceed the context window, producing a diagnosis from incomplete evidence. Guardrail: Implement a pre-diff summarization step. Condense each trace into a structured event sequence before comparison. Validate that the number of events in the summary matches the original trace span count. If truncation is unavoidable, flag it in the output.
Tool-Call Argument Drift
What to watch: The model correctly identifies that a tool was called but fails to detect that the arguments passed were semantically different—e.g., a filter value changed from 'active' to 'all.' Guardrail: Add a dedicated tool-call argument comparison step. Instruct the model to diff arguments field-by-field, not just tool names. Include a normalized representation of arguments in the trace pre-processing to catch equivalent JSON with different key ordering.
Baseline Selection Bias
What to watch: The 'healthy' baseline trace is not actually representative—it may be from a different user cohort, time of day, or workload pattern—leading to a false diagnosis of divergence where normal variance exists. Guardrail: Validate baseline fitness before comparison. Require the prompt to check that the baseline and failing trace share the same prompt version, model, and request type. If they differ, output a 'Baseline Mismatch Warning' and downgrade confidence on all subsequent findings.
Evaluation Rubric
Use this rubric to test the Incident Trace Comparison Prompt's output quality before shipping it into your incident response workflow. Each criterion targets a specific failure mode in differential diagnosis.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Divergence Point Identification | Output correctly identifies the first span or event where the [FAILING_TRACE] diverges from the [BASELINE_TRACE], with timestamp and span ID. | Divergence point is missing, incorrect, or attributed to a span that is identical in both traces. | Golden-set test: Provide two traces with a known injected divergence at a specific span. Verify the prompt identifies that exact span. |
Configuration Change Detection | Output lists all configuration differences (prompt version, model, temperature, tool schemas) between traces with exact before/after values. | Configuration differences are omitted, or the output claims no config change when [CONFIG_DIFF] is present. | Schema check: Parse output for a 'configuration_changes' array. Validate each entry has 'parameter', 'baseline_value', and 'failing_value' fields. |
Behavioral Difference Classification | Output classifies the type of behavioral difference (e.g., tool-call error, hallucination, refusal, latency spike) with a confidence label. | Classification is 'unknown' when evidence is sufficient, or classification contradicts trace evidence. | LLM-as-judge: Use a separate evaluator prompt to compare the classification against a pre-labeled incident type. Require exact match for pass. |
Root-Cause Hypothesis Quality | Output provides at least one root-cause hypothesis that is directly supported by the identified divergence and configuration changes. | Hypothesis is generic (e.g., 'model error'), unsupported by trace evidence, or missing entirely. | Human review: A responder confirms the hypothesis is specific, traceable to evidence, and actionable. Pass if 2/3 reviewers agree. |
Evidence Citation Completeness | Every claim in the differential diagnosis cites a specific span ID, log line, or configuration field from the provided traces. | Output contains unsupported assertions without trace references, or citations point to non-existent spans. | Parse check: Extract all citation references. Validate each against the span IDs present in [BASELINE_TRACE] and [FAILING_TRACE]. Fail if any reference is invalid. |
Output Schema Compliance | Output is valid JSON matching the [OUTPUT_SCHEMA] with all required fields present and correctly typed. | Output is malformed JSON, missing required fields, or contains fields with incorrect types. | Automated validation: Parse output with a JSON schema validator configured against [OUTPUT_SCHEMA]. Fail on any validation error. |
False Positive Divergence Avoidance | Output does not flag spans as divergent when they are identical in both traces or differ only in non-deterministic fields (timestamps, IDs). | Output flags a span as divergent when the only difference is a timestamp or a generated UUID. | Golden-set test: Provide two traces that differ only in timestamps and request IDs. Verify the output reports 'no meaningful divergence' or equivalent. |
Handling of Missing Baseline | When [BASELINE_TRACE] is null or empty, output explicitly states that differential diagnosis is not possible and requests a baseline. | Output hallucinates a baseline, fabricates a comparison, or proceeds with diagnosis without flagging the missing input. | Null-input test: Provide a valid [FAILING_TRACE] with [BASELINE_TRACE] set to null. Verify output contains a clear refusal to compare and a request for baseline data. |
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
Start with the base diff prompt but relax strict schema requirements. Use a single model call without retries. Focus on getting a readable differential diagnosis first, then tighten validation later.
Replace the strict [OUTPUT_SCHEMA] with a simpler markdown structure:
code## Divergence Point [Describe the first event where traces differ] ## Likely Root Cause [Short hypothesis] ## Evidence - [Key difference 1] - [Key difference 2]
Watch for
- The model conflating correlation with causation
- Missing the actual first divergent event and jumping to symptoms
- Output that reads well but skips specific trace evidence
- No validation that both traces are from the same production window

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