This prompt is designed for release managers, DevRel engineers, and platform teams who need to audit AI-generated release notes for factual accuracy before they reach users. The core job-to-be-done is claim-by-claim verification: the model receives a draft release note and the corresponding source material (commit diffs, merged PR descriptions, and issue tracker references) and must produce a structured audit report. Each claim in the release note is mapped to supporting evidence, flagged as unsupported if no evidence exists, and assigned a confidence score. This is not a prompt for generating release notes—it is a verification gate that sits between generation and publication.
Prompt
Release Note Hallucination and Factuality Check Prompt

When to Use This Prompt
Define the exact job this prompt performs, the required inputs, and the operational boundaries where it should not be deployed.
The ideal user has already run a generation step (such as the Commit Diff to Release Note Prompt Template) and now needs to prevent hallucinated features, incorrect version references, or misleading bug fix descriptions from reaching customers. Required inputs include the full draft release note text, the raw diff or commit log that the note claims to summarize, and any linked issue or PR metadata. The prompt expects these inputs to be provided in structured blocks so the model can perform line-level traceability. Without complete source material, the verification will produce low-confidence results and should not be trusted.
Do not use this prompt when the source material is incomplete, when the release note covers changes outside the provided diff window, or when the release note includes forward-looking statements (roadmap items, future deprecations) that cannot be verified against code changes. This prompt is also inappropriate for real-time or streaming release note generation pipelines where latency constraints prevent thorough audit steps. For high-risk releases—security patches, data migration releases, or compliance-mandated changes—always route the audit output through human review before publication. The prompt identifies unsupported claims but cannot independently decide whether an unsupported claim is a hallucination or a documentation gap that a human should fill.
Use Case Fit
Where the Release Note Hallucination and Factuality Check Prompt delivers value and where it introduces risk. Use this to decide whether to deploy the prompt into your release pipeline.
Good Fit: Automated Release Pipelines
Use when: You have a CI/CD pipeline that auto-generates release notes from commit diffs and need a verification gate before publication. Guardrail: Run the factuality check as a required stage; block the release artifact if unsupported claims exceed a threshold.
Bad Fit: Exploratory or Unstructured Repos
Avoid when: The repository lacks conventional commits, structured PR descriptions, or linked issues. Guardrail: Require commit message hygiene and PR templates as a prerequisite; the prompt cannot fact-check claims against missing evidence.
Required Inputs
What you need: The generated release note draft, the full commit diff or PR list it was derived from, and a mapping of claims to source changes. Guardrail: Package these inputs into a structured context object before calling the prompt; missing source evidence forces the model to guess.
Operational Risk: Silent Hallucination Propagation
What to watch: The prompt may miss subtle fabrications, such as invented feature details or incorrect version numbers, especially in long release notes. Guardrail: Pair automated factuality checks with a human review step for major or security releases; never auto-publish without a confidence score gate.
Operational Risk: Diff-to-Claim Traceability Gaps
What to watch: A claim may be factually true but untraceable to any specific commit in the provided diff, indicating a hallucination or a missing input. Guardrail: Require the prompt to output explicit commit SHAs or PR numbers for every verified claim; flag untraceable statements for manual review.
Operational Risk: Over-Confidence on Ambiguous Changes
What to watch: Refactoring or internal cleanup commits may be misinterpreted as user-facing features. Guardrail: Instruct the prompt to classify each claim's user-facing impact explicitly and downgrade confidence for changes without documentation or issue links.
Copy-Ready Prompt Template
A reusable prompt template for auditing AI-generated release notes against source diffs, flagging hallucinations, and scoring factual confidence.
This prompt template is the core of the release note factuality audit workflow. It instructs the model to act as an auditor that compares every claim in a draft release note against the source code diffs and commit messages that supposedly produced it. The template is designed to be dropped into an automated CI pipeline or a manual review queue. It forces claim-by-claim traceability, requires explicit evidence mapping, and produces a structured verdict that downstream systems can parse. The square-bracket placeholders let you inject the specific draft, the source material, and your risk tolerance without rewriting the auditing logic each time.
codeYou are a release note factuality auditor. Your job is to verify whether every claim in a draft release note is supported by the provided source diffs and commit messages. You do not add, improve, or rewrite the release note. You only audit it. ## INPUTS - Draft release note: [DRAFT_RELEASE_NOTE] - Source diffs (unified diff format): [SOURCE_DIFFS] - Commit messages (one per line, with SHA): [COMMIT_MESSAGES] - Risk level: [RISK_LEVEL] Options: low | medium | high ## AUDIT RULES 1. Extract every factual claim from the draft release note. A factual claim is any statement that asserts a change was made, a feature was added, a bug was fixed, a dependency was updated, a breaking change was introduced, or a behavior was modified. 2. For each claim, search the source diffs and commit messages for supporting evidence. 3. If evidence is found, cite the specific file path, line range, or commit SHA that supports the claim. 4. If no evidence is found, flag the claim as UNSUPPORTED. 5. If partial evidence exists but the claim overstates the change, flag it as OVERSTATED and explain the gap. 6. If the draft release note omits a change that appears in the source diffs and meets the severity threshold for [RISK_LEVEL], flag it as MISSING. 7. Do not flag style-only changes, comment-only changes, or CI configuration changes unless [RISK_LEVEL] is high. ## OUTPUT SCHEMA Return a JSON object with this exact structure: { "audit_summary": { "total_claims": <int>, "supported_claims": <int>, "unsupported_claims": <int>, "overstated_claims": <int>, "missing_changes": <int>, "overall_confidence": <float between 0.0 and 1.0> }, "claims": [ { "claim_id": <int>, "claim_text": "<exact text from draft>", "verdict": "supported | unsupported | overstated", "evidence": [ { "source_type": "diff | commit", "source_reference": "<file path:line range or commit SHA>", "explanation": "<how this evidence supports or fails to support the claim>" } ], "correction_suggestion": "<if unsupported or overstated, suggest corrected text; otherwise null>" } ], "missing_changes": [ { "change_description": "<what changed>", "source_reference": "<file path:line range or commit SHA>", "severity": "breaking | feature | bugfix | dependency | other", "suggested_entry": "<how this should appear in the release note>" } ] } ## CONSTRAINTS - Do not invent evidence. If you cannot find a source, the verdict must be unsupported. - Do not rephrase claims. Quote the draft release note exactly in claim_text. - If [RISK_LEVEL] is high, flag even minor omissions. If low, only flag breaking changes and security fixes as missing. - If the draft release note is empty or contains only placeholder text, return an audit with total_claims: 0 and overall_confidence: 0.0.
To adapt this template, start by adjusting the [RISK_LEVEL] thresholds to match your team's release policy. For security-sensitive products, you may want to add a [SECURITY_POLICY] placeholder that defines which CVE severities or vulnerability classes require mandatory inclusion. The output schema is designed to be machine-parseable, so wire the overall_confidence field into your release gate: if confidence drops below your threshold, block the release note from publication and route it for human review. For teams using multiple models, test this prompt across your candidate models with a golden dataset of known hallucinations to calibrate which model catches the most unsupported claims without generating false positives on correctly grounded statements.
Prompt Variables
Required inputs for the Release Note Hallucination and Factuality Check Prompt. Each variable must be populated before the prompt is assembled. Missing or malformed inputs are the most common cause of false negatives in hallucination detection.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[RELEASE_NOTE_DRAFT] | The full text of the AI-generated release note to be audited for factual accuracy | v2.4.1Features
Bug Fixes
| Must be a non-empty string. If the draft was generated from multiple PRs, include the complete aggregated text. Null or empty input should abort the check and return an input validation error. |
[SOURCE_DIFFS] | The raw unified diff output from git that the release note claims to describe | git diff v2.4.0..v2.4.1 -- . ':(exclude).lock' ':(exclude).md' | Must contain actual diff content, not just commit messages. Diffs should be scoped to the release boundary. Binary file diffs should be excluded or flagged as unverifiable. Empty diff with non-empty release note is a critical failure signal. |
[COMMIT_LOG] | The full commit history for the release range with messages, authors, and SHAs | git log v2.4.0..v2.4.1 --format='%H | %s | %an' --no-merges | Must include full commit SHAs for traceability. Merge commits should be excluded unless the merge itself introduced changes. Commit count should be cross-checked against the diff to detect incomplete history. |
[CHANGELOG_CATEGORIES] | The allowed taxonomy of change types for classifying each claim in the release note | ["feature", "bug-fix", "breaking-change", "deprecation", "security", "performance", "dependency-update", "documentation"] | Must be a closed enum. Claims that do not fit any category should be flagged as miscategorized. Categories must match the release note's own classification scheme to avoid false mismatch signals. |
[CONFIDENCE_THRESHOLD] | The minimum confidence score a claim must achieve to be considered verified rather than flagged for human review | 0.85 | Must be a float between 0.0 and 1.0. Claims below this threshold should be routed to a human review queue, not silently accepted. Threshold should be tuned per team based on false-positive tolerance from historical audits. |
[REQUIRED_EVIDENCE_DEPTH] | Specifies whether a claim requires direct diff evidence, commit message evidence, or can be inferred from related changes | direct-only | Accepted values: direct-only, commit-message-allowed, inference-with-flag. Inference mode should always attach a warning. Direct-only mode will flag any claim without a matching diff hunk as unsupported. |
[EXCLUDED_PATTERNS] | File paths, commit messages, or change types to exclude from the audit scope | [".md", "ci/", "chore(deps)"] | Must be a list of glob patterns or commit prefixes. Exclusions should be documented in the audit output so reviewers know what was intentionally skipped. Overly broad exclusions that remove most of the diff should trigger a scope warning. |
[OUTPUT_SCHEMA_VERSION] | The version of the claim audit output schema to use for structured results | v2 | Must match a known schema version. Schema changes should be versioned and documented. Mismatched schema versions should cause a validation error before the prompt is sent, not after the audit is complete. |
Implementation Harness Notes
How to wire the factuality check prompt into a CI pipeline or release workflow with validation, retries, and human review gates.
This prompt is designed to run as a post-generation verification step, not as a standalone content creator. In a typical implementation, a release note draft is first generated from commit diffs or merged PRs using a separate generation prompt. The output of that generation step becomes the [DRAFT_RELEASE_NOTE] input for this factuality check prompt. The system should also supply the [SOURCE_DIFFS] or [COMMIT_LOG] that were used to produce the draft, along with any [PACKAGE_MANIFEST] or [CHANGELOG_HISTORY] for cross-referencing. The prompt expects these inputs to be assembled before invocation, and the model should never be asked to retrieve or infer source material on its own.
To wire this into an application, wrap the prompt in a function that accepts the draft text and source evidence as parameters. Before calling the model, validate that the source evidence is non-empty and that the draft text exceeds a minimum length threshold—an empty or trivially short draft should fail fast without consuming inference tokens. After receiving the model response, parse the output as JSON and validate the schema: each claim object must contain claim_text, source_evidence, confidence_score, and verdict fields. If the JSON is malformed, retry once with a stricter output format instruction appended to the prompt. Log every verification run with a unique run_id, the input hashes, and the full model response for auditability. For high-risk releases, route any claim with a confidence_score below 0.7 or a verdict of unsupported to a human review queue before the release note is published.
Model choice matters here. Use a model with strong instruction-following and JSON output capabilities, such as gpt-4o or claude-3-5-sonnet, and set the temperature low (0.0–0.2) to maximize factual consistency and schema adherence. Avoid using smaller or older models that are more prone to hallucinating source citations or misclassifying supported claims as unsupported. If your release pipeline processes many commits, consider chunking the source evidence and running the verification in parallel across multiple prompt calls, then merging the results. However, be aware that parallel runs may produce overlapping claims that require deduplication. Always include a final aggregation step that reconciles duplicate claims and flags any draft statements that were not covered by any verification chunk.
Do not treat this prompt as a replacement for human review in regulated or safety-critical software. If your release notes cover security patches, medical device software, or financial systems, the output of this prompt should be treated as an advisory check, not a final gate. Build an approval workflow where a human release manager reviews all flagged claims and confirms the final release note before publication. The prompt's confidence scores are useful for prioritization—sort the review queue by lowest confidence first—but they are not a substitute for domain expertise when the stakes are high.
Expected Output Contract
The structured JSON payload the model must return for each claim-by-claim audit. Use this contract to validate the response before it enters a downstream system or approval queue.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
audit_id | string (UUID v4) | Must be a valid UUID v4 string. Reject if missing or malformed. | |
release_note_version | string | Must match the [RELEASE_VERSION] input exactly. Reject on mismatch. | |
overall_factuality_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. | |
claims | array of objects | Must be a non-empty array. Reject if empty or not present. | |
claims[].claim_id | string | Must be unique within the array. Reject on duplicate IDs. | |
claims[].claim_text | string | The exact sentence or phrase extracted from the [RELEASE_NOTE_DRAFT]. Reject if empty. | |
claims[].verdict | string (enum) | Must be one of: 'SUPPORTED', 'PARTIALLY_SUPPORTED', 'UNSUPPORTED', 'CONTRADICTED'. Reject on any other value. | |
claims[].confidence | number (0.0-1.0) | Must be a float between 0.0 and 1.0 inclusive. Reject if out of range. | |
claims[].source_evidence | array of objects | Must contain at least one object if verdict is SUPPORTED or PARTIALLY_SUPPORTED. May be empty for UNSUPPORTED or CONTRADICTED. | |
claims[].source_evidence[].commit_sha | string (hex) | Must be a 40-character hex string matching a commit in the [COMMIT_DIFF] input. Reject if not found in provided diff. | |
claims[].source_evidence[].file_path | string | Must be a relative file path present in the referenced commit's diff. Reject if path not in diff. | |
claims[].source_evidence[].snippet | string | A short verbatim excerpt from the diff supporting the claim. Reject if empty or clearly fabricated. | |
claims[].unsupported_reason | string or null | Required if verdict is UNSUPPORTED or CONTRADICTED. Must be null otherwise. Reject if missing when required. | |
claims[].correction_suggestion | string or null | A suggested rewrite if verdict is PARTIALLY_SUPPORTED or CONTRADICTED. Null allowed for SUPPORTED and UNSUPPORTED. |
Common Failure Modes
When release note verification fails, it usually fails in predictable ways. These cards cover the most common hallucination patterns and how to catch them before publication.
Fabricated Features from Commit Noise
What to watch: The model invents user-facing features from internal refactoring commits, dependency bumps, or configuration changes that have no user impact. A chore: update lodash becomes 'Improved performance and stability.' Guardrail: Require every feature claim to cite a specific commit SHA with a user-facing label or PR description. Flag any claim sourced from commits tagged chore, refactor, or ci unless a human reviewer confirms user impact.
Breaking Change Overstatement
What to watch: The model classifies additive changes or deprecation warnings as breaking changes, inflating severity and alarming consumers unnecessarily. A new optional parameter becomes 'BREAKING: Required parameter added.' Guardrail: Enforce a strict definition: breaking changes require existing consumer code to fail without modification. Require a consumer impact simulation or explicit schema diff before accepting a breaking-change label.
Commit-to-Claim Traceability Gap
What to watch: The model produces plausible-sounding release notes that cannot be traced back to any specific commit or PR. Claims float without evidence, making verification impossible. Guardrail: Require every release note entry to include a source_commits array with at least one commit SHA. Run an automated traceability check that rejects entries with zero source commits or commits that don't appear in the diff range.
Category Misclassification Drift
What to watch: Bug fixes appear under Features, breaking changes land in Bug Fixes, and security patches get buried in Miscellaneous. Category errors mislead readers about release risk and priority. Guardrail: Use a classification validator that checks commit type prefixes against the assigned release note category. If a fix: commit appears under Features, flag for reclassification. Run category consistency checks across the full changelog before publication.
Hallucinated Version Numbers and Dates
What to watch: The model generates incorrect version numbers, release dates, or dependency version ranges that don't match the actual release artifacts. A patch release gets labeled as a minor bump, or a future date appears as the release date. Guardrail: Extract version and date claims from the generated notes and cross-reference against build metadata, git tags, and the actual release schedule. Reject any version number that doesn't match the tag or any date outside a 24-hour window of the planned release.
Omitted High-Severity Changes
What to watch: The model silently drops breaking changes, security fixes, or critical bug patches from the release notes, leaving consumers unaware of urgent upgrade requirements. Guardrail: Run a gap detection pass that compares all commits tagged breaking, security, or fix against the generated release note entries. Flag any high-severity commit without a corresponding entry. Require explicit justification for any excluded high-severity change.
Evaluation Rubric
Criteria for testing the factuality of AI-generated release notes against source diffs and commit history. Use this rubric to gate release note publication.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Claim-to-Commit Traceability | Every claim in [RELEASE_NOTE] maps to at least one commit in [COMMIT_HISTORY] or [DIFF] | Claim references a feature or fix not present in any commit message or code change | Parse claims into list; for each claim, run grep or semantic search over [COMMIT_HISTORY]; flag unmatched claims |
Breaking Change Accuracy | All entries flagged as breaking in [RELEASE_NOTE] correspond to a detected breaking change in [BREAKING_CHANGE_ASSESSMENT] | A non-breaking change is labeled as breaking, or a breaking change is omitted from the release note | Cross-reference [RELEASE_NOTE] breaking entries with [BREAKING_CHANGE_ASSESSMENT] output; check for false positives and false negatives |
Version Number Consistency | Version string in [RELEASE_NOTE] matches [SEMVER_BUMP_RECOMMENDATION] output exactly | Version in release note differs from semver recommendation without documented override | String comparison between [RELEASE_NOTE].version and [SEMVER_BUMP_RECOMMENDATION].version; flag mismatch |
Unsupported Statement Detection | Zero claims in [RELEASE_NOTE] are classified as unsupported by the factuality checker | Any claim receives an unsupported or hallucinated flag from the verification step | Run full [RELEASE_NOTE] through factuality verification prompt; count unsupported flags; pass only if count is 0 |
Commit Category Misclassification | Each categorized entry in [RELEASE_NOTE] matches the conventional commit type of its source commit | A fix is listed under Features, or a feat is listed under Bug Fixes | For each release note entry, check source commit prefix against entry category; flag mismatches |
Deduplication Integrity | No duplicate entries exist in [RELEASE_NOTE] for the same logical change | Same commit or PR appears in multiple release note sections with different descriptions | Group release note entries by source commit SHA; flag any SHA appearing in more than one entry |
Confidence Score Threshold | Every claim in [RELEASE_NOTE] has a confidence score at or above [CONFIDENCE_THRESHOLD] | Any claim falls below the configured threshold, indicating uncertain grounding | Extract confidence scores from factuality verification output; check min(score) >= [CONFIDENCE_THRESHOLD]; flag entries below threshold |
Missing Change Detection | All significant commits in [COMMIT_HISTORY] are represented in [RELEASE_NOTE] unless explicitly excluded | A commit with type feat, fix, or BREAKING CHANGE has no corresponding release note entry | Run missing changelog entry detection prompt; review flagged commits; confirm intentional exclusions; fail if unexplained gaps remain |
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 release note draft. Run claim extraction and evidence mapping without strict schema enforcement. Use manual diff review as the ground truth source.
codeAnalyze the following release note draft against the provided commit diff. List each factual claim and mark it as SUPPORTED, UNSUPPORTED, or CONTRADICTED. [RELEASE_NOTE_DRAFT] [COMMIT_DIFF]
Watch for
- Claims about user-facing behavior that require runtime knowledge beyond the diff
- Overly generous SUPPORTED classifications for vague claims
- Missing detection of implied claims (e.g., "improved performance" without benchmark commits)

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