Inferensys

Prompt

Release Note Hallucination and Factuality Check Prompt

A practical prompt playbook for using Release Note Hallucination and Factuality Check Prompt in production AI workflows.
Developer doing prompt engineering on laptop, prompt variations visible on screen, casual coding session.
PROMPT PLAYBOOK

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.

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.

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.

PRACTICAL GUARDRAILS

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

PROMPT PLAYBOOK

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.

code
You 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.

IMPLEMENTATION TABLE

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.

PlaceholderPurposeExampleValidation Notes

[RELEASE_NOTE_DRAFT]

The full text of the AI-generated release note to be audited for factual accuracy

v2.4.1

Features

  • Added OAuth2 support for enterprise SSO

Bug Fixes

  • Fixed race condition in connection pool timeout

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.

PROMPT PLAYBOOK

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.

IMPLEMENTATION TABLE

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 ElementType or FormatRequiredValidation 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.

PRACTICAL GUARDRAILS

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

IMPLEMENTATION TABLE

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.

CriterionPass StandardFailure SignalTest 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

ADAPTATION OPTIONS

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.

code
Analyze 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)
Prasad Kumkar

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.