Evidence · ledger
Dispute and correction ledger
Every finding can be disputed by the site’s owner. The finding is re-measured from more than one network, the verdict comes from a fixed table, and the resolution is signed and published here, including when CrawlCheck was wrong.
1 dispute, 1 resolved (1 upheld).
| Dispute | Site and finding | Filed | Outcome |
|---|---|---|---|
| dsp1:ae3bb8c8… | supremelandscapersdenver.com · PAGE_IS_MOSTLY_CODE | 2026-10-02 | Upheld: the finding stands |
File a dispute
POST /api/disputes with {"report_id": "…", "code": "…", "path": "/", "ground": "misread | fixed | network | rule", "statement": "what the finding gets wrong"}. With a licence for the domain (header x-crawlcheck-key) or the owner’s session it is accepted at once. Without one, the answer carries a token: serve it as the line crawlcheck-dispute=<token> at https://<domain>/.well-known/crawlcheck-dispute.txt and POST /api/disputes/confirm {"id": "…"}. Nothing about the record is checked or revealed until ownership is proven.
Once accepted: the rule is run again over the bytes the disputed scan sealed; CrawlCheck runs a fresh audit from Cloudflare; the URL goes to the front of the independent observers’ queue. The resolution is signed when one of them has read it, or after 48 hours. The disputed record is never edited: it is sealed. Instead every record that carries the finding links the dispute (findings[].disputes in the machine record, disputes in /api/explain).
How a dispute is decided
Three readings, then a fixed table. The table is the function dspVerdict; the offline verifier carries the same function and re-derives the verdict from the signed record.
| If | Verdict | Effect |
|---|---|---|
| The rule, run again over the exact bytes the disputed scan received, does not hold | Corrected: the finding was wrong and is withdrawn | The finding is withdrawn: every record that carries it links this resolution, which says it was wrong. |
| The primary could not re-measure, or no independent network read the URL before the 48-hour deadline | Inconclusive | The finding stands; the dispute could not be decided and can be filed again. |
| An independent network received something different from the primary | Network-dependent: holds only where it was seen | The finding stands only for the network that observed it; the resolution names the networks that disagree. |
| The rule holds over the original bytes and the condition is still present from every network | Upheld: the finding stands | The finding stands on the record and on later records. |
| The rule holds over the original bytes and every network now finds the condition gone | Fixed since: correct when made, gone now | The finding stands for the record it was made on; the site no longer has it. |
| Every network finds it gone and the original bytes could not be re-checked | No longer observed | The finding stands for the record it was made on; the site no longer has it. |