Verification methodology

Every fact returned by DeepInquiry passes not just corroboration checks but source-independence checks that trace each corroborating source back to distinct evidence — not distinct URLs.

The problem: two sources aren't always two sources

The industry minimum for "verified" is two independent sources (see the IFCN Code of Principles and Full Fact). Almost nobody defines what "independent" means. That gap creates four well-documented failure modes:

  1. Citogenesis. A false claim added to Wikipedia gets copied by multiple news outlets, each citing the others as "independent." The Ronnie Hazlehurst case had the BBC, The Guardian, The Times, The Independent, The Stage, and Reuters all copy a fake edit within days.
  2. Wire-service duplication. A single AP or Reuters story is republished by 200+ outlets. Different hosts, same underlying evidence.
  3. Aggregator confusion. Statista and Encyclopedia.com republish government or vendor data. Citing them is really citing whoever they pulled from.
  4. Ownership clustering. WSJ, MarketWatch, and Barron's are all News Corp. USA Today Network runs 260+ local papers. Same tank, different logo.

The five-layer policy

Layer 1 — Cluster before counting

Every candidate corroborating source is grouped by wire-service byline (AP, Reuters, AFP, Bloomberg, PA Media, DPA, Kyodo, Xinhua), by publisher parent (News Corp, Gannett, Hearst, Vox Media, Condé Nast, etc.), and by MinHash near-duplicate on the claim's paragraph. The pipeline then counts clusters, not URLs.

Layer 2 — Cascade exclusion

Modeled on Wikidata's guidance: "do not add a second reference which is explicitly based on the same source." Wikipedia itself, its known mirrors, and aggregators are dropped from the corroborating set whenever any non-mirror source exists. Pages whose body contains explicit language like "according to Wikipedia" are also dropped. Any candidate published later than the primary and near-identical to it is flagged as a temporal-posterior copy — the fingerprint of a citogenesis cascade.

Layer 3 — Structural independence score

Every surviving cluster pair is evaluated on three axes: ownership independence (0 or 1), category diversity (peer-reviewed vs primary vs trusted vs trade vs other), and geographic diversity. Multiplied by a domain-quality prior favoring primary and peer-reviewed sources. The final score is the minimum across surviving pairs, clamped to [0, 1]. A fact is only as independent as its two most-similar sources of evidence.

Layer 4 — Exceptional-claim escalation

Borrowed from Wikipedia's WP:V: "any exceptional claim requires multiple high-quality sources." Every claim is auto-classified at extraction time:

  • Everyday — well-known, non-contested. Minimum: 2 clusters, score ≥ 0.5.
  • Notable — surprising or counter-intuitive. Minimum: 3 clusters, score ≥ 0.6, at least one primary source.
  • Exceptional — challenges consensus, involves a public figure, or is time-sensitive. Minimum: 4 clusters, score ≥ 0.7, primary source required, no citogenesis flags.

Layer 5 — Graded output, not boolean

Every fact returned by the API includes a verification_tier plus an independence_score, a cluster_count, a list of citogenesis_flags, and a claim_tier.

TierCriteriaAvailable on
Gold≥3 clusters · score ≥ 0.65 · ≥1 primary or peer-reviewed source · no citogenesis flagsAll plans
Silver≥2 clusters · score ≥ 0.5All plans (default floor)
Bronze≥2 clusters · score ≥ 0.3Pro (opt-in via ?min_tier=bronze)
UnverifiedBelow BronzePro (audit mode, ?include_unverified=true)

What this policy does not solve

  • The "the only source is the primary" case — a Fed statement, a court ruling, an SEC filing. These are authoritative by construction and get Gold even with one cluster.
  • Sustained multi-outlet fabrication. The Alan MacMasters toaster hoax was accepted by the BBC, The Scotsman, the UK government, and 12+ books over a decade with no traceable Wikipedia citation. Source independence is a necessary condition for truth, not a sufficient one. The tier is Gold, not Truth.
  • "Everyone cites the same primary study." Two news outlets citing the same Nature paper are one primary source. Layer 2's aggregator re-resolution handles this: we count the paper as one cluster, not two. Independent replication of the underlying study is a Layer 6 goal for a later phase.

Reference implementation

The five layers are implemented in fact-engine/src/cascade.py (Layer 2), clustering.py (Layer 1), and scoring_independence.py (Layers 3 & 5). The claim tier (Layer 4) piggybacks on the scoring prompt. Every fact persisted to the database carries the resulting metadata so the API can expose it without recomputation. Audit trails live in the fact_source_clusters table — one row per cluster per fact.

Sources this policy draws from