v1.2.0
Minor Changes
-
#174
8a2497f-diffgains--format json|toon(and the hidden--jsonalias): the same field-by-field
comparison, comparability warnings, gated regressions and per-span slice deltas as the human report,
serialized as aDiffView(aGroupDiffViewfor a run-group diff). Human output and
--fail-on-regressionexit codes are unchanged. New exported types:DiffView,DiffMetricRow,
GroupDiffView,DiffOutput.CLI help polish: the top-level tagline names all three targets and CPU self-time;
--helpand
record --helpgain quick-start epilogs;query events --kindlists the missinggc;query get
accepts the shared--jsonalias;--breakdown/--deephelp notes their mutual exclusivity and
where to read the result. -
#176
20e64af- Surface framework facts without drilling:query spansoverview rows now carry a compactaddons.react(version+build), so a bulk consumer reads framework identity off the overview instead of opening each span. The full per-span facts (commit counts, server phases) stay onquery span.- Recordings now stamp
meta.framework("off" | "auto"), so a deliberate--framework offrun is distinguishable from anautorun that detected no framework (both carry noSpan.addons).
-
#177
1bb07a4- Three polish fixes: README links to non-shipped repo files (AGENTS.md, docs/, ...) are now absolute
GitHub URLs, so they resolve on the npm page and in an installed package. The blame docs now state
that a sampled--breakdownforced-blamecountis a sampling-frequency signal, never comparable to
--deep's exact flush count. The built-in--urlload flow stamps ameta.notesentry (and tags the
query spanrun line) when the boot did near-zero work, the tell of a consent/region shell measured
in place of the app; note-tier only, never a gate. -
#172
dc97fda- Complete the public type surface so every type named inside an exported type is itself importable (no more hand-rolling a shape the package already describes). New root exports includeCaptureMode,TargetLane,WorkloadLane,Measured,CpuBreakdown/CpuSlice/CpuJsSlice,LayoutShift(+Source/Rect),EngineSoftNav,SoftNavRoute(+Lcp)/SoftNavVerdict/SoftNavAgreement,ThrashReport/ThrashStep/DirtiedByWrite/DirtiedByWriteRollup/FirefoxDirtiedByReport,WorkloadIdentity,SourceMapDiagnostics/SourceMapFailure,FrameFloor/WallMultipleFloor/WorkSignalFloor,SpanCountsEntry,RawProfileNode/RawCallFrame/GeckoSlice, and the driverStepOpts/Until.Narrowed the closed-union output fields from
stringto their real unions:RecordingMeta.captureandGroupSpanMember.modeto the capture-mode union, andSpansResult/SpanAnatomy/GroupSpanStitchtargetto"chrome" | "firefox" | "node". Reading these fields now yields the exact literal type instead of a bare string. -
#175
11173d5- Label floored trusted-click driver steps on--breakdown. A trustedpage.clickcarries ~8ms of
input dispatch inside the step window, so a floored cheap step's wall (~41ms) lands off any exact
frame multiple and the old wall-multiple check missed it.query span/query spansnow read a
step's flooring off its reconciling bar (sub-frame real work in an idle-dominated window), so a
sub-frame interaction is no longer read as real work.The
frameFloorJSON field carries abasisdiscriminator:{ basis: "wall-multiple", floorMs, multiple }for a bench/in-page/measure wall and INP, or{ basis: "work-signal", floorMs, workMs }
for a driver step. Exported asFrameFloor(union) withWallMultipleFloor/WorkSignalFloor.
Patch Changes
-
#170
8ab7390- Driver reliability fixes:- INP no longer under-reports on a slow environment. The end-of-step flush now drains every in-page observer's
takeRecords()(INP, LoAF, layout-shift, LCP, soft-nav) before reading, and waits (bounded) for the Event Timing entry on a step that dispatched a trusted interaction. An entry queued-but-undispatched at the read instant was silently lost, reading INP lower and letting a real regression slip pastassert --max-inp. - A mid-step hard navigation no longer hard-fails the record. When a step's action triggers a navigation that commits during the default settle, the settle re-attaches to the new document instead of dying with "Execution context was destroyed".
- SIGINT/SIGTERM/SIGHUP now clean up. A killed run SIGKILLs its Chrome process and unlinks its temp files instead of orphaning them, then re-raises the signal.
- INP no longer under-reports on a slow environment. The end-of-step flush now drains every in-page observer's