{
"id": "app.kiesel.facts.claimReview",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"claimReviewed",
"reviewRating",
"author",
"datePublished",
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The publisher's article URL — the canonical citation for the verdict text and reasoning. Maps to schema.org/ClaimReview#url."
},
"author": {
"ref": "#publisher",
"type": "ref",
"description": "The publisher of the fact-check. Maps to schema.org/ClaimReview#author."
},
"subject": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Optional strongRef to an atproto record (e.g. a Bluesky post) where the claim was originally made. When set, this enables Constellation-style backlink lookups: 'which fact-checks address this post?' "
},
"sdLicense": {
"type": "string",
"description": "Optional Creative Commons / other licence URL applicable to *this entry's* text. Maps to schema.org/ClaimReview#sdLicense."
},
"inLanguage": {
"type": "string",
"description": "BCP-47 language tag of the fact-check article. Maps to schema.org/ClaimReview#inLanguage."
},
"itemReviewed": {
"ref": "#claim",
"type": "ref",
"description": "Provenance of the claim itself — who made it, where. Maps to schema.org/ClaimReview#itemReviewed."
},
"reviewRating": {
"ref": "#rating",
"type": "ref",
"description": "The publisher's verdict on the claim. Maps to schema.org/ClaimReview#reviewRating."
},
"claimReviewed": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "The atomic claim being reviewed. Should be a single falsifiable assertion. Maps to schema.org/ClaimReview#claimReviewed.",
"maxGraphemes": 700
},
"datePublished": {
"type": "string",
"format": "datetime",
"description": "When the publisher released this fact-check. Maps to schema.org/ClaimReview#datePublished."
}
}
},
"description": "A single fact-check entry. Each record is one claim reviewed by one publisher, with one rating. Multi-claim articles produce one record per atomic claim. Records are mutable (publishers may correct), so consumers should treat the most recent CID as authoritative."
},
"claim": {
"type": "object",
"properties": {
"author": {
"ref": "#claimAuthor",
"type": "ref",
"description": "Who made the claim. Maps to schema.org/Claim#author."
},
"firstAppearance": {
"type": "string",
"format": "uri",
"description": "URL where the claim first appeared (tweet, video, article)."
}
},
"description": "Provenance of the claim being reviewed — who originally made it. Maps to schema.org/Claim."
},
"rating": {
"type": "object",
"required": [
"alternateName"
],
"properties": {
"bestRating": {
"type": "string",
"description": "Best possible rating on this scale. Optional. Maps to schema.org/Rating#bestRating."
},
"ratingValue": {
"type": "string",
"description": "Numeric rating as a string (schema.org/Rating uses strings to allow non-integer scales). Optional. Maps to schema.org/Rating#ratingValue."
},
"worstRating": {
"type": "string",
"description": "Worst possible rating on this scale. Optional. Maps to schema.org/Rating#worstRating."
},
"alternateName": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Free-text rating as the publisher writes it: 'False', 'Mostly False', 'Falsch', 'Pants on Fire', etc. Maps to schema.org/Rating#alternateName. Consumers normalise to an internal vocabulary at their own discretion."
}
},
"description": "The publisher's verdict shape — free-text label plus optional numeric scale. Mirrors schema.org/Rating."
},
"publisher": {
"type": "object",
"required": [
"name"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Optional atproto DID of the publisher account, when the publisher operates on atproto. Lets consumers cross-reference to other publisher records (profile, prior reviews)."
},
"url": {
"type": "string",
"format": "uri",
"description": "Publisher's homepage URL."
},
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Display name of the publisher (e.g. 'CORRECTIV', 'PolitiFact')."
}
},
"description": "Identification of the fact-checker. Maps to schema.org/Organization."
},
"claimAuthor": {
"type": "object",
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Optional atproto DID of the claimant when they are on atproto."
},
"name": {
"type": "string",
"maxLength": 200
}
},
"description": "Identification of the claimant. May be a named individual, organisation, or social-media account."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "A fact-check published by an independent publisher about a single claim. atproto-native equivalent of schema.org/ClaimReview. The actor writing this record is the *publisher* (a fact-checker), not the labeler."
}