---
name: content_claim_verification
description: "Verify claims in social content before posting: trace each stat, quote, date, and product claim to its primary source, check date, population, and context, keep a claim ledger, and hold, fix, or cut posts that fail. Use when drafting or reviewing a post, thread, caption, or graphic that contains a number, quote, comparison, causal claim, endorsement, or photo of an event."
---

# Content Claim Verification

## Purpose

Stop a social post from carrying a claim its source does not carry. Most bad posts are not invented from nothing. A real number loses its population, a quote gains a famous name, an old photo gets a new date, a study that says "associated with" becomes a post that says "proves". This skill catches that drift before posting, with a ledger a second person can recheck.

This is a pre-post gate for social content. For a document or paper audit use a citation audit skill. For reading news someone else published use a media literacy skill. Here the draft is yours and the decision is post, fix, hold, or cut.

## Workflow

### 1. Extract every checkable claim

Read the full draft as it will appear: post text, thread replies, graphic text, image caption, alt text, link title, and pinned comment. Claims hide in graphics and alt text as often as in the main post.

A claim needs a ledger row if it has any of these:

- A number, percent, money figure, ranking, or date
- A direct quote or a named person said it
- A comparison: faster, first, only, biggest, more than a named rival
- A causal verb: causes, proves, leads to, because of
- A product claim: a speed, price, feature, or result a buyer would rely on
- An endorsement or testimonial, paid or free product
- A photo or clip presented as showing a named event, place, or date

Run the extractor to catch what your eye missed, then add quotes and product claims by hand:

```
python3 bin/claim_ledger.py extract draft.txt
```

Copy `assets/claim-ledger.csv` and start one row per claim: claim_id, post_id, claim_text copied word for word, claim_type. Leave verdict blank until step 4. Opinion stated as opinion needs no row. Opinion with a fact inside it does, see worked example 6 in `references/worked-examples.md`.

### 2. Trace each claim to its primary source

For each row, find the primary source, not the source you first saw. Rules by type are in `references/source-hierarchy.md`. Short version:

- Stat: the paper, dataset, or agency release itself
- Quote: the book, transcript, recording, or article where the words appear, with a locator
- Event: the official record, filing, organizer release, or direct recording
- Product: the run log, spec, changelog, or live pricing page at check time
- Photo or clip: the original upload with its original date and caption

Use lateral reading, the move professional fact-checkers use in Stanford History Education Group research: leave the page you found, search the claim and the source separately, scan a full results page before clicking, and check what independent sources say about both. Use the SIFT order from Mike Caulfield as the rhythm: Stop, Investigate the source, Find better coverage, Trace claims, quotes, and media to the original context.

Search moves that work:

- Exact phrase in quotation marks, then exact phrase plus claimed author or publisher
- Study or dataset title from a summary, then open the original from the publisher or journal page
- Quote Investigator and the claimed author page on Wikiquote, Misattributed or Disputed section, for famous quotes
- Reverse image search for event photos, sorted by earliest appearance. Earliest date and original caption decide what the photo shows

A search snippet, a screenshot, another social post, and a summary written from the source are leads. None of them is a primary source. If you cannot open the primary source, the claim cannot pass in step 4.

Record in the ledger: primary_source_title, primary_source_url, source_date, event_date if different, and locator (page, section, table, paragraph, or timestamp). No locator, no pass.

### 3. Check date, context, and the five comparison points

Read the primary passage and enough around it to catch a reversed condition. Compare draft to source on five points, from `references/source-hierarchy.md`:

1. Number: same value, units, and rounding
2. Date: source date, event date, and data window line up, and present tense is honest
3. Population: who was counted or studied stays who the post says it was
4. Certainty: may and associated with do not become proves and causes
5. Scope: subgroup limits, conditions, and exceptions survive into the post, or the claim shrinks

Add a context_note for anything a reader would get wrong without it: preliminary data, a cherry picked window, a voluntary sample, a result that held in one subgroup only, a quote cut mid sentence where the next sentence changes the meaning.

For quotes, add three checks: the words match word for word at the locator, the attribution matches the earliest traceable source you can find, and the speaker was alive and active when the earliest use appeared. Popularizer is not originator. Origin uncertain is an honest attribution. A famous name with no solid citation is a hold.

For endorsements, add the disclosure check. Under the FTC Endorsement Guides, 16 CFR Part 255 revised in 2023, an endorsement must be honest and not misleading and cannot make a claim the marketer could not legally make, and a material connection readers would not expect must be disclosed clearly and conspicuously, meaning difficult to miss and easily understandable. In a social post that means the disclosure sits at the start, in the post itself, not on a profile page and not buried at the end of a tag block.

### 4. Verdict per claim, then a decision for the post

Assign one verdict per ledger row:

- PASS: primary source opened, locator recorded, all five points match
- FIXED: source supports a narrower or weaker version, fix_text states that version, and the draft now uses it word for word
- HOLD: source not yet found, paywalled with no lawful open copy, or attribution disputed. The post waits
- CUT: no primary source carries the claim, or the source contradicts it, or a photo shows a different event. Remove the claim from text, graphic, alt text, and replies
- UNVERIFIABLE: checks were run and could not be completed. State what was tried in context_note. Treat as HOLD for posting
- OPINION: row was created in error and the text is pure stated preference with no fact inside it. Note why

Validate the ledger before deciding:

```
python3 bin/claim_ledger.py ledger claim-ledger.csv
```

The validator rejects a PASS or FIXED row with no source URL, no source date, or no locator, and rejects verdicts outside the set above.

Post decision rule: one HOLD, CUT, or UNVERIFIABLE row stops the post as written. Either fix the draft to the FIXED wording, remove the cut claim everywhere it appears, or hold the whole post. Never post the clean claims and quietly keep the failed one in the graphic.

### 5. Final draft check and corrections after posting

Recheck the final draft, not the draft you started with. Edits after verification are the top way a fixed claim drifts back. Diff the final text against fix_text for every FIXED row, confirm the disclosure is still at the start, and confirm cut claims are gone from the graphic and alt text.

Keep the ledger with the post record: post_id, date posted, and final text. If a source is later corrected or retracted, or a reader shows an error, follow the corrections standard in `references/source-hierarchy.md`: post a visible correction tied to the original, update the ledger verdict, and search the ledger for other posts that used the same source.

## Output Contract

For each draft checked, deliver:

1. The completed claim ledger, validated by the ledger command, one row per checkable claim
2. A short decision note: post, post as fixed, hold, or do not post, with one line per non-PASS row naming the claim, the finding, and the fix
3. The corrected draft text when any row is FIXED, with changed wording shown plainly so the poster can copy it without hunting

If the draft has no checkable claims, say so in one line and name what you checked: text, graphic, caption, and alt text. Do not invent a ledger for an opinion post.

## Operating Rules

1. Every factual claim in the decision note follows the same standard as the draft: it rests on a primary source you opened, and the ledger says where.
2. Never upgrade certainty to make a post read stronger. If the source hedges, the post hedges or the claim gets cut.
3. Never keep a number and drop its population, window, or baseline. A true number with wrong scope is a wrong claim.
4. Never treat repetition as evidence. Ten posts repeating a stat is one claim repeated ten times, not ten sources.
5. A deadline is not a verdict. A post that misses its slot because a claim held is a working gate. A wrong post that hit its slot is a correction, a trust cost, and usually a screenshot that outlives both.
6. Do not verify a claim with the tool or person that produced it. Ask an independent source: the registry, the paper, the transcript, the original upload.
7. Keep wording plain in fixes. Readers repeat the simple version. If the honest version cannot fit the format, cut the claim instead of compressing it into a false one.
