Measurement runs
Every measurement pass, read from the NDJSON run log. When a number looks wrong, the first question is whether that run actually finished — this answers it without shell access to the build machine.
| Started | Duration | Measured | Skipped | Failed | Warnings | Form factor | Log file |
|---|---|---|---|---|---|---|---|
| Oct 10, 2026, 10:55 AM UTC | 115.9s | 3 | 0 | 0 | 1 | mobile | logs/2026-10-10T10-55-07-412Z.ndjson |
| Oct 10, 2026, 10:55 AM UTC | 83.2s | 2 | 0 | 0 | 1 | mobile | logs/2026-10-10T10-55-08-556Z.ndjson |
| Oct 10, 2026, 10:55 AM UTC | 29.8s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-10T10-55-05-506Z.ndjson |
| Oct 10, 2026, 10:55 AM UTC | 26.9s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-10T10-55-07-063Z.ndjson |
| Oct 9, 2026, 11:37 AM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-10-09T11-37-20-899Z.ndjson |
| Oct 9, 2026, 11:37 AM UTC | 0s | 0 | 2 | 0 | 0 | mobile | logs/2026-10-09T11-37-20-680Z.ndjson |
| Oct 9, 2026, 11:37 AM UTC | 0s | 0 | 3 | 0 | 0 | mobile | logs/2026-10-09T11-37-21-733Z.ndjson |
| Oct 9, 2026, 11:37 AM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-10-09T11-37-20-571Z.ndjson |
| Oct 8, 2026, 11:44 AM UTC | 122.5s | 3 | 0 | 0 | 1 | mobile | logs/2026-10-08T11-44-08-961Z.ndjson |
| Oct 8, 2026, 11:44 AM UTC | 84.2s | 2 | 0 | 0 | 1 | mobile | logs/2026-10-08T11-44-03-601Z.ndjson |
| Oct 8, 2026, 11:44 AM UTC | 35s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-08T11-44-08-218Z.ndjson |
| Oct 8, 2026, 11:44 AM UTC | 24.5s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-08T11-44-07-206Z.ndjson |
| Oct 7, 2026, 11:28 AM UTC | 110.7s | 3 | 0 | 0 | 1 | mobile | logs/2026-10-07T11-28-30-136Z.ndjson |
| Oct 7, 2026, 11:28 AM UTC | 97.6s | 2 | 0 | 0 | 1 | mobile | logs/2026-10-07T11-28-41-051Z.ndjson |
| Oct 7, 2026, 11:28 AM UTC | 26.2s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-07T11-28-34-802Z.ndjson |
| Oct 7, 2026, 11:28 AM UTC | 23.8s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-07T11-28-30-508Z.ndjson |
| Oct 6, 2026, 11:41 AM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-10-06T11-41-10-424Z.ndjson |
| Oct 6, 2026, 11:41 AM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-10-06T11-41-14-728Z.ndjson |
| Oct 6, 2026, 11:41 AM UTC | 0s | 0 | 2 | 0 | 0 | mobile | logs/2026-10-06T11-41-10-241Z.ndjson |
| Oct 6, 2026, 11:41 AM UTC | 0s | 0 | 3 | 0 | 0 | mobile | logs/2026-10-06T11-41-08-373Z.ndjson |
| Oct 5, 2026, 11:59 AM UTC | 116.9s | 3 | 0 | 0 | 1 | mobile | logs/2026-10-05T11-59-38-099Z.ndjson |
| Oct 5, 2026, 11:59 AM UTC | 84s | 2 | 0 | 0 | 1 | mobile | logs/2026-10-05T11-59-39-794Z.ndjson |
| Oct 5, 2026, 11:59 AM UTC | 32.9s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-05T11-59-38-124Z.ndjson |
| Oct 5, 2026, 11:59 AM UTC | 24.6s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-05T11-59-38-376Z.ndjson |
| Oct 4, 2026, 10:51 AM UTC | 114.8s | 3 | 0 | 0 | 1 | mobile | logs/2026-10-04T10-51-12-496Z.ndjson |
| Oct 4, 2026, 10:51 AM UTC | 88.8s | 2 | 0 | 0 | 1 | mobile | logs/2026-10-04T10-51-18-336Z.ndjson |
| Oct 4, 2026, 10:51 AM UTC | 34.1s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-04T10-51-15-366Z.ndjson |
| Oct 4, 2026, 10:51 AM UTC | 34.7s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-04T10-51-13-124Z.ndjson |
| Oct 3, 2026, 10:10 AM UTC | 117.7s | 3 | 0 | 0 | 1 | mobile | logs/2026-10-03T10-10-40-875Z.ndjson |
| Oct 3, 2026, 10:10 AM UTC | 85.1s | 2 | 0 | 0 | 1 | mobile | logs/2026-10-03T10-10-36-931Z.ndjson |
| Oct 3, 2026, 10:10 AM UTC | 34s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-03T10-10-41-766Z.ndjson |
| Oct 3, 2026, 10:10 AM UTC | 32.2s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-03T10-10-37-554Z.ndjson |
| Oct 2, 2026, 10:50 AM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-10-02T10-50-44-408Z.ndjson |
| Oct 2, 2026, 10:50 AM UTC | 0s | 0 | 2 | 0 | 0 | mobile | logs/2026-10-02T10-50-46-931Z.ndjson |
| Oct 2, 2026, 10:50 AM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-10-02T10-50-45-645Z.ndjson |
| Oct 2, 2026, 10:50 AM UTC | 0s | 0 | 3 | 0 | 0 | mobile | logs/2026-10-02T10-50-43-905Z.ndjson |
| Oct 1, 2026, 11:18 AM UTC | 117.7s | 3 | 0 | 0 | 1 | mobile | logs/2026-10-01T11-18-23-213Z.ndjson |
| Oct 1, 2026, 11:18 AM UTC | 82.6s | 2 | 0 | 0 | 1 | mobile | logs/2026-10-01T11-18-43-254Z.ndjson |
| Oct 1, 2026, 11:18 AM UTC | 26.8s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-01T11-18-23-514Z.ndjson |
| Oct 1, 2026, 11:18 AM UTC | 24.2s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-01T11-18-24-863Z.ndjson |
| Sep 30, 2026, 10:52 AM UTC | 86.4s | 2 | 0 | 0 | 1 | mobile | logs/2026-09-30T10-52-10-444Z.ndjson |
| Sep 30, 2026, 10:51 AM UTC | 109.4s | 3 | 0 | 0 | 1 | mobile | logs/2026-09-30T10-51-34-237Z.ndjson |
| Sep 30, 2026, 10:51 AM UTC | 31.3s | 1 | 0 | 0 | 1 | mobile | logs/2026-09-30T10-51-36-810Z.ndjson |
| Sep 30, 2026, 10:51 AM UTC | 33.6s | 1 | 0 | 0 | 1 | mobile | logs/2026-09-30T10-51-34-267Z.ndjson |
| Sep 29, 2026, 11:01 AM UTC | 0s | 0 | 3 | 0 | 0 | mobile | logs/2026-09-29T11-01-15-390Z.ndjson |
| Sep 29, 2026, 11:01 AM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-09-29T11-01-22-819Z.ndjson |
| Sep 29, 2026, 11:01 AM UTC | 0s | 0 | 2 | 0 | 0 | mobile | logs/2026-09-29T11-01-16-446Z.ndjson |
| Sep 29, 2026, 11:01 AM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-09-29T11-01-15-134Z.ndjson |
| Sep 28, 2026, 11:23 AM UTC | 114.7s | 3 | 0 | 0 | 1 | mobile | logs/2026-09-28T11-23-31-009Z.ndjson |
| Sep 28, 2026, 11:23 AM UTC | 83.1s | 2 | 0 | 0 | 1 | mobile | logs/2026-09-28T11-23-30-746Z.ndjson |
Reading the logs
Each run writes a full NDJSON log to logs/<runId>.ndjson,
one JSON object per line, plus a summary line appended to
logs/runs.ndjson. Both are greppable:
# Every warning and error across all runs
grep -h '"level":"warn"\|"level":"error"' logs/*.ndjson | jq .
# What happened to one site in one run
jq 'select(.data.url == "https://example.com/")' logs/2026-01-01*.ndjson
# Run history at a glance
npx speedlify runs