{"kind":"crawlcheck-assurance","v":1,"generated_at":"2026-10-16T09:46:57.234Z","availability":{"overall":"degraded","slos":[{"id":"resolve_availability","objective":"Resolve answers without a server error","target":0.999,"measured":0.9999180999180999,"samples":12210,"status":"met","settled":"met at 95% confidence","p50_ms":210,"p95_ms":327},{"id":"resolve_latency","objective":"Resolve answers for a measured domain within 300 ms in the Worker","target":0.95,"measured":0.9028665028665028,"samples":12210,"status":"missed","settled":"missed at 95% confidence","p50_ms":210,"p95_ms":327},{"id":"preflight_availability","objective":"Preflight decisions without a server error","target":0.999,"measured":1,"samples":2442,"status":"met","settled":"not settled: the target is inside the 95% interval, so more samples are needed to call it either way","p50_ms":219,"p95_ms":344},{"id":"preflight_latency","objective":"Preflight decisions within 300 ms in the Worker","target":0.95,"measured":0.7538902538902539,"samples":2442,"status":"missed","settled":"missed at 95% confidence","p50_ms":219,"p95_ms":344},{"id":"jit_latency","objective":"A first answer for a never-measured domain within 2 seconds in the Worker","target":0.95,"measured":0.8,"samples":210,"status":"missed","settled":"missed at 95% confidence","p50_ms":1076,"p95_ms":4370}],"open_incidents":0,"status":"https://crawlcheck.io/status","data":"https://crawlcheck.io/api/slo"},"eligibility":{"checks":["integrity_valid","signature_valid","issuer_trusted","fresh","scope_valid","decision_permits"],"eligible_to_act":"true only when every check holds","verifier":"https://crawlcheck.io/crawlcheck-verify.mjs","function":"eligibleToAct(receipt, { domain, action }, { publishedKids, allowWarn, confirmed })","cli":"node crawlcheck-verify.mjs receipt.json --act example.com:read"},"keys":{"request_key":"hcIAczGf-8EFBnkunmZlvFWnD2nHHeHeC9cM4BTiBVo","document_key":"1hHmE3fo1rg5Ig70wuFtJ5wBc7G-sUTgUJkxyPWFRps","decision_key":"NP5GewowKgJmU_ITSisKu-0ZFpvAL1ov86KDXIFmecw","log_key":"AqR_NNfBCBE0A_KXkQ86yrLAHiC-JbA5Df0BSV1PIEU","purpose_keys_sign_from":"2026-11-09T17:00:00Z","separated":true,"page":"https://crawlcheck.io/keys"},"observers":{"rows":[{"observer_id":"crawlcheck-worker","class":"primary","operator":"CrawlCheck (VSNARY)","run_by_crawlcheck":true,"network":"CrawlCheck primary network","status":"active","last_seen":null,"verifies":"every primary measurement","code":"ours","credentials":"ours (Worker secret)","deploy":"ours","limitation":"this is CrawlCheck itself: it corroborates nothing"},{"observer_id":"gha-azure-1","class":"secondary_cloud","operator":"CrawlCheck (VSNARY)","run_by_crawlcheck":true,"network":"GitHub-hosted runners on Microsoft Azure; not any crawler operator's network, so it corroborates a vantage question, never an operator's own crawl","status":"active","last_seen":"2026-10-16T06:28:13.580Z","verifies":"the homepage under each identity, from a second network","code":"ours","credentials":"a new key per run, bound to our workflow by a GitHub token","deploy":"ours (repository workflow)","limitation":"a different network and a third party (GitHub) attesting which workflow ran; not a different operator"},{"observer_id":"ext:*","class":"customer_browser_extension","operator":"people running the CrawlCheck extension (version 1.0.4 and later) with sharing switched on","run_by_crawlcheck":false,"network":"the visitor's own connection (home, office or mobile), recorded as country and network name only; the address is never stored","status":"active","last_seen":null,"verifies":"what a crawler is served from a visitor's own connection","code":"ours (the extension)","credentials":"one key per install, made on the device","deploy":"installed by each person","limitation":"the vantage is the visitor's; the code is ours; an install key proves one install, not one person"},{"observer_id":"ind:cli-2ns-x7r1zy","class":"independent","operator":"CrawlCheck (VSNARY), PHP client test from a Google Cloud container","run_by_crawlcheck":true,"network":"this machine's network","status":"unknown","last_seen":null,"verifies":"readings of queued URLs under the open observer protocol","code":"the open protocol client","credentials":"an Ed25519 key made on the observer's machine","deploy":"whoever runs it","limitation":"run by CrawlCheck from another network: network diversity, not an independent operator"},{"observer_id":"ind:gcp-session-1","class":"independent","operator":"CrawlCheck (VSNARY), run from a Claude cloud session","run_by_crawlcheck":true,"network":"Google Cloud egress (AS396982), not Cloudflare, not Azure","status":"unknown","last_seen":null,"verifies":"readings of queued URLs under the open observer protocol","code":"the open protocol client","credentials":"an Ed25519 key made on the observer's machine","deploy":"whoever runs it","limitation":"run by CrawlCheck from another network: network diversity, not an independent operator"},{"observer_id":"ind:gcp-tv-1","class":"independent","operator":"CrawlCheck (VSNARY), test vantage run from a Google Cloud container","run_by_crawlcheck":true,"network":"Google Cloud (AS396982), Columbus US","status":"unknown","last_seen":null,"verifies":"readings of queued URLs under the open observer protocol","code":"the open protocol client","credentials":"an Ed25519 key made on the observer's machine","deploy":"whoever runs it","limitation":"run by CrawlCheck from another network: network diversity, not an independent operator"},{"observer_id":"ind:google-llc-iowa-e94e42","class":"independent","operator":"CrawlCheck (VSNARY) - installer test from a Google Cloud container","run_by_crawlcheck":true,"network":"AS396982 Google LLC, Council Bluffs, Iowa, US","status":"quarantined","last_seen":null,"verifies":"readings of queued URLs under the open observer protocol","code":"the open protocol client","credentials":"an Ed25519 key made on the observer's machine","deploy":"whoever runs it","limitation":"run by CrawlCheck from another network: network diversity, not an independent operator"},{"observer_id":"ind:installtest-gcp","class":"independent","operator":"CrawlCheck (VSNARY) installer test","run_by_crawlcheck":true,"network":"AS396982 Google LLC, Columbus US","status":"quarantined","last_seen":"2026-10-08T20:40:50.821Z","verifies":"readings of queued URLs under the open observer protocol","code":"the open protocol client","credentials":"an Ed25519 key made on the observer's machine","deploy":"whoever runs it","limitation":"run by CrawlCheck from another network: network diversity, not an independent operator"},{"observer_id":"ind:refcheck-gcp-","class":"independent","operator":"CrawlCheck (VSNARY) reference check","run_by_crawlcheck":true,"network":"Google Cloud container","status":"quarantined","last_seen":"2026-10-08T21:13:54.537Z","verifies":"readings of queued URLs under the open observer protocol","code":"the open protocol client","credentials":"an Ed25519 key made on the observer's machine","deploy":"whoever runs it","limitation":"run by CrawlCheck from another network: network diversity, not an independent operator"},{"observer_id":"ind:vsnary-cloudways-1","class":"independent","operator":"VSNARY (operator of crawlcheck.io)","run_by_crawlcheck":true,"network":"Cloudways managed hosting: the WordPress server of treeservicedenverllc.com","status":"active","last_seen":"2026-10-16T09:30:45.961Z","verifies":"readings of queued URLs under the open observer protocol","code":"the open protocol client","credentials":"an Ed25519 key made on the observer's machine","deploy":"whoever runs it","limitation":"run by CrawlCheck from another network: network diversity, not an independent operator"},{"observer_id":"log-witness","class":"witness","operator":"GitHub (identity token) running CrawlCheck's workflow","run_by_crawlcheck":true,"network":"GitHub-hosted runners","status":"active","last_seen":null,"verifies":"each signed head of the Resolve log, co-signed with a GitHub-issued token naming the workflow that saw it","code":"ours","credentials":"GitHub's OIDC token for that run","deploy":"ours (repository workflow)","limitation":"GitHub attests which workflow ran and when; it does not recompute the log. A split view is caught by clients comparing heads (gossip)"}],"total":11,"run_by_crawlcheck":10,"outside_operators":["ext:*"]},"coverage":{"domains":{"attempted":439498,"measured":303361,"full_scans":3872,"registry_listed":758,"reading":"attempted = every domain the census tried; measured = domains with at least one reading (most are the census's lighter reading); full scans = graded reports; registry = full scans that can be published and have not opted out. Resolve answers for any domain; a never-measured one gets a first, partial answer marked as such."},"mcp":{"registry_records":43267,"remote_endpoints":27645,"probed_this_cycle":5925,"handshake_with_tools":2766,"handshake_no_tools":102,"auth_required":2062,"unreachable_or_error":987,"tool_lists_scanned":2766,"flagged":2,"drifted":527,"cycle_started_at":"2026-10-13T20:48:15.821Z","reading":"indexed is not connected, and connected is not safe: a clean tool scan means no known poisoning pattern was found, not that none exists."}},"operations":{"witness":{"head_batch":592,"head_at":"2026-10-16T09:32:29.228Z","witnessed_batch":584,"witnessed_at":"2026-10-16T06:27:14.790Z","batches_behind":8,"minutes_since_cosign":200,"witness":"github-actions:emmanuelorta/crawlcheck/.github/workflows/log-witness.yml","schedule":"hourly at :51 UTC on GitHub Actions, which can run late","data":["https://crawlcheck.io/api/v1/log","https://crawlcheck.io/api/v1/log/witness/latest"]},"seals":{"closes":"each UTC day is sealed after it closes (scheduled 01:17 UTC)","days":[{"date":"2026-10-15","sealed":true,"records":2562,"delay_min":78,"bitcoin_block":971644,"calendars":2},{"date":"2026-10-14","sealed":true,"records":1932,"delay_min":77,"bitcoin_block":971491,"calendars":2},{"date":"2026-10-13","sealed":true,"records":1843,"delay_min":78,"bitcoin_block":971331,"calendars":2},{"date":"2026-10-12","sealed":true,"records":1918,"delay_min":78,"bitcoin_block":971169,"calendars":2},{"date":"2026-10-11","sealed":true,"records":14122,"delay_min":78,"bitcoin_block":971021,"calendars":2},{"date":"2026-10-10","sealed":true,"records":47401,"delay_min":1278,"bitcoin_block":970985,"calendars":2},{"date":"2026-10-09","sealed":true,"records":48396,"delay_min":618,"bitcoin_block":970752,"calendars":2}],"sealed_days":7,"median_delay_min":78,"max_delay_min":1278,"anchored_days":7,"reading":"delay = when the seal was written after the day closed; a seal reaches Bitcoin when a calendar's attestation is mined, usually within hours","data":"https://crawlcheck.io/proof"},"revocation_drill":{"what":"daily: the incident switch on selftest.crawlcheck.io is flipped, Resolve must report the incident, a transact preflight must return block, and the domain must appear on the signed revocation list, then it is cleared","last_at":"2026-10-15T21:32:29.431Z","last_ok":true,"last_ms":2294,"runs":11,"ok_runs":11,"data":"https://crawlcheck.io/api/v1/incident/selftest"},"restore_test":{"what":"the oldest archived records rebuilt from the archive alone (the 90-day projections ignored) and compared byte for byte with what was served","schedule":"weekly, Mondays 03:17 MDT (09:17 UTC), and on demand; GitHub Actions, proven by GitHub's OIDC token","last_at":"2026-10-12T19:08:32.953Z","age_days":3.6,"overdue":false,"green":true,"records":20,"identical":20,"mismatched":0,"run":"https://github.com/emmanuelorta/crawlcheck/actions/runs/38295105766","data":"https://crawlcheck.io/api/reconstruction"},"succession":{"continues_without_us":["every signed answer, receipt and evidence bundle verifies offline with crawlcheck-verify.mjs and the published keys, with no call to CrawlCheck","each sealed day stays provable through its OpenTimestamps proof and Bitcoin block, which no one at CrawlCheck can alter","the daily signed snapshot and the census are public (CC BY 4.0) and can be mirrored by anyone","the transparency log's witnessed heads are held by every client that kept them"],"stops_without_us":["new measurements and new signed answers","revocations and incident switches","the observer network's scheduling"],"named_successor":null,"reading":"no successor operator has been named yet; until one is, the guarantees above are the ones that survive the operator"}},"adoption":{"window_days":30,"decisions":{"ours":109,"other":706,"verified_agent":0},"receipt_checks":{"outside":31,"ours":3},"funnel":{"window_days":30,"counted_since":{"agents":"2026-10-10","sites":"2026-10-10"},"stages":[{"stage":"decisions asked for by callers that are not us","count":706,"of":null,"note":"verified agents plus other callers; other may still include an untagged test of ours"},{"stage":"of those, from an AI agent verified by its operator's ranges","count":0,"of":706,"pct":0},{"stage":"distinct agent names asking (self-declared)","count":6,"of":null,"note":"counted from 10 Oct 2026; an agent that names itself the same way is one"},{"stage":"receipts checked by a site we do not run","count":31,"of":706,"pct":4.4,"note":"a presented receipt is only visible when the site checks it, so presented and checked are one stage"},{"stage":"distinct sites checking receipts","count":2,"of":null},{"stage":"agent names asking on 2 or more days","count":4,"of":6,"pct":66.7},{"stage":"sites checking on 2 or more days","count":2,"of":2,"pct":100}],"host_only_receipts":10,"reading":"Our own traffic (our key, owner session, own sites, self-tagged tests) is never counted. Receipt checks recorded before 10 Oct 2026 were classed by host alone, so they are listed apart as host_only_receipts and excluded from every stage and from the goal."},"callers_this_week":{"from":"2026-10-09","to":"2026-10-15","ours":9223,"outside":23956,"outside_by_class":{"browser":2005,"bot:other":3950,"http-client":599,"other":4128,"bot:Amazonbot":686,"mcp-client":2350,"node":8524,"python":608,"bot:Maps-bot":20,"perplexity":118,"openai":9,"bot:BrickBlueBot":60,"no-ua":171,"bot:GolemreachTrustBot":88,"sdk-python":346,"bot:WellknownBot":20,"bot:TalandorBot":24,"bot:Faceabot":84,"bot:YandexBot":18,"bot:archive.org_bot":2,"bot:InvokeRankBot":34,"bot:Reflectionbot":6,"bot:ExaSearchBot":1,"bot:AhrefsBot":2,"bot:ShapBot":4,"bot:agent-tools.cloud-crawle":29,"browser-app":3,"bot:DataForSeoBot":3,"bot:ExtOpsBot":1,"bot:Applebot":2,"bot:research-bot":1,"bot:PluginboardBot":16,"claude":11,"bot:SemrushBot":3,"google-ai":3,"bot:CapabilityIndexBot":2,"bot:AnchorTerminalBot":1,"bot:MJ12bot":20,"bot:ThePluginStoreBot":4},"by_route":{"/api/v1/resolve":{"ours":7532,"outside":9799},"/api/v1/preflight":{"ours":1691,"outside":3933},"/api/v1/visitor":{"ours":0,"outside":2996},"/mcp":{"ours":0,"outside":6170},"/api/v1/outcome":{"ours":0,"outside":1058}}},"reading":"ours = our key, owner session, own sites, probes or self-tagged tests; other = everyone else and may still include an untagged test of ours; verified_agent = a caller naming an AI agent from inside that operator's published ranges, which we cannot pad. Caller classes are read from the user agent and recorded from 2026-10-10."},"code":{"version_id":"03a2fe48-da7f-4760-83a0-11e9b8db31a6","script_sha16":"75004d4e7c7f1c4a","state":"attested","deployed":{"at":"2026-10-16T05:34:14.964Z","commit":"4021022fa581","run":"38856409951"},"build_log_entry":419,"score_version":32,"scoring_policy_sha256":"d3c9c95d409dae4e90b8e868ff113e631e445e33c14a0cc008dda144293821b3","decision_rules_sha256":"18dd5636e0896692ab518050cb401744edea2e6f1086dff94fead314959bdc3e","check":"https://crawlcheck.io/api/v1/builds/03a2fe48-da7f-4760-83a0-11e9b8db31a6"},"sha256":"d57efba518438f8801b0ce73b460fb144429fa78f8968b1444a65427ca4ede24","signature":{"v":1,"alg":"Ed25519","kid":"1hHmE3fo1rg5Ig70wuFtJ5wBc7G-sUTgUJkxyPWFRps","over":"sha256","message":"crawlcheck-data-v1\nd57efba518438f8801b0ce73b460fb144429fa78f8968b1444a65427ca4ede24","sig":"tI2VvFQZbp1t1wqpLY6ZHbrneE7YvP_knyuYkR3rFrIWwYPmvNa8aZ_sZEfLta3qPwS9rYXHk_sq6pFJ7mK-BQ","signed_at":"2026-10-16T09:48:03.168Z","key":{"kid":"1hHmE3fo1rg5Ig70wuFtJ5wBc7G-sUTgUJkxyPWFRps","jwk":{"kty":"OKP","crv":"Ed25519","x":"5TmKCOx0TTHepq7HwyXBHvGQpVCSBd2lV8cLzYVqFxQ"},"published_in":"https://crawlcheck.io/.well-known/http-message-signatures-directory"},"canonical":"sha256 over canonical JSON of every field except sha256 and signature"}}