fact-checker · v1.0.0 · 2026-08-13 · sha256 1574782672b07e1f

fact-checker v1.0.0A

Immutable. This exact content is served forever at /api/v1/blob/1574782672b07e1f.

---
name: fact-checker
description: "Targeted claim verification pipeline. Given a factual assertion, search multiple independent sources, cross-check for agreement or contradiction, rate confidence (verified / likely true / disputed / unverified / outdated), and produce a cited verification report."
license: MIT
metadata:
  version: 1.0.0
  author: moonlight-lupin
  platforms: [linux, macos, windows]
  tags: [fact-check, verification, claims, citations, cross-check, confidence, research]
  related_skills: [deep-research, source-tracker, entity-research]
---

# Fact Checker

## Overview

Fact Checker is a targeted verification workflow for **one factual assertion at a time**. It exists because agents often produce claims that sound plausible but may be hallucinated, copied from a weak source, contradicted by later data, or stale after new reporting. A normal research pass can gather useful background while still failing to answer the narrow question: **is this specific claim supported, contradicted, outdated, or not verifiable from available sources?**

Use this skill to turn a claim into structured search queries, collect confirming and contradicting passages from multiple independent sources, assess source independence and recency, then produce a concise verification report with citations and a calibrated verdict.

## Quick Start

From this skill directory:

```bash
python scripts/verify.py structure --claim "Singapore's GDP grew 4.1% in 2025"
```

Or use the compatibility shortcut:

```bash
python scripts/verify.py --claim "Singapore's GDP grew 4.1% in 2025"
```

After collecting source passages with a web search tool and web extraction tool, generate a report:

```bash
python scripts/verify.py report \
  --claim claim.json \
  --sources sources.json \
  --output verification-report.md
```

Completion criterion: the report states a verdict, lists every cited source, surfaces contradictions if present, and includes a source-independence note.

## When to Use

- Verify a single factual claim before publishing, sending, or relying on it.
- Check whether a statistic, event, relationship, quote, or date is supported by sources.
- Cross-check an agent-written paragraph by verifying its highest-impact claims one by one.
- Audit a cited claim for source independence and recency.

## When NOT to Use

- Broad topic research or literature review → use a deep research workflow.
- Full entity background dossiers → use an entity research workflow.
- Citation database management → use a source tracking workflow.
- Propaganda, bias, or intent analysis → this skill only verifies factual support.
- Real-time market, weather, emergency, legal, medical, or regulatory determinations → use authoritative live systems and human review.

## The 5-Stage Pipeline

### 1. Parse Claim

Extract the assertion into a structured object:

- **Claim text** — exact wording to verify.
- **Claim type** — statistic, event, relationship, quote, or date.
- **Key terms** — entities, metrics, values, years, dates, and distinctive nouns.
- **Time period** — explicit year/date range if present.
- **Entity / metric / value** — when detectable.
- **Search queries** — 3-5 targeted searches.

Command:

```bash
python scripts/verify.py structure --claim "Singapore's GDP grew 4.1% in 2025" > claim.json
```

Completion criterion: the JSON contains enough terms to search for the claim without relying on memory.

### 2. Search

Run 3-5 targeted searches across **different source families**. Combine:

- Primary/official source query: regulator, statistics agency, company filing, court document, government release.
- Independent news/report query: reputable outlet or analyst report.
- Contradiction query: add terms like `not`, `revised`, `correction`, `dispute`, or an alternative value/date.
- Recency query: add `latest`, current year, `revised`, `updated`, or `final` when the claim has a time period.

Do not treat repeated versions of the same press release as separate evidence.

Completion criterion: the search set includes at least one query likely to find contradiction or newer data, not only confirmation.

### 3. Extract

For each candidate source, extract a short passage that directly confirms, refutes, or nuances the claim. Store sources as JSON:

```json
[
  {
    "url": "https://example.org/report",
    "title": "Example Report",
    "passage": "The economy grew 4.1% in 2025...",
    "stance": "confirm",
    "source_type": "official",
    "accessed_at": "2026-07-06"
  }
]
```

Use `stance` values:

- `confirm` — directly supports the claim.
- `refute` — directly contradicts the claim.
- `nuance` — partially supports, qualifies, or changes scope.

Completion criterion: every source has a URL, title, quoted passage, stance, source type, and access date.

### 4. Cross-Check

Assess four dimensions before deciding:

1. **Source independence** — different root domains are a start, but not enough. Check whether sources rely on the same wire story, press release, filing, or dataset.
2. **Agreement** — count confirming, refuting, and nuancing sources separately.
3. **Contradictions** — if credible sources disagree, present both positions with citations.
4. **Recency** — if the claim refers to a time period, check for later revisions, final data, restatements, or updated filings.

Use the URL assessment helper:

```bash
python scripts/verify.py assess --urls "https://a.example/report,https://b.example/story,https://c.example/data"
```

Completion criterion: the final report explains whether evidence is genuinely independent and current.

### 5. Verdict

Generate the report:

```bash
python scripts/verify.py report --claim claim.json --sources sources.json --output report.md
```

The verdict is a confidence label, not a truth oracle. The report should state what the collected evidence supports, where it conflicts, and what remains unknown.

Completion criterion: the verdict follows the rubric below and the report includes citations, contradictions, notes, and verification date.

## Confidence Rubric

| Verdict | Use when | Minimum evidence |
| --- | --- | --- |
| ✅ Verified | The claim is directly supported by multiple independent reliable sources and no credible contradiction was found. | At least 2 independent confirming sources, current data, no credible refutation. |
| ⚠️ Likely true | The claim is supported by one authoritative source or limited corroboration, with no contradiction found. | 1 official/academic/report source or one strong source plus weak corroboration. |
| ⚖️ Disputed | Reliable sources disagree about the claim. | At least one confirming and one refuting source, neither obviously irrelevant. |
| ❓ Unverified | No reliable source directly supports the claim. | No reliable sources, only weak/irrelevant mentions, or sources do not address the assertion. |
| 📅 Outdated | The claim appears to have been true for an earlier data vintage but newer data contradicts or supersedes it. | Older confirmation plus newer contradictory/revised source. |

### No Hallucination Rule

If no sources are found, the verdict is **Unverified** — never `false`. Absence of evidence in a quick search does not prove the claim is false. Say what was searched, what was not found, and what would be needed for a stronger conclusion.

### Outdated Detection

If a claim references a year, quarter, event date, filing period, or named data release:

- Search for `revised`, `final`, `updated`, `restated`, `latest`, and the current year.
- Prefer the newest official data vintage over older preliminary coverage.
- If older sources confirm but newer sources contradict, use **Outdated** rather than **Disputed** when the newer source supersedes the older one.

### Contradiction Surfacing

When sources disagree, present both sides. Do not silently pick the side that matches the expected answer. Explain differences in wording, scope, units, dates, and data vintages.

## Claim Types

| Claim type | Detection clues | Verification approach | Best sources |
| --- | --- | --- | --- |
| Statistic | Numbers, percentages, currency, rates, rankings | Find original dataset/release; verify units, time period, geography, and revisions. | Statistics agencies, filings, official data portals, audited reports. |
| Event | Acquired, launched, announced, resigned, won, filed, approved | Confirm event happened, date, parties, and status; check follow-up if announced vs completed. | Press releases, filings, regulator notices, reputable news. |
| Relationship | `is CEO of`, `belongs to`, `owned by`, `subsidiary of`, `partnered with` | Verify current relationship and effective dates; check whether relationship changed. | Company pages, filings, registries, official bios, reputable profiles. |
| Quote | Quotation marks, `said`, `wrote`, `according to` | Find original transcript/document/audio; verify exact wording and speaker. | Transcripts, speeches, interviews, primary documents. |
| Date | Explicit year/date, `founded in`, `launched on`, `as of` | Verify exact date and whether it is start, announcement, completion, publication, or effective date. | Official timelines, filings, primary documents, encyclopedic references with citations. |

## Source Independence Rules

Source count is not evidence count. Three articles that all cite one press release count as **one source origin**, not three independent confirmations.

Treat sources as independent only when they come from different organizations and appear to have independently obtained or verified the fact. Root-domain comparison is a useful first pass, but also check:

- Same byline or wire service across multiple sites.
- Same wording and publication timestamp.
- Explicit phrases like `according to the company`, `according to a press release`, or `reported by Reuters`.
- Aggregator pages that summarize another outlet.
- Official data reused by many articles; the dataset is the primary source.

When in doubt, count conservatively and explain the limitation.

## Integrations

- **Deep research workflow** — verify key claims before a long report is published. Run this skill on the most important statistics, dates, and potentially controversial assertions.
- **Source tracker** — log every source used in the verification report with topic tags and notes so citations remain reusable.
- **Entity research** — verify entity-specific claims such as ownership, leadership, registration status, adverse-media assertions, and sanctions-list signals before including them in a dossier.

## Common Pitfalls

1. **Treating secondary sources as independent.** Multiple articles can repeat the same source origin. Trace back to the original.
2. **Confirmation bias.** Queries that only include the asserted value tend to find confirmations. Always run at least one contradiction or revision query.
3. **Declaring `false` without evidence.** A failed search means unverified unless a reliable source directly refutes the claim.
4. **Ignoring recency.** Preliminary data, old bios, and announced-but-not-completed events often become stale.
5. **Mismatched scope.** A source may confirm a similar claim with a different country, time period, unit, denominator, or entity.
6. **Quote laundering.** Do not verify a quote from a quote roundup; find the original transcript, video, speech, or document.
7. **Overweighting domain count.** Different domains can still carry the same syndicated article or press release.

## Verification Checklist

- [ ] Claim is quoted exactly and scoped to one assertion.
- [ ] Claim type, key terms, time period, entity, metric, and value were extracted where possible.
- [ ] Search included official/primary, independent secondary, contradiction, and recency queries.
- [ ] Every source has URL, title, passage, stance, source type, and access date.
- [ ] Source independence was checked beyond root domains.
- [ ] Confirming, refuting, and nuancing sources were counted separately.
- [ ] Contradictions were surfaced with citations.
- [ ] Recency and data vintage were checked for time-bound claims.
- [ ] Verdict follows the confidence rubric.
- [ ] No unsupported claim was upgraded beyond the evidence.

## What This Skill Is NOT

- Not a general research engine.
- Not a propaganda, bias, or intent detector.
- Not a real-time data feed.
- Not a substitute for official databases, professional judgment, legal advice, medical advice, or domain experts.
- Not authoritative on its own; it produces a cited verification report for a person to review.

## Files

- `scripts/verify.py` — rule-based claim structuring, URL independence assessment, and Markdown report generation.
- `references/confidence-rubric.md` — detailed verdict criteria, edge cases, and examples.
- `references/source-independence.md` — source-origin and syndication rules.
- `templates/verification-report.md` — report template used by the CLI output.
- `tests/test_verify.py` — pytest coverage for parsing, reporting, and independence assessment.