This prompt is for AI engineering teams whose production assistants maintain an explicit, structured state model of open items—questions, tasks, and commitments—alongside the raw conversation transcript. The core job-to-be-done is detecting and diagnosing state drift: the condition where the assistant's internal state model has fallen out of sync with what actually happened in the conversation. For example, the state model might still list a question as 'unanswered' when the user provided an answer three turns ago, or it might mark a task as 'resolved' when the assistant only acknowledged it but never completed it. This reconciliation step is a critical control plane operation, not a user-facing response.
Prompt
Conversation State Reconciliation Prompt for Open Items

When to Use This Prompt
Defines the specific job, ideal user, and critical constraints for the Conversation State Reconciliation Prompt.
The ideal user is a backend AI engineer or technical lead building a stateful copilot, support agent, or task-oriented assistant. You should use this prompt when your system explicitly tracks open items in a structured format (JSON, a database, or a state machine) and you need a scheduled or triggered audit to compare that state against the raw transcript. This is not a prompt for generating a user-facing summary. It is an internal diagnostic that produces a machine-readable reconciliation report. Required context includes the full conversation transcript and the assistant's current internal state object for open items. The prompt is designed to be run by an orchestration layer, not directly by an end-user.
Do not use this prompt as a replacement for a deterministic state machine. If your open-item tracking can be handled with explicit code—such as a finite state machine that transitions on specific user intents or API calls—that is always more reliable. This prompt is for the inevitable gaps where natural language complexity defeats deterministic rules: implicit resolutions, sarcasm, topic shifts that obsolete a question without answering it, or user corrections that ripple through multiple pending items. The output is a reconciliation report that your system should use to patch its state, not a final answer to show the user. Always log the reconciliation diff before applying it, and in high-stakes domains like healthcare or finance, require human review of any state mutation that would close or alter a critical item.
Use Case Fit
Where the Conversation State Reconciliation Prompt delivers value and where it introduces risk. This prompt compares an internal state model against the raw transcript, so its utility depends entirely on the quality of both inputs.
Good Fit: Stateful Agent Systems
Use when: you maintain an explicit open-item state object alongside a multi-turn conversation transcript. The prompt excels at detecting drift between the model's tracked state and what actually happened in the dialogue. Guardrail: ensure the state model schema is stable and versioned before running reconciliation.
Bad Fit: Stateless or Single-Turn Flows
Avoid when: the system has no structured state to reconcile against, or conversations are single-turn request-response. Without a state model to compare, the prompt becomes a generic transcript analysis task and loses its specific drift-detection value. Guardrail: use a dedicated extraction prompt instead of forcing reconciliation on stateless data.
Required Input: Structured State Snapshot
Risk: reconciliation quality collapses if the state model is incomplete, stale, or in a different schema than the prompt expects. Guardrail: validate the state object against its expected schema before passing it to the prompt. Reject reconciliation runs when required fields are missing or the state version doesn't match.
Required Input: Complete Transcript
Risk: truncated or summarized transcripts hide resolution signals, causing false drift detections where the assistant resolved an item but the evidence was pruned. Guardrail: pass the full turn history for the session segment being reconciled. If context budget forces summarization, flag the reconciliation output as lower confidence.
Operational Risk: False Positive Drift
Risk: the prompt flags items as drifted when the resolution happened implicitly or through a side channel not visible in the transcript. This triggers unnecessary corrections and erodes operator trust. Guardrail: require the prompt to output a confidence score per reconciliation finding and route low-confidence items to human review instead of auto-applying corrections.
Operational Risk: Correction Cascades
Risk: applying reconciliation corrections automatically can overwrite valid state with incorrect transcript interpretations, especially when the user's language was ambiguous. Guardrail: never auto-apply reconciliation diffs. Output corrections as proposed changes that require explicit approval or a separate verification step before mutating production state.
Copy-Ready Prompt Template
A reusable prompt template for reconciling an assistant's internal open-item state against the actual conversation transcript to detect drift.
This prompt template is designed to be injected into a reconciliation step within your state management middleware. It compares a structured representation of what the system believes is pending against the ground truth of the conversation transcript. The core job is to detect two failure modes: a resolved item still marked as open, or an open item that was silently dropped from the state model. Use this before generating any user-facing summary or handoff to ensure the system's memory is accurate.
codeYou are a state reconciliation auditor. Your task is to compare the assistant's internal open-item state against the actual conversation transcript and produce a structured reconciliation report. ## INTERNAL OPEN-ITEM STATE This is the list of open questions, tasks, and commitments the system currently believes are unresolved. [OPEN_ITEM_STATE] ## CONVERSATION TRANSCRIPT This is the full conversation transcript, including all user and assistant turns. [TRANSCRIPT] ## INSTRUCTIONS 1. For each item in the INTERNAL OPEN-ITEM STATE, determine if it has been resolved in the CONVERSATION TRANSCRIPT. An item is resolved if the user confirmed satisfaction, the assistant provided a complete answer that the user acknowledged, or the task was explicitly completed. 2. Scan the CONVERSATION TRANSCRIPT for any questions, tasks, or commitments that are unresolved but are NOT present in the INTERNAL OPEN-ITEM STATE. These are "missed items." 3. For each missed item, identify the turn number where the item originated and the reason it should be considered open. 4. Do not flag rhetorical questions, social pleasantries, or statements where the user explicitly withdrew the request. ## OUTPUT SCHEMA Return a valid JSON object with the following structure: { "reconciliation_report": { "state_items_reviewed": [ { "item_id": "string", "original_description": "string", "status_in_transcript": "resolved | still_open | cannot_determine", "resolution_evidence": "string or null", "correction_required": "mark_resolved | keep_open | flag_for_review" } ], "missed_items": [ { "description": "string", "originating_turn": integer, "reason_open": "string", "severity": "blocking | high | medium | low" } ], "drift_detected": boolean, "summary": "string" } } ## CONSTRAINTS - Only mark an item as resolved if there is clear, explicit evidence in the transcript. - If evidence is ambiguous, set status to "cannot_determine" and correction_required to "flag_for_review." - Do not invent items. Only report missed items that have a clear basis in the transcript. - If no drift is detected, drift_detected must be false and missed_items must be an empty array.
To adapt this template, replace [OPEN_ITEM_STATE] with a JSON-serialized array of your system's pending items, each with a unique item_id and original_description. Replace [TRANSCRIPT] with the full conversation text, ideally with turn numbers prefixed (e.g., [T1] User: ...). The output schema is designed for direct consumption by your state repair logic: iterate state_items_reviewed to apply corrections, and insert missed_items into your tracking system. For high-stakes domains like healthcare or finance, route any report with drift_detected: true or severity: blocking to a human review queue before mutating state.
Prompt Variables
Required inputs for the Conversation State Reconciliation Prompt. Each placeholder must be populated before the prompt is sent. Validation notes describe how to verify the input is well-formed before execution.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[CONVERSATION_TRANSCRIPT] | Full conversation transcript to reconcile against | User: What's the status of PR #42?\nAssistant: It's still in review.\nUser: And the login bug?\nAssistant: Fixed yesterday. | Must be non-empty string. Validate line count > 0. Each turn must have a speaker label. Timestamps optional but recommended for ordering. |
[CURRENT_OPEN_ITEMS_STATE] | Serialized state object of items the system believes are open | {"items": [{"id": "item-1", "description": "PR #42 review", "status": "open", "last_updated_turn": 2}]} | Must be valid JSON. Validate against expected schema: items array with id, description, status, last_updated_turn fields. Status must be one of open, in_progress, blocked, pending_clarification. Null allowed if no items tracked. |
[STATE_SCHEMA] | JSON schema defining the structure of the open items state object | {"type": "object", "properties": {"items": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string"}, "description": {"type": "string"}, "status": {"type": "string", "enum": ["open", "in_progress", "blocked", "pending_clarification", "resolved", "abandoned"]}, "last_updated_turn": {"type": "integer"}}, "required": ["id", "description", "status"]}}}, "required": ["items"]} | Must be valid JSON Schema. Validate with a schema validator before use. Required fields must match what the state manager produces. Enum values must align with the state machine definition. |
[RECONCILIATION_RULES] | Business rules for determining when an item should be marked resolved, abandoned, or kept open | Mark resolved when user confirms completion or assistant states completion without user objection within 2 turns. Mark abandoned when user explicitly declines or topic shifts permanently. Keep open when clarification is pending. | Must be non-empty string. Should be sourced from a tested rules document. Avoid contradictory rules. Test with edge cases: implicit resolution, user silence, topic shifts, corrections. |
[OUTPUT_SCHEMA] | JSON schema for the reconciliation report output | {"type": "object", "properties": {"reconciled_items": {"type": "array"}, "drift_detected": {"type": "boolean"}, "corrections": {"type": "array", "items": {"type": "object", "properties": {"item_id": {"type": "string"}, "current_status": {"type": "string"}, "corrected_status": {"type": "string"}, "evidence_turn": {"type": "integer"}, "rationale": {"type": "string"}}}}, "new_items_detected": {"type": "array"}, "stale_items": {"type": "array"}}, "required": ["reconciled_items", "drift_detected", "corrections"]} | Must be valid JSON Schema. Validate with a schema validator. Required fields must be present in every output. Enum values for status must match [STATE_SCHEMA]. evidence_turn must reference a turn present in [CONVERSATION_TRANSCRIPT]. |
[MAX_TURNS_TO_ANALYZE] | Upper bound on transcript turns to process for cost and latency control | 50 | Must be a positive integer. Validate range 1-200. If transcript exceeds this, pre-truncate before passing to prompt. Log a warning if truncation occurs. Null allowed to process full transcript. |
[CONFIDENCE_THRESHOLD] | Minimum confidence score for automated state corrections without human review | 0.85 | Must be a float between 0.0 and 1.0. Validate range. Corrections below this threshold should route to human review queue. Set to 1.0 to require human review on all corrections. Set to 0.0 only for non-production testing. |
Implementation Harness Notes
How to wire the Conversation State Reconciliation Prompt into a production application with validation, retries, and human review.
The reconciliation prompt is not a standalone chat interaction—it is a batch comparison job that should run as part of a state management pipeline. Wire it into your application as a scheduled or event-driven check that fires after significant conversation turns, before session closeout, or when a state-change event is logged. The prompt expects two structured inputs: the current internal state object (your system's model of open items) and the raw conversation transcript. These must be formatted consistently, with turn-level timestamps or IDs that allow the model to reference specific locations in the transcript. The output is a reconciliation report with corrections—your application must parse this report and apply state mutations programmatically, not just display it to a user.
Build a validation layer around the reconciliation output before mutating state. The prompt's output schema should include a list of corrections, each with an action type (mark_resolved, mark_unresolved, add_missing, remove_stale), the affected item ID, and a citation to the transcript turn that justifies the correction. Your harness must verify that every cited turn ID exists in the input transcript, that no duplicate corrections target the same item, and that the proposed state transitions are valid (e.g., you cannot mark an item as resolved if it was never open). For high-stakes workflows—support tickets, healthcare, legal—add a human review gate: if the reconciliation report changes more than N items or flags a severity-1 discrepancy, queue the report for manual approval before applying mutations. Log every reconciliation run with input hashes, output diffs, and reviewer decisions for auditability.
Model choice matters here. This prompt requires strong instruction-following and structured output reliability. Use a model with native JSON mode or function-calling support, and set temperature=0 to minimize hallucinated corrections. If your state object is large, consider chunking: reconcile one category of open items at a time (e.g., unanswered questions separately from deferred tasks) to stay within reliable context windows. Implement a retry loop with a maximum of 2 attempts: if the output fails schema validation, feed the validation errors back into a retry prompt with the original inputs. If retries are exhausted, log the failure and escalate to a human operator—never silently apply a malformed reconciliation. Finally, instrument the pipeline with metrics: reconciliation frequency, correction count distribution, human review escalation rate, and time-to-resolution for detected drift. These metrics will tell you whether your state tracking logic needs improvement upstream, before the reconciliation prompt becomes a permanent crutch.
Expected Output Contract
Schema for the reconciliation report. Every field must be validated before the report is accepted by downstream state management or human review queues.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
reconciliation_id | string (UUID v4) | Must be a valid UUID v4 generated by the application layer, not the model. | |
timestamp | string (ISO 8601) | Must parse as a valid ISO 8601 datetime in UTC. Reject if missing timezone offset. | |
session_id | string | Must match the active session identifier. Reject on mismatch. | |
state_model_version | string | Must match the current state schema version. Reject if version is unrecognized or missing. | |
drift_detected | boolean | Must be true or false. If true, at least one entry in corrections array is required. | |
corrections | array of objects | Must be a valid JSON array. If empty, drift_detected must be false. Each object must conform to the correction_item schema. | |
correction_item.item_id | string | Must match an existing item_id in the provided state model. Reject if item_id is not found in the input state. | |
correction_item.field | string (enum) | Must be one of: status, assignee, priority, title, due_date, resolution_note. Reject on unknown field. | |
correction_item.current_state_value | string or null | Must be the exact value from the input state model for the specified field. Reject if it does not match the input state. | |
correction_item.corrected_value | string or null | Must not equal current_state_value. If null, must be explicitly allowed for the field. Reject if no change is proposed. | |
correction_item.evidence_turn_ids | array of integers | Each integer must reference a valid turn index in the provided transcript. Reject if any turn_id is out of range. | |
correction_item.confidence | number (0.0 to 1.0) | Must be a float between 0.0 and 1.0 inclusive. Values below [CONFIDENCE_THRESHOLD] should be routed for human review. | |
correction_item.rationale | string | Must be non-empty and contain a direct quote or paraphrase from the evidence turn. Reject if rationale is missing or generic. | |
unresolved_items_summary | array of objects | Must be a valid JSON array. Each object must contain item_id and status fields. Status must be 'unresolved' or 'in_progress'. | |
stale_items_for_retirement | array of strings (item_id) | If present, each item_id must exist in the input state and have no activity in the last [STALENESS_THRESHOLD] turns. |
Common Failure Modes
Reconciliation between internal state and conversation transcript is brittle. These are the most common failure modes and how to prevent them.
Implicit Resolution Drift
What to watch: The user signals resolution through implication ('That works', 'Okay, next') but the state model requires an explicit resolved flag. The prompt marks the item as open, creating a false positive. Guardrail: Include few-shot examples of implicit vs. explicit resolution in the prompt. Add a resolution_confidence field and require high confidence for explicit state transitions.
Reference Ambiguity Collapse
What to watch: The user resolves 'it' or 'that issue' without naming the specific open item. The prompt maps the resolution to the wrong item or creates a new phantom item. Guardrail: Require the prompt to output a reference_candidate list ranked by likelihood before committing to a match. If no candidate exceeds the threshold, flag for human review instead of guessing.
Temporal Ordering Violation
What to watch: The prompt processes turns out of order or applies a resolution from turn 7 to an item opened in turn 9. State history becomes corrupted. Guardrail: Include turn timestamps or sequence IDs in the input schema. Add a validation step that checks resolution_turn > open_turn for every state change. Reject outputs that violate temporal ordering.
Partial Resolution Misclassification
What to watch: A multi-part question gets a partial answer. The prompt marks the entire item as resolved instead of splitting it into resolved and pending sub-items. Guardrail: Design the output schema to support sub_items with independent status fields. Include a post-processing check that flags items marked resolved when only a subset of sub-questions were addressed.
State Model Hallucination
What to watch: The prompt invents open items that never appeared in the transcript, often because it over-generalizes from patterns in the system prompt or few-shot examples. Guardrail: Require every open item in the output to include a source_turn citation with verbatim quote evidence. Run a post-reconciliation validator that rejects items without grounded transcript references.
Correction Cascade Failure
What to watch: The user corrects one fact, which invalidates three downstream open items. The prompt only updates the directly corrected item, leaving stale dependent items in the state. Guardrail: Include a dependency graph in the state model. When a correction is detected, the prompt must re-evaluate all downstream items and output a cascade_impact diff showing which items were invalidated, updated, or preserved.
Evaluation Rubric
Use this rubric to evaluate the reconciliation report before shipping. Each criterion targets a known failure mode in state-vs-transcript drift detection.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Missed Resolution Detection | All items marked resolved in state but still active in transcript are flagged as drift | Resolved items with active discussion are omitted from the drift report | Run against transcripts with known false-resolved items; check recall of drift flags |
False Resolution Prevention | Items correctly resolved in both state and transcript are not flagged as drift | Correctly resolved items appear in the drift report as false positives | Run against clean transcripts with no drift; verify zero false-positive drift flags |
Implicit Resolution Recognition | Items resolved through implicit signals (e.g., user says 'that works') are detected and matched to state | Implicit resolutions are missed, causing false drift flags for items the user accepted | Test with transcripts containing indirect acceptance language; verify resolution detection |
Correction Suggestion Accuracy | Each drift item includes a specific correction action (mark-resolved, mark-open, re-evaluate) that matches the transcript evidence | Correction suggestions contradict the transcript or suggest no-op changes for real drift | Spot-check correction fields against transcript evidence for 20 drift items; require >90% accuracy |
State Item Coverage | Every open item in the state model appears in the reconciliation report with a status determination | State items are silently omitted from the report, creating blind spots in drift detection | Count state items input vs. report items output; require 100% coverage |
Transcript Evidence Citation | Each drift determination includes a direct quote or turn reference from the transcript as evidence | Drift flags lack supporting evidence or cite irrelevant transcript passages | Parse evidence fields; verify each contains a verifiable transcript reference |
Stale Item Retirement Flagging | Items with no mention in the last [N] turns are flagged for staleness review with a confidence score | Stale items are treated identically to actively discussed items, or all items are incorrectly flagged as stale | Test with transcripts where 50% of open items are stale; verify staleness flags match expected distribution |
Multi-Item Dependency Handling | When resolving item A implicitly resolves item B, both items are updated with cross-reference notes | Dependent items are left in conflicting states or resolved without acknowledging the dependency | Test with chained action items; verify dependency-aware resolution in the report |
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 a lightweight state model. Replace the full reconciliation schema with a simple list of [OPEN_ITEMS] and [RESOLVED_ITEMS] from your application state. Skip the confidence scoring and evidence citation fields. Run against a small sample of 10-20 conversations to validate the drift detection logic before adding complexity.
Watch for
- False positives where the model flags items as unresolved that the user implicitly accepted
- Overly strict matching between state labels and transcript language (e.g., 'completed' vs 'done')
- Missing edge cases where the state model uses different terminology than the conversation

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