app.kiesel.facts.claimVerdict
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"evidenceItem": {
"description": "A single fact-check cited as evidence. Provides EITHER a reference to an atproto claimReview record (preferred when the publisher operates on atproto) OR the publisher's own article URL and metadata. Both `claimReview` and `externalSource` may be set when an atproto record exists for an external publisher's web article.",
"properties": {
"attribution": {
"description": "Verbatim attribution string the labeler stores with this evidence. Lets downstream consumers see the publisher + intake provenance per evidence item without inferring it.",
"maxLength": 500,
"type": "string"
},
"claimReview": {
"description": "Reference to an atproto app.kiesel.facts.claimReview record. Set when the cited fact-check is hosted on atproto.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"externalSource": {
"description": "Publisher's web article URL + metadata. Set when the cited fact-check is *not* on atproto (typical case today — Lead Stories, USA Today, dpa-Faktencheck etc. publish on the web only).",
"ref": "#externalSource",
"type": "ref"
},
"intakePath": {
"description": "How the labeler obtained this evidence. 'self-published' = an atproto claimReview record (claimReview field set). 'bulk-feed' = a ClaimReview JSON-LD compilation feed (e.g. Google Data Commons). 'factcheck-api' = a per-claim API lookup (e.g. Google Fact Check Tools).",
"knownValues": [
"self-published",
"bulk-feed",
"factcheck-api"
],
"type": "string"
},
"polarity": {
"description": "How this evidence relates to the claim being verdicted. 'entail' = supports. 'contradict' = refutes. 'neutral' = not directly relevant; included for transparency about what was retrieved but dropped.",
"knownValues": [
"entail",
"contradict",
"neutral"
],
"type": "string"
}
},
"type": "object"
},
"externalSource": {
"description": "Metadata for a fact-check hosted on the web (not on atproto). Includes enough fields to render without fetching the article: publisher name, source URL, rating text, language.",
"properties": {
"claimReviewed": {
"description": "The text of the claim as the publisher framed it (may differ slightly from the labeler's extracted claim).",
"maxLength": 2000,
"type": "string"
},
"lang": {
"description": "BCP-47 language tag of the publisher's article.",
"type": "string"
},
"publisherName": {
"description": "Display name of the publisher (e.g. 'Full Fact', 'USA Today').",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"publisherSite": {
"description": "Bare host of the publisher (e.g. 'fullfact.org', 'usatoday.com'). Lets consumers apply their own publisher allowlist.",
"type": "string"
},
"publisherUrl": {
"description": "Publisher's homepage URL.",
"format": "uri",
"type": "string"
},
"ratingNative": {
"description": "Publisher's verdict text, verbatim (e.g. 'False', 'Mostly False', 'Falsch', 'Pants on Fire').",
"type": "string"
},
"reviewDate": {
"description": "When the publisher published the fact-check.",
"format": "datetime",
"type": "string"
},
"sourceUrl": {
"description": "URL of the publisher's fact-check article.",
"format": "uri",
"type": "string"
}
},
"required": [
"publisherName",
"sourceUrl"
],
"type": "object"
},
"main": {
"description": "A labeler's aggregated verdict on one specific atproto record (typically a Bluesky post). Each verdict represents the labeler's call given the evidence available at `verifiedAt`. Re-running the pipeline later may produce a superseding record; the most recent record for a given (labeler, subject) pair is authoritative.",
"key": "tid",
"record": {
"properties": {
"claimText": {
"description": "The atomic claim extracted from the subject, as the labeler interpreted it. The actual sentence on which the verdict was computed.",
"maxGraphemes": 700,
"maxLength": 2000,
"minLength": 1,
"type": "string"
},
"confidence": {
"description": "Aggregated confidence in the verdict, expressed as an integer in [0, 1000] (so 826 means 0.826). Stored as integer because the atproto data model intentionally excludes floats. Specific computation is labeler-internal; consumers should treat it as ordinal.",
"maximum": 1000,
"minimum": 0,
"type": "integer"
},
"decontextualizedText": {
"description": "Standalone version of the claim — rewritten so the claim makes sense outside the original post's context. Used by the labeler internally to improve matching against ClaimReview entries that don't share the post's surrounding context.",
"maxGraphemes": 700,
"maxLength": 2000,
"type": "string"
},
"emittedLabel": {
"description": "Optional reference to a Bluesky label value this verdict caused the labeler to emit on subject (e.g. 'fact-supported', 'fact-refuted'). Reflects what consumers see on Bluesky's wire, complementing the structured verdict here.",
"type": "string"
},
"evidence": {
"description": "The fact-checks that informed the verdict. Each item either references an atproto claimReview record OR an external publisher URL (typical case today — most publishers don't yet write to atproto). At least one item is required: a verdict with no evidence is not a verdict.",
"items": {
"ref": "#evidenceItem",
"type": "ref"
},
"maxLength": 20,
"minLength": 1,
"type": "array"
},
"labelUri": {
"description": "Optional at-uri of the com.atproto.label record this verdict corresponds to, when the labeler also publishes a signed label.",
"format": "at-uri",
"type": "string"
},
"rationale": {
"description": "Short human-readable explanation of how the verdict was reached. Optional but recommended.",
"maxGraphemes": 350,
"maxLength": 1000,
"type": "string"
},
"subject": {
"description": "The atproto record the verdict is *about* (usually an app.bsky.feed.post). Constellation indexes this field, enabling 'which labelers have reviewed this post?' lookups.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"supersedes": {
"description": "Optional at-uri of an earlier claimVerdict by this labeler on the same subject. When set, signals 'this record replaces the older one'.",
"format": "at-uri",
"type": "string"
},
"validAt": {
"description": "Optional 'as-of' date the verdict reflects — useful when citing a fact-check published earlier than verifiedAt. For example: a fact-check from 2020 cited today carries a validAt of 2020.",
"format": "datetime",
"type": "string"
},
"verdict": {
"description": "The aggregated verdict. 'supported' = fact-checkers confirm the claim. 'refuted' = fact-checkers refute it. 'disputed' = fact-checkers disagree among themselves. 'mixed' = the claim is partially true. 'outdated' = was true when reviewed but no longer current. 'unknown' = reviewed but unresolved by the publisher.",
"knownValues": [
"supported",
"refuted",
"disputed",
"mixed",
"outdated",
"unknown"
],
"type": "string"
},
"verifiedAt": {
"description": "When the verdict was computed.",
"format": "datetime",
"type": "string"
},
"voteBreakdown": {
"description": "How the underlying judgements split. Useful for downstream consumers to apply stricter thresholds than the labeler did.",
"ref": "#voteBreakdown",
"type": "ref"
}
},
"required": [
"subject",
"claimText",
"verdict",
"evidence",
"verifiedAt"
],
"type": "object"
},
"type": "record"
},
"voteBreakdown": {
"description": "Summary of the per-evidence judgements that fed the aggregated verdict.",
"properties": {
"contradict": {
"description": "Number of evidence items judged to contradict the claim.",
"minimum": 0,
"type": "integer"
},
"entail": {
"description": "Number of evidence items judged to entail the claim.",
"minimum": 0,
"type": "integer"
},
"neutral": {
"description": "Number of evidence items judged neutral (dropped from aggregation).",
"minimum": 0,
"type": "integer"
}
},
"required": [
"entail",
"contradict",
"neutral"
],
"type": "object"
}
},
"description": "An aggregated verdict on a single atproto record, produced by a labeler that cites one or more existing fact-checks. The actor writing this record is a *labeler* (an automated or human-curated routing service), not the original fact-checker. Each verdict points back at the atproto record it covers (subject) AND at the evidence it relied on (fact-checks).",
"id": "app.kiesel.facts.claimVerdict",
"lexicon": 1
}
Metadata
- DID
-
did:plc:7elfhdwxzvsqib4wmfn3zra7 - CID
-
bafyreihjiuvsiywuimvob5ogxi7oduzok56is7mc6bl3ovssx6x3frlbvu - Indexed At
- 2026-06-21 05:58 UTC
- AT-URI
-
at://did:plc:7elfhdwxzvsqib4wmfn3zra7/com.atproto.lexicon.schema/app.kiesel.facts.claimVerdict
Version History (2 versions)
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
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.
-
com.linkedclaims.claim record
A LinkedClaim record per the DIF Labs LinkedClaims specification (https://identity.foundation/labs-linkedclaims/). Claims are immutable, signed assertions about any URI-addressable subject. Each claim has a persistent U…