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 |
|---|---|---|---|---|---|---|---|
| Aug 26, 2026, 1:18 AM UTC | 0s | 0 | 3 | 0 | 0 | mobile | logs/2026-08-26T01-18-33-873Z.ndjson |
| Aug 26, 2026, 1:18 AM UTC | 0s | 0 | 2 | 0 | 0 | mobile | logs/2026-08-26T01-18-37-791Z.ndjson |
| Aug 26, 2026, 1:18 AM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-08-26T01-18-33-327Z.ndjson |
| Aug 26, 2026, 1:18 AM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-08-26T01-18-32-146Z.ndjson |
| Aug 25, 2026, 7:31 PM UTC | 0s | 0 | 2 | 0 | 0 | mobile | logs/2026-08-25T19-31-24-150Z.ndjson |
| Aug 25, 2026, 7:31 PM UTC | 0s | 0 | 3 | 0 | 0 | mobile | logs/2026-08-25T19-31-28-863Z.ndjson |
| Aug 25, 2026, 7:31 PM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-08-25T19-31-27-132Z.ndjson |
| Aug 25, 2026, 7:31 PM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-08-25T19-31-23-854Z.ndjson |
| Aug 25, 2026, 6:38 PM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-08-25T18-38-20-221Z.ndjson |
| Aug 25, 2026, 6:38 PM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-08-25T18-38-29-688Z.ndjson |
| Aug 25, 2026, 6:38 PM UTC | 0s | 0 | 2 | 0 | 0 | mobile | logs/2026-08-25T18-38-16-919Z.ndjson |
| Aug 25, 2026, 6:38 PM UTC | 0s | 0 | 3 | 0 | 0 | mobile | logs/2026-08-25T18-38-15-434Z.ndjson |
| Aug 25, 2026, 5:48 PM UTC | 119.1s | 3 | 0 | 0 | 1 | mobile | logs/2026-08-25T17-48-40-083Z.ndjson |
| Aug 25, 2026, 5:48 PM UTC | 89.5s | 2 | 0 | 0 | 1 | mobile | logs/2026-08-25T17-48-38-143Z.ndjson |
| Aug 25, 2026, 5:48 PM UTC | 55.9s | 1 | 0 | 0 | 1 | mobile | logs/2026-08-25T17-48-44-173Z.ndjson |
| Aug 25, 2026, 5:48 PM UTC | 33.3s | 1 | 0 | 0 | 1 | mobile | logs/2026-08-25T17-48-36-500Z.ndjson |
| Aug 25, 2026, 5:31 PM UTC | 0s | 0 | 3 | 0 | 0 | mobile | logs/2026-08-25T17-31-08-818Z.ndjson |
| Aug 25, 2026, 5:31 PM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-08-25T17-31-12-818Z.ndjson |
| Aug 25, 2026, 5:31 PM UTC | 0s | 0 | 2 | 0 | 0 | mobile | logs/2026-08-25T17-31-10-609Z.ndjson |
| Aug 25, 2026, 5:31 PM UTC | 0s | 0 | 1 | 0 | 0 | mobile | logs/2026-08-25T17-31-08-113Z.ndjson |
| Aug 25, 2026, 5:18 PM UTC | 256.5s | 5 | 0 | 0 | 1 | mobile | logs/2026-08-25T17-18-44-941Z.ndjson |
| Aug 25, 2026, 5:07 PM UTC | 9.3s | 1 | 0 | 0 | 1 | mobile | logs/2026-08-25T17-07-46-836Z.ndjson |
| Aug 25, 2026, 5:07 PM UTC | 10.4s | 1 | 0 | 0 | 1 | mobile | logs/2026-08-25T17-07-23-559Z.ndjson |
| Aug 25, 2026, 4:56 PM UTC | 17.1s | 1 | 0 | 0 | 1 | mobile | logs/2026-08-25T16-56-28-877Z.ndjson |
| Aug 25, 2026, 4:49 PM UTC | 250.1s | 5 | 0 | 0 | 1 | mobile | logs/2026-08-25T16-49-27-548Z.ndjson |
| Aug 25, 2026, 4:49 PM UTC | 11.3s | 1 | 0 | 0 | 1 | mobile | logs/2026-08-25T16-49-00-103Z.ndjson |
| Aug 25, 2026, 4:31 PM UTC | 355.6s | 7 | 0 | 0 | 1 | mobile | logs/2026-08-25T16-31-15-105Z.ndjson |
| Aug 25, 2026, 2:43 PM UTC | 378s | 2 | 366 | 0 | 1 | mobile | logs/2026-08-25T14-43-49-029Z.ndjson |
| Aug 25, 2026, 2:43 PM UTC | 216.3s | 0 | 351 | 4 | 12 | mobile | logs/2026-08-25T14-43-46-996Z.ndjson |
| Aug 25, 2026, 2:43 PM UTC | 33.1s | 1 | 366 | 0 | 0 | mobile | logs/2026-08-25T14-43-44-111Z.ndjson |
| Aug 25, 2026, 2:43 PM UTC | 0s | 0 | 0 | 0 | 0 | — | logs/backfill-2026-08-25T14-43-53-378Z.ndjson |
| Aug 25, 2026, 2:43 PM UTC | 0s | 0 | 371 | 0 | 0 | mobile | logs/2026-08-25T14-43-48-650Z.ndjson |
| Aug 25, 2026, 1:49 PM UTC | 827s | 8 | 363 | 0 | 2 | mobile | logs/2026-08-25T13-49-48-784Z.ndjson |
| Aug 25, 2026, 1:49 PM UTC | 337.6s | 2 | 366 | 0 | 1 | mobile | logs/2026-08-25T13-49-49-956Z.ndjson |
| Aug 25, 2026, 1:49 PM UTC | 131.2s | 2 | 365 | 0 | 0 | mobile | logs/2026-08-25T13-49-59-713Z.ndjson |
| Aug 25, 2026, 1:49 PM UTC | 99.4s | 1 | 350 | 1 | 3 | mobile | logs/2026-08-25T13-49-53-804Z.ndjson |
| Aug 25, 2026, 1:49 PM UTC | 3.9s | 9 | 0 | 0 | 0 | — | logs/backfill-2026-08-25T13-49-59-859Z.ndjson |
| Aug 25, 2026, 12:44 PM UTC | 398.5s | 0 | 350 | 14 | 45 | mobile | logs/2026-08-25T12-44-10-876Z.ndjson |
| Aug 25, 2026, 12:44 PM UTC | 56.6s | 0 | 365 | 3 | 9 | mobile | logs/2026-08-25T12-44-08-070Z.ndjson |
| Aug 25, 2026, 12:44 PM UTC | 47s | 0 | 365 | 2 | 6 | mobile | logs/2026-08-25T12-44-12-018Z.ndjson |
| Aug 25, 2026, 12:44 PM UTC | 0.1s | 0 | 368 | 0 | 0 | mobile | logs/2026-08-25T12-44-11-262Z.ndjson |
| Aug 25, 2026, 12:44 PM UTC | 0s | 0 | 0 | 0 | 0 | — | logs/backfill-2026-08-25T12-44-11-667Z.ndjson |
| Aug 25, 2026, 11:26 AM UTC | 72.9s | 1 | 367 | 0 | 0 | mobile | logs/2026-08-25T11-26-06-104Z.ndjson |
| Aug 25, 2026, 11:26 AM UTC | 29.6s | 1 | 364 | 0 | 0 | mobile | logs/2026-08-25T11-26-06-371Z.ndjson |
| Aug 25, 2026, 11:26 AM UTC | 0s | 0 | 365 | 0 | 0 | mobile | logs/2026-08-25T11-26-09-911Z.ndjson |
| Aug 25, 2026, 11:26 AM UTC | 0s | 0 | 0 | 0 | 0 | — | logs/backfill-2026-08-25T11-26-11-687Z.ndjson |
| Aug 25, 2026, 11:26 AM UTC | 0s | 0 | 350 | 0 | 0 | mobile | logs/2026-08-25T11-26-09-873Z.ndjson |
| Aug 25, 2026, 10:31 AM UTC | 567.8s | 5 | 360 | 1 | 4 | mobile | logs/2026-08-25T10-31-42-267Z.ndjson |
| Aug 25, 2026, 10:31 AM UTC | 303.5s | 1 | 367 | 0 | 1 | mobile | logs/2026-08-25T10-31-44-268Z.ndjson |
| Aug 25, 2026, 10:31 AM UTC | 165.3s | 1 | 364 | 0 | 1 | mobile | logs/2026-08-25T10-31-45-015Z.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