v1.0.0
Major Changes
-
#160
b358b32- Breaking: schema 5. Recordings from earlier versions refuse to open with a re-record message. Re-record any stored baselines after upgrading. CLI commands and flags are unchanged, and measurement semantics are unchanged.Raw-JSON (recording) consumers:
- The
summaryobject is gone. The run-level counts, wall, INP, longest-task duration and per-iteration stats now live on the run span (spans[]withkind: "run"); each driver step carries its own on its step span. Read counts fromrun.counts, timing fromrun.wallMs/run.inpMs/run.perIteration/run.stats. - Wall fields are named by clock: a span's page-clock headline stays
wallMs(withwallClock: "page" | "trace"on every span whose wall is set), while the trace-clock window a reconciling bar tiles isbreakdown.wallMs. meta.passes: string[]is nowmeta.capture: string(the one capture mode).meta.driverandmeta.runtimeare removed; derive them frommeta.workload.lane("driver"/"builtin-load"are driver mode,"node"is the node runtime).summary.jsSelfMsmoved tometa.jsSelfMs;summary.totalEventsmoved tometa.totalEvents.
query … --format jsonconsumers: the stepSpanEntry/SpanAnatomyfieldbreakdownWallMsis renamed towindowMs;SpanCountsgainspaintInvalidations. - The
Minor Changes
-
#164
5c7857b- Dogfood remediation and a CI-gap close:- Cloudflare inline managed challenge is now detected: its same-origin
/cdn-cgi/challenge-platform/script, thewindow._cf_chl_optpage global, and a__cf_chl_rt_tkdocument token are strong signals, so a "Just a moment" interstitial no longer measures as the site. An embedded cross-origin Turnstile widget still passes. meta.browserVersionstamps the resolved engine build (chrome/firefoxbrowser.version(), nodeprocess.version) as{ raw, milestone }, and a newbrowser-versioncomparability axis WARNS (never blocks) when two recordings' milestones differ: exact counts survive a bump, directional numbers do not.meta.botWallcarries the detection verdict as structured data when--allow-bot-wallmeasured a challenge page anyway.query span --format jsongainssoftNavAgreement(the classifier-vs-engine soft-nav reconciliation, previously human-report-only);engineSoftNavis already emitted.- Site relation now tags a
--urlrun's resolved remote packages/files (not just unmapped origin buckets), from the script origin they resolved from; a mixed-origin bucket stays untagged. - wpd's own bot-wall probe frame no longer buckets in
query cpu. - New README "Running wpd in CI" section (cache the pinned browser; when a preinstalled browser is safe). Puppeteer is pinned exactly.
- Cloudflare inline managed challenge is now detected: its same-origin
-
#163
6667b93- Per-soft-step route web vitals (Chrome 151+). When a driver step soft-navigates and Chrome's heuristic fires, the step now carries the route transition's own LCP-equivalent, CLS, and INP instep.softNav, keyed by the soft nav'snavigationIdand anchored to the route clock:routeLcp(tag/url/size,routeMsinto the route),routeCls(the post-route shifts, spec session-window max), androuteInpMs/routeInteraction(the worst interaction after the route; the triggering click keeps the pre-nav id and stays in the step's maininp).query span <step>prints them under the step. Opportunistic and additive: a programmatic or untrusted-click route, older Chrome, and Firefox/node fire no engine entry, sosoftNavis absent, never a fabricated 0. No new flags; schema stays 5.