What claimset is for, what it refuses to do, and why it differs from the things it gets confused with.
Schema.org's ClaimReview encodes a verdict: a reviewer looked at a claim and rated it true or false. That is a different job. claimset never rates anything; it reports whether a source still contains a sentence. There is also no expiry in that vocabulary, so a review recorded years ago and a review recorded this morning are indistinguishable to a consumer of it — and the rich result it was built for was deprecated. Verdicts age. Freshness is the thing nobody was checking.
The two are complementary, not competing: a verdict about a claim is more useful when you can also tell whether the claim's source still says what the reviewer read.
C2PA attests to an asset: who made this image or document, with what tool, and how it was edited since. It is cryptographically serious and it answers a question claimset does not touch. It also does not answer this one — a provably unedited screenshot of a page that has since changed its deadline is authentic and wrong at the same time. Provenance is about the artefact; claimset is about the statement inside it, and whether the source still supports it today.
A link checker verifies resolution: the URL returns 200. claimset verifies content: the sentence you quoted is still on the page behind that URL. The failure mode that costs people money is the one a link checker is blind to by construction — the link is fine, the page is fine, and the number in it changed. Every green link check in the world is compatible with your published guide being wrong.
| Status | Means | Fetches? | Fails? |
|---|---|---|---|
PASS | fetched, and the assertion is still there | yes | no |
DRIFT | fetched, and the assertion is gone — the source no longer says it | yes | yes |
EXPIRED | expires_on has passed: you stopped vouching for it | no, by default | yes |
WEAK | the assertion is too vague to falsify (below) | no | yes |
UNREACHABLE | the source could not be fetched | attempted | yes |
SUPERSEDED | replaced by another claim in the same file | no | no |
EXPIRED is evaluated before fetching, because expiry is a statement about your own attestation rather than about the page. UNREACHABLE fails by default because "I could not check" is not "nothing is wrong". And a DRIFT report prints the sentence that is on the page now, with the new number in it, so the fix takes thirty seconds rather than an afternoon.
Because of a measured false alarm. A source said "within four months"; the published guide said "within 4 months". A first-pass checker reported DRIFT for a fact that had not moved. False alarms are how a checker dies — the second time a green build turns red for nothing, people stop reading the output, and a checker nobody reads is worse than none, because it still consumes trust.
So written cardinals are rewritten to digits on both sides, including compounds (one hundred and eighty becomes 180). Ordinals are deliberately excluded: "second" is also a unit of time, and silently rewriting "within 30 seconds" would be worse than not trying.
Because of a measured false pass. An early checker was given the assertion free and reported PASS, because the page contained that word in an unrelated sentence. The claim happened to be true; the check was worthless. A green result that matched by coincidence is the single most damaging output the format could produce, because it spends the reader's trust without earning it.
So an assertion must clear a floor before anything is fetched: at least 12 characters, at least 2 word tokens, and at least 4 significant words or a number plus at least 2. Below that it is WEAK, and the run fails. An unfalsifiable claim has nothing to check.
No. Comparison is plain substring containment after normalisation. A fuzzy threshold is a knob, and a knob is an argument: two implementations can disagree about 0.87, and once you are trusting the score you are trusting the verifier rather than the source. Containment either holds or it does not.
Normalisation collapses only presentational differences — HTML tags become spaces, entities are decoded, typography is folded, case is folded, digit separators and number words are regularised. No stemming, no synonyms, no stopword removal, no punctuation stripping. Each of those would turn near-misses into passes.
No, and it is worth being blunt about it. A green run means your citations still resolve to the text you quoted. Someone can maintain a perfect claimset of true sentences and still mislead by omission. claimset reports that a source still says a thing — never that the source is right, and never that you are.
It would be, done carelessly, and a verifier that behaves badly gets the whole format blocked. So the reference implementation identifies itself in its user agent, reads robots.txt and honours a disallow (including the RFC 9309 rule that an unreachable robots.txt means assume disallow), waits at least one second between requests to the same host, caches within a run so ten claims against one page cost one fetch, and caps the bytes it will read. Operators should append a contact URL to the user agent.
The format and the reference verifier are MIT licensed and free. There is nothing to sign up for and nothing hosted to depend on — a claimset verifies on your machine, in your CI, against the sources you cited.
The public repository, and packaged installs, are publishing soon; this site does not link a repository it has not published. Planned beyond that: hosted re-verification on a schedule and signed freshness attestations, for publishers who want a third party holding the receipts. The free format and CLI are the product today and are not going behind anything.
It is new, and this site will not pretend otherwise: there are no adoption numbers to quote and no testimonials to show. What exists is a specification, a reference verifier with a fixture suite covering every status, one worked example verified live against federal sources, and this site's own register. The honest pitch is that the format pays for itself at n=1 — it caught real drift on a live product before anyone else adopted anything.
The specification defines the file, the pipeline and the statuses precisely enough to reimplement, and says what it deliberately does not do.