This prompt is designed for newsroom fact-checking desks and editorial verification teams that need to evaluate whether claims attributed to sources in a news article match the original source material. The core job-to-be-done is detecting quote distortion, context-stripping, paraphrasing that changes meaning, and gaps in anonymous source credibility. Use this prompt when you have both the published article text and the original source transcript, document, or recording available for comparison. The prompt assumes you have already retrieved or uploaded the relevant source evidence—it does not perform retrieval itself.
Prompt
Journalism Source Attribution Verification Prompt Template

When to Use This Prompt
Defines the precise job-to-be-done, required inputs, and operational boundaries for the journalism source attribution verification prompt.
The ideal workflow places this prompt after evidence gathering and before publication or correction. Feed it the article text as [ARTICLE_TEXT] and the source material as [SOURCE_MATERIAL], along with any [ATTRIBUTION_RULES] your newsroom enforces (e.g., rules for anonymous sources, paraphrasing thresholds, or acceptable context trimming). The prompt outputs a structured attribution fidelity report with per-claim scores, evidence excerpts, and specific flags for distortion, omission, or credibility gaps. This output can feed directly into an editorial review queue or a CMS verification plugin.
Do not use this prompt for general fact-checking of unsourced claims, real-time breaking news verification where source material is unavailable, or evaluating the truth of claims independent of their source attribution. It is not a substitute for verifying whether a source's statements are factually correct—only whether the article faithfully represents what the source said. If source material is missing, the prompt will correctly flag claims as unverifiable rather than hallucinating an assessment. For high-risk stories involving legal exposure or safety-critical information, always route the prompt's output through human editorial review before publication.
Use Case Fit
Where this prompt works and where it does not. Understand the operational boundaries before wiring it into a production verification pipeline.
Good Fit: Structured Attribution Audits
Use when: you have a claim, the attributed source text, and the original source material available for direct comparison. The prompt excels at detecting quote distortion, context-stripping, and meaning shifts when both texts are provided. Guardrail: Always provide the full original source paragraph, not just the quoted sentence, to enable context comparison.
Bad Fit: Anonymous Source Verification
Avoid when: the source is anonymous or the original material is unavailable. The prompt cannot verify attribution fidelity without the original source text to compare against. Guardrail: Route anonymous-source claims to a separate credibility assessment workflow that evaluates internal consistency and corroboration rather than direct text comparison.
Required Inputs: Source Triangulation
What you need: the published claim with attribution, the exact original source excerpt, and sufficient surrounding context from the original to detect selective quoting. Missing any of these degrades fidelity scoring. Guardrail: Implement a pre-check that validates all three inputs are present before invoking the prompt; abort with a clear missing-evidence flag if any are absent.
Operational Risk: Paraphrase Drift Blind Spots
Risk: the prompt may miss subtle meaning distortion in paraphrased attributions where the words differ but the semantic shift is small. Models can over-prioritize lexical overlap and under-detect framing changes. Guardrail: Add a secondary semantic similarity threshold check using a separate embedding comparison or a second-pass prompt focused exclusively on meaning preservation, not word overlap.
Scale Limit: Per-Claim Cost
Risk: running this prompt on every attributed claim in a large article or broadcast transcript becomes expensive and slow. Not every claim requires deep attribution verification. Guardrail: Pre-filter claims with a lightweight triage step that scores attribution risk based on source type, claim controversy, and prior error patterns. Only route high-risk claims to full verification.
Domain Boundary: Opinion vs. Fact Attribution
Risk: the prompt may treat attributed opinions or analysis as verifiable factual claims, producing misleading fidelity scores for statements that are inherently interpretive. Guardrail: Prepend a classification step that labels each claim as factual assertion, opinion, analysis, or prediction. Only route factual assertions and direct quotes to attribution verification; flag opinions for separate review.
Copy-Ready Prompt Template
A production-ready prompt for verifying whether claims attributed to sources match the original material, detecting quote distortion and context-stripping.
This template is designed to be pasted directly into your orchestration layer. It evaluates a single claim-attribution pair by comparing the claim as reported against the provided source material excerpt. The prompt instructs the model to act as a strict editorial auditor, focusing on semantic fidelity, quote accuracy, and context preservation. Before each inference call, replace the square-bracket placeholders with live data from your claim extraction pipeline and source retrieval system. The output is a structured JSON object suitable for downstream scoring, routing, and audit logging.
textYou are an editorial attribution auditor. Your task is to compare a reported claim against its original source material and determine whether the attribution is faithful. ## INPUT Reported Claim: [CLAIM_TEXT] Attributed Source: [SOURCE_NAME] Source Material Excerpt: [SOURCE_EXCERPT] Original Context (if available): [ORIGINAL_CONTEXT] ## CONSTRAINTS - Compare the semantic meaning, not just exact wording. - Flag any quote that is altered, truncated, or recombined in a way that changes meaning. - Detect context-stripping: when a quote is technically accurate but misleading because surrounding context is omitted. - For anonymous sources, note the absence of verifiable attribution without judging the claim's truth. - If the source excerpt does not contain enough information to verify the claim, mark it as "insufficient evidence" rather than guessing. ## OUTPUT_SCHEMA Return a single JSON object with the following fields: { "attribution_fidelity": "faithful" | "distorted" | "context_stripped" | "unverifiable" | "misattributed", "confidence": 0.0-1.0, "quote_accuracy": "exact" | "minor_variance" | "paraphrased" | "altered" | "fabricated" | "not_applicable", "context_preserved": true | false | "partial", "evidence_excerpts": ["string of relevant source text"], "explanation": "Concise explanation of the fidelity determination with specific reference to the source material.", "distortion_type": "quote_alteration" | "context_omission" | "meaning_inversion" | "false_attribution" | "anonymous_unverifiable" | "none" | null, "requires_human_review": true | false } ## EXAMPLES Example 1: Reported Claim: "The CEO said profits were 'the highest in company history.'" Source Excerpt: "Our profits this quarter were strong, though not the highest in company history. We remain optimistic about future growth." Output: {"attribution_fidelity": "distorted", "confidence": 0.95, "quote_accuracy": "altered", "context_preserved": false, "evidence_excerpts": ["though not the highest in company history"], "explanation": "The source explicitly negates the claim. The quote is fabricated by omitting the negation.", "distortion_type": "meaning_inversion", "requires_human_review": true} Example 2: Reported Claim: "An anonymous official confirmed the deal is imminent." Source Excerpt: [No source excerpt provided for anonymous source] Output: {"attribution_fidelity": "unverifiable", "confidence": 0.9, "quote_accuracy": "not_applicable", "context_preserved": false, "evidence_excerpts": [], "explanation": "Claim relies on an anonymous source with no verifiable material provided. Cannot assess fidelity.", "distortion_type": "anonymous_unverifiable", "requires_human_review": true} ## RISK_LEVEL [RISK_LEVEL]
To adapt this template for your newsroom or verification pipeline, start by mapping your internal claim and source data structures to the [CLAIM_TEXT], [SOURCE_NAME], and [SOURCE_EXCERPT] placeholders. The [ORIGINAL_CONTEXT] field is optional but strongly recommended for detecting context-stripping; populate it with the paragraph or section surrounding the quoted material. The [RISK_LEVEL] placeholder should be set to "high" for public-facing editorial content, which will cause the model to lower its threshold for flagging issues and recommending human review. For lower-stakes internal drafts, set it to "standard". Always validate the output JSON against the schema before accepting the result, and route any response with requires_human_review: true or confidence below your operational threshold (typically 0.85) to an editor. Never use this prompt to make automated publication decisions without human oversight on flagged items.
Prompt Variables
Required inputs for the Journalism Source Attribution Verification prompt. Each placeholder must be populated before the prompt is sent. Validation notes describe how to check the input before execution.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[SOURCE_DOCUMENT] | The original source material containing the quoted or referenced statement | Full transcript of the mayor's press conference on 2025-03-15 | Must be non-empty string. Check character length > 50. Reject if only a URL without content. |
[PUBLISHED_ARTICLE] | The article or content containing the attributed claims to verify | News article text with 'according to the mayor...' statements | Must be non-empty string. Parse for at least one attribution phrase (e.g., 'said', 'according to', 'stated'). Flag if no attributions detected. |
[ATTRIBUTION_PAIRS] | Pre-extracted pairs of attributed claim and source reference from the article | Claim: 'The mayor promised tax cuts.' Source: 'Mayor's press conference' | Array of objects with 'claim' and 'source_ref' fields. Validate each pair has both fields populated. Minimum 1 pair required. |
[VERIFICATION_DEPTH] | Level of scrutiny to apply: strict, standard, or lenient | strict | Must be one of: 'strict', 'standard', 'lenient'. Default to 'standard' if not provided. Strict mode requires exact quote matching. |
[ANONYMOUS_SOURCE_POLICY] | How to handle claims attributed to unnamed or anonymous sources | flag_with_credibility_warning | Must be one of: 'flag_with_credibility_warning', 'skip_verification', 'treat_as_named'. Default to 'flag_with_credibility_warning'. |
[OUTPUT_SCHEMA] | Expected structure for the verification output | JSON schema with fields: attribution_id, fidelity_score, evidence_excerpt, distortion_type, confidence | Validate as valid JSON Schema. Must include required fields: attribution_id, fidelity_score, evidence_excerpt. Reject if schema is malformed. |
[CONTEXT_WINDOW_TOKENS] | Number of tokens of surrounding context to include with each evidence excerpt | 150 | Must be integer between 50 and 500. Default to 150. Reject if outside range or non-numeric. |
Implementation Harness Notes
How to wire the Journalism Source Attribution Verification prompt into a production application with validation, retries, and human review gates.
This prompt is designed to be a single step inside a larger verification pipeline, not a standalone chat interaction. The application layer should handle source retrieval, text extraction, and evidence segmentation before the prompt is called. The model receives a single claim, the original article context, and the source material excerpt, and returns a structured attribution fidelity assessment. The application is responsible for iterating over claims, calling this prompt for each one, and aggregating results into a verification report. Do not send an entire article and all sources in one call—batch at the claim level to keep context focused and reduce hallucination risk.
Input assembly: Before calling the prompt, extract the exact claim text and the surrounding paragraph from the article. Retrieve the cited source material—ideally the specific passage, timestamp, or document section the article references. If the source is a person, include the full quote or transcript segment. If the source is anonymous, include whatever attribution context exists (e.g., 'senior administration official'). The [CLAIM] placeholder receives the verbatim claim. [ARTICLE_CONTEXT] receives the paragraph containing the claim plus one paragraph before and after. [SOURCE_MATERIAL] receives the original source excerpt. [SOURCE_TYPE] is one of: named_document, named_person, anonymous_person, press_release, transcript, dataset, or other. [ATTRIBUTION_TEXT] is the exact attribution phrase from the article (e.g., 'according to the report,' 'said in an interview').
Validation and retries: Parse the model's JSON output and validate that attribution_fidelity_score is a float between 0.0 and 1.0, distortion_type is one of the allowed enum values, and evidence_excerpts is a non-empty array with character offsets that fall within the provided source material length. If validation fails, retry once with the same prompt plus the validation error message appended as a [PREVIOUS_ERROR] field. If the second attempt also fails, flag the claim for human review and log the raw output. For attribution_fidelity_score below 0.7, route to a human reviewer with the full prompt context and model output pre-filled. For scores between 0.7 and 0.9, surface in a review queue but allow the pipeline to continue. Scores above 0.9 can auto-pass unless the claim involves an anonymous source—anonymous source claims should always route to human review regardless of score.
Model choice and latency: Use a model with strong instruction-following and JSON output reliability, such as Claude 3.5 Sonnet or GPT-4o, with response_format set to json_object and the JSON schema provided in the system instructions. Expect 2–5 seconds per claim. For high-throughput newsroom pipelines processing hundreds of claims per article, consider batching claims into groups of 5–10 per call with an array output schema, but only if you validate that batch quality doesn't degrade versus single-claim calls. Log every call with the claim ID, model version, prompt template version, latency, and validation outcome for audit trails.
What to avoid: Do not use this prompt for real-time breaking news verification without human-in-the-loop review. Do not treat the model's output as a final editorial decision—it is a triage and evidence-surfacing tool. Do not skip source retrieval and expect the model to verify claims from its training data; the prompt requires explicit source material in the [SOURCE_MATERIAL] field. If source material is unavailable, route the claim to a 'source needed' queue rather than calling the prompt with an empty field. Finally, never expose raw model outputs to readers without editorial review—the output is an internal verification artifact, not publishable content.
Expected Output Contract
Define the exact structure of the attribution fidelity report. Use this contract to build a parser, validator, and downstream routing logic. Every field must be checked before the output is accepted into a production verification pipeline.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
verification_id | string (UUID v4) | Must parse as valid UUID v4. Reject if missing or malformed. | |
claim_summary | string (<= 280 chars) | Length must be between 10 and 280 characters. Must not be identical to [ORIGINAL_CLAIM]. | |
attribution_fidelity_score | number (0.0 - 1.0) | Must be a float between 0.0 and 1.0 inclusive. Reject if out of range or non-numeric. | |
fidelity_category | enum: 'exact_match', 'substantial_match', 'context_stripped', 'distorted', 'fabricated', 'unverifiable' | Must be one of the listed enum values exactly. Case-sensitive check required. | |
source_excerpt | string or null | If fidelity_category is 'unverifiable', this must be null. Otherwise, must be a non-empty string. | |
excerpt_offset | object { start: int, end: int } or null | If source_excerpt is not null, this must be a valid object with integer start and end. Start must be less than end. | |
discrepancy_notes | string or null | If fidelity_category is 'exact_match', this must be null. Otherwise, must be a non-empty string explaining the gap. | |
anonymous_source_flag | boolean | Must be true if the source is anonymous, false otherwise. Triggers human review if true and fidelity_category is not 'exact_match'. |
Common Failure Modes
What breaks first when verifying journalism source attribution and how to guard against it in production.
Quote Distortion Drift
What to watch: The model accepts paraphrased or 'cleaned up' quotes as equivalent to verbatim source statements, missing subtle meaning shifts introduced by punctuation changes, omitted qualifiers, or reordered clauses. Guardrail: Require the prompt to output a side-by-side diff view of the original quote and the attributed version, with character-level differences highlighted. Add a specific instruction to flag any deviation from verbatim reproduction as a fidelity reduction.
Context-Stripping Blindness
What to watch: A quote that is technically accurate word-for-word is rated as high fidelity even when the surrounding context from the source material reverses or heavily qualifies its meaning. The model fails to detect that the selective excerpt creates a misleading impression. Guardrail: Expand the evidence input to include the full paragraph or section surrounding the quoted material. Add an explicit evaluation criterion: 'Does the attributed quote preserve the original intent when read in its original context? If no, reduce the fidelity score by one full tier.'
Anonymous Source Credibility Override
What to watch: The model treats all sources as equally credible and fails to apply stricter scrutiny to claims attributed to anonymous, unnamed, or vaguely described sources (e.g., 'sources familiar with the matter'). Guardrail: Add a source-type classifier step before attribution verification. For anonymous sources, require the output to include a 'Credibility Gap' flag and a structured note explaining what independent corroboration would be needed to elevate the claim's reliability.
False Positive Attribution Matches
What to watch: The model incorrectly matches a claim to a source excerpt that uses similar keywords but describes a different event, person, or timeframe. Semantic similarity overrides factual alignment. Guardrail: Add a strict entity-matching check in the prompt: 'Before confirming a match, verify that the named entities (people, organizations, locations, dates) in the claim and the source excerpt refer to the same real-world entities. If they do not, the match is invalid regardless of topical similarity.'
Temporal Attribution Collapse
What to watch: A claim about a current event is matched to a source describing a past event, or vice versa. The model ignores timestamps and publication dates, treating all evidence as equally current. Guardrail: Require the prompt to extract and compare the publication date of the source material against the event date in the claim. Add a rule: 'If the source predates the claimed event, it cannot serve as direct evidence for that event. Flag as a temporal mismatch.'
Over-Confidence on Partial Evidence
What to watch: The model assigns a high attribution fidelity score when only a fragment of a multi-part claim is supported, ignoring unsupported sub-claims. Guardrail: Decompose the attributed claim into atomic sub-claims before verification. Require the fidelity score to be calculated as the proportion of sub-claims with direct source support. A claim with 1 of 3 parts verified should not receive a 'High Fidelity' rating.
Evaluation Rubric
Criteria for testing the Journalism Source Attribution Verification prompt before production deployment. Each row defines a pass standard, a failure signal, and a concrete test method.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Quote Fidelity | Extracted quote matches original source text exactly, including punctuation and capitalization. | Output contains a paraphrased version of the quote or introduces a single-character difference. | Run a golden set of 20 known quote pairs through the prompt. Assert string equality between the output quote and the ground-truth source quote. |
Context Preservation | The surrounding context excerpt includes at least 2 sentences before and after the quoted material. | The excerpt is truncated mid-sentence or omits a qualifying clause that changes the meaning. | For 10 test cases with known context-stripping risks, verify that the output excerpt contains the full qualifying language from the source. |
Attribution Fidelity Score Calibration | Score is >= 0.9 for verbatim quotes with full context; <= 0.4 for fabricated quotes. | A fabricated quote receives a score above 0.6, or a verbatim quote receives a score below 0.7. | Run 10 verbatim and 10 fabricated quote pairs. Check that scores fall within the defined ranges. Flag any overlap. |
Anonymous Source Credibility Flag | When [SOURCE_DOCUMENT] lacks named attribution, output includes a credibility_gap flag set to true. | The credibility_gap flag is false or missing for an anonymous source claim. | Provide 5 source documents with only anonymous attribution. Assert that credibility_gap is true in every output record. |
Distortion Type Classification | For a quote with a material word substitution, the distortion_type field is 'substitution' and not 'omission'. | The distortion_type is 'none' or misclassified as 'context_stripping'. | Use 5 hand-crafted distortion examples (substitution, omission, reordering, fabrication, splicing). Assert exact match on distortion_type. |
Evidence Excerpt Completeness | The evidence_excerpt field contains the full sentence from the source that supports or contradicts the claim. | The excerpt is a partial sentence fragment or a hallucinated sentence not present in the source. | For 15 test claims, verify that every evidence_excerpt string is a substring of the provided [SOURCE_DOCUMENT] using an automated substring check. |
Empty Source Handling | When [SOURCE_DOCUMENT] is empty or null, the output returns an error object with status 'insufficient_source'. | The prompt hallucinates a source or returns a confidence score above 0.1. | Pass an empty string and a null value for [SOURCE_DOCUMENT] in 2 separate tests. Assert that the status field equals 'insufficient_source'. |
Multiple Claim Batch Consistency | When [CLAIMS] contains 5 claims, the output contains exactly 5 verification records in the same order. | The output contains 4 or 6 records, or the records are reordered relative to the input. | Run a batch of 5 claims 3 times. Assert that the output array length is 5 and that the claim_id values match the input order each time. |
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 prompt and a single source-article pair. Strip structured output requirements to a simple JSON with claim, attribution_fidelity, and evidence_excerpt. Use a frontier model with default temperature.
codeEvaluate whether each attributed claim in [ARTICLE_TEXT] matches the original source material in [SOURCE_TEXT]. Return JSON with fields: claim, attribution_fidelity (EXACT, PARAPHRASED, DISTORTED, FABRICATED), evidence_excerpt.
Watch for
- Model hallucinating source excerpts that don't exist in the provided text
- Overly generous PARAPHRASED ratings when meaning has shifted
- Missing handling for claims attributed to unnamed or anonymous sources

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