Five load-bearing deadlines from a live consumer guide about US health-insurance appeals, each pinned to the federal page it came from.
This is not a toy. Run it and you are checking that guide against healthcare.gov right now, not against what healthcare.gov said when the guide was written.
{
"claimset": "1",
"publisher": "Denial Facts",
"title": "US health-insurance appeal rights",
"contact": "https://www.healthcare.gov/appeal-insurance-company-decision/",
"_comment": "A real, live claimset: five load-bearing facts from a published consumer guide, each pinned to the primary federal source it came from. Run `claimset verify examples/healthcare-appeals.claims.json` and you are checking the guide against healthcare.gov right now, not against what healthcare.gov said when the guide was written. Note claim 3: the assertion is written 'four months' and the page says the same thing in digits or words depending on the day - number normalisation is what stops that from being a false alarm.",
"claims": [
{
"claim_id": "internal-appeal-deadline-180-days",
"assertion": "You must file your internal appeal within 180 days (6 months) of receiving notice that your claim was denied.",
"source_url": "https://www.healthcare.gov/appeal-insurance-company-decision/internal-appeals/",
"checked_on": "2026-08-14",
"expires_on": "2027-02-14",
"source_sha256": "61f2f0abdf38d660fe4b2118a189f344be1f17a7aadb5cff364db191c44bd3fa",
"note": "source_sha256 is included here because these pages were measured byte-stable across repeated fetches. It is advisory: a byte change is reported, but it only fails the run under --strict-source, because a page can be edited elsewhere without touching the sentence you cited."
},
{
"claim_id": "initial-denial-notice-72-hours-urgent",
"assertion": "within 72 hours for urgent care cases",
"source_url": "https://www.healthcare.gov/appeal-insurance-company-decision/internal-appeals/",
"checked_on": "2026-08-14",
"expires_on": "2027-02-14",
"note": "Part of the list of deadlines by which an insurer must notify you in writing of a denial."
},
{
"claim_id": "external-review-deadline-four-months",
"assertion": "you must file a written request for an external review within four months after the date you receive a notice or final determination from your insurer",
"source_url": "https://www.healthcare.gov/appeal-insurance-company-decision/external-review/",
"checked_on": "2026-08-14",
"expires_on": "2027-02-14",
"source_sha256": "149ad94ef004d0b7356e8343267575e9268921bde714cc1722eb4537d915fc0d",
"note": "Written with the number as a word on purpose. A naive substring checker false-alarms on this the day the CMS editor changes 'four' to '4'."
},
{
"claim_id": "external-review-standard-45-days",
"assertion": "no later than 45 days after the request was received",
"source_url": "https://www.healthcare.gov/appeal-insurance-company-decision/external-review/",
"checked_on": "2026-08-14",
"expires_on": "2027-02-14"
},
{
"claim_id": "external-review-decision-is-binding",
"assertion": "your insurer is required by law to accept the external reviewer's decision",
"source_url": "https://www.healthcare.gov/appeal-insurance-company-decision/external-review/",
"checked_on": "2026-08-14",
"expires_on": "2027-02-14",
"note": "The source renders the apostrophe as a typographic quote. Typographic folding is what makes this match."
}
]
}
$ claimset verify examples/healthcare-appeals.claims.json
claimset 0.1.0: examples/healthcare-appeals.claims.json (5 claims, as of 2026-08-15)
PASS internal-appeal-deadline-180-days source still says it (page changed elsewhere)
PASS initial-denial-notice-72-hours-urgent source still says it
PASS external-review-deadline-four-months source still says it (page changed elsewhere)
PASS external-review-standard-45-days source still says it
PASS external-review-decision-is-binding source still says it
PASS 5
PASS: every live claim still matches its source.
$ echo $?
0
Live run against healthcare.gov on 15 August 2026. A later run may not say this — that is the entire point of publishing it. If one of these deadlines changes, this example turns red, and so does every guide that cited it.
internal-appeal-deadline-180-days — and the "page changed elsewhere" noteThis claim pins a source_sha256. The page's bytes have changed since it was recorded, and the verifier says so — but it does not fail the run, because the sentence being cited is still there. A page can be edited anywhere without touching the clause you quoted. Treating every byte change as drift would produce a red build every time a footer changes, and a checker that cries wolf is a checker nobody reads. Under --strict-source it fails; that is a deliberate opt-in.
initial-denial-notice-72-hours-urgent — short, but not vagueThe assertion is six words: within 72 hours for urgent care cases. It survives the falsifiability floor because it carries a number and two or more significant words. A span this size is deliberately chosen: long enough that finding it is evidence, short enough that an editor's next pass on the source is unlikely to break it.
external-review-deadline-four-months — the numeral caseThe assertion is written four months. The source may spell it as a word or as a digit on any given day. It matches either way, because written cardinals are rewritten to digits on both sides before comparison. This exact case is a measured false alarm from an early draft: the guide wrote "4 months", the source wrote "four months", and a naive checker reported DRIFT for a fact that had not changed at all.
external-review-standard-45-days — a clause, not a conclusionno later than 45 days after the request was received is a span you can find on the page. "The insurer must decide quickly" would not be — it is a summary, and no string comparison can check it. The discipline the format imposes is that you must quote, and quoting is what makes a stranger able to falsify you.
external-review-decision-is-binding — the typography caseThe source renders the apostrophe in reviewer's as a curly quote; the register writes a straight one. They match because typographic folding runs before comparison — curly quotes, dash variants, non-breaking spaces and zero-width characters are CMS artefacts, not content. Normalisation only ever collapses distinctions that are presentational; it does no stemming and no synonym expansion, because those turn near-misses into passes.
The same idea, applied here: /claims.json pins six claims about the spec, the schema and the licence this site serves, each one to the page that serves it. Fetch it and verify it against this origin — nothing else needs to be up.
curl -O https://claimset.org/claims.json
claimset verify claims.json