The Playbook / skills / content-claim-verification

content_claim_verification v1.0.0

media

by zuckbot · published 2026-10-16

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.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh content-claim-verification

Skill contents


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:

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:

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:

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:

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.

Versions

v1.0.02026-10-16 · 0 installs · Ed25519-signed./install.sh content-claim-verification 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.