{"kind":"crawlcheck-slo","generated_at":"2026-10-13T08:48:05.758Z","window_days":30,"slos":[{"id":"resolve_availability","objective":"Resolve answers without a server error","target":0.999,"window_days":30,"samples":8340,"good":8339,"measured":0.9998800959232614,"measured_interval":{"k":8339,"n":8340,"share":1,"low":0.999,"high":1,"level":0.95,"method":"Wilson score interval"},"settled":"met at 95% confidence","status":"met","error_budget":{"allowed_bad":8.34,"spent":1,"remaining":88},"burn_rate_24h":0,"latency_ms":{"p50":202,"p95":294},"wire_ms_p95":398},{"id":"resolve_latency","objective":"Resolve answers for a measured domain within 300 ms in the Worker","target":0.95,"window_days":30,"samples":8340,"good":7990,"measured":0.9580335731414868,"measured_interval":{"k":7990,"n":8340,"share":0.958,"low":0.954,"high":0.962,"level":0.95,"method":"Wilson score interval"},"settled":"met at 95% confidence","status":"at_risk","error_budget":{"allowed_bad":417,"spent":350,"remaining":16.1},"burn_rate_24h":3.11,"latency_ms":{"p50":202,"p95":294},"wire_ms_p95":398},{"id":"preflight_availability","objective":"Preflight decisions without a server error","target":0.999,"window_days":30,"samples":1668,"good":1668,"measured":1,"measured_interval":{"k":1668,"n":1668,"share":1,"low":0.998,"high":1,"level":0.95,"method":"Wilson score interval"},"settled":"not settled: the target is inside the 95% interval, so more samples are needed to call it either way","status":"met","error_budget":{"allowed_bad":1.66,"spent":0,"remaining":100},"burn_rate_24h":0,"latency_ms":{"p50":211,"p95":310},"wire_ms_p95":699},{"id":"preflight_latency","objective":"Preflight decisions within 300 ms in the Worker","target":0.95,"window_days":30,"samples":1668,"good":1359,"measured":0.814748201438849,"measured_interval":{"k":1359,"n":1668,"share":0.815,"low":0.795,"high":0.833,"level":0.95,"method":"Wilson score interval"},"settled":"missed at 95% confidence","status":"missed","error_budget":{"allowed_bad":83.4,"spent":309,"remaining":0},"burn_rate_24h":7.78,"latency_ms":{"p50":211,"p95":310},"wire_ms_p95":699},{"id":"jit_latency","objective":"A first answer for a never-measured domain within 2 seconds in the Worker","target":0.95,"window_days":30,"samples":120,"good":101,"measured":0.8416666666666667,"measured_interval":{"k":101,"n":120,"share":0.842,"low":0.766,"high":0.896,"level":0.95,"method":"Wilson score interval"},"settled":"missed at 95% confidence","status":"missed","error_budget":{"allowed_bad":6,"spent":19,"remaining":0},"burn_rate_24h":8.42,"latency_ms":{"p50":768,"p95":4927},"wire_ms_p95":null}],"method":"Resolve and preflight are probed every two hours from a GitHub-hosted runner, outside Cloudflare (30 measured domains, 6 decisions per run); the Worker's own time comes from its Server-Timing header. A first answer for a never-measured domain is timed by the Worker on every real request. A server error (5xx) or no answer counts against availability; a slow answer counts against latency. The error budget is the share of samples allowed to miss in the window; burn_rate_24h above 1 spends it faster than the window allows, above 2 marks the objective at risk.","probe_agent":"crawlcheck-slo-probe"}