Minor Changes
-
#215
85054d1- Add the allocation gate. A GC-pressure regression that allocates hard but costs little CPU passed every
gate before; nowalloc-diff <baseline> <current> --fail-on-regressiongates on net allocated bytes
(mirroringcpu-diff), andassert --max-alloc-mb <mb>gates the total against a budget. Both read an
--target node --allocrecording; a recording with no allocation model is a loud n/a-FAIL, never a
silent pass, and an alloc-diff refuses across an incompatible workload/lane/capture.The gate floor scales with the workload, the same as
cpu-diff:max(--noise-floor MB, --noise-pct% of the baseline), defaultmax(1 MB, 25%), since sampled byte totals are ~15-20% directional. New view
AllocDiffResult. -
#213
d62f653-assertgains--format json|toon, emitting a typedAssertView: a row per threshold (axis,
budget, measuredvalueornull,verdictpass/fail/n-a-fail, plus the routedmemberon a
run-group), the overallpassed, and theviolations. A CI PR-comment script now consumes the gate
verdict structurally instead of scraping the ASCII table. The exit code is unchanged (0 = passed, 1 =
any failed), so a--format jsongate fails the build exactly as the human report does. -
#212
1af338b-cpu-diff --fail-on-regression: the noise floor now scales with the workload. The net JS self-time
must clearmax(--noise-floor ms, --noise-pct% of the baseline), defaultmax(0.5 ms, 15%). The old
fixed 0.5 ms floor false-reds byte-identical code more as the workload grows (measured ~2% at a 5 ms
workload, ~40% at 220 ms /--iterations 20), because summed self-time grows while the floor stays
absolute; the percentage term tracks it, so identical code stays green at any iteration count while a
30%+ regression on a small workload still fails.New flags
--noise-floor <ms>and--noise-pct <n>widen (or tighten) the two terms;CpuDiffResult
JSON now carriesnoisePctand the effectivegateFloorMs. -
#219
c25e640- Keep the timing series for repeated named measures in capture order and expose it
throughquery span --format json|toon. The timing block uses
sampleUnit: "occurrence", since one iteration can produce several measures with the same name.
The profile bar keeps its actual lower-median occurrence; its slices are not averaged. -
#218
f230801- Expose run and driver-step timing samples throughquery span --format json|toon.
The exportedSpanTimingtype names each sample's clock and boundary and keeps
measured statistics separate from the profiled bar window. Run-group members carry
their own timing blocks. Missing samples remainnull.
Patch Changes
-
#209
ec6a66e- Bot-wall detection no longer forces a layout flush while it inspects a page. The collector reads
iframe viewport coverage through anIntersectionObserverand the near-empty-DOM signal through
textContent, instead ofgetBoundingClientRect/innerText, and the on-ramp inspection runs outside
thewpd:runwindow. On a page that keeps layout dirty this drops a few spurious layout/style counts
that the inspection previously added to the run span. Detection results are unchanged. -
#211
2b6eaef- AddWPD_INP_ENTRY_WAIT_MSto raise the bounded in-page drain that a step waits for a trusted
interaction's Event Timing entry. The default stays 250ms; a genuinely slow host, where the entry's
task slips later, can extend it (whole ms) so per-step INP still lands. No change to default behaviour
or output. -
#217
f541c48- A stalelatestnow explains itself instead of surfacing a rawENOENTon an internal path. When the
artifact the pointer names has been deleted, every consumer verb says which one is gone (recording,
CPU/allocation profile, or run-group manifest), shows its path the way the reports do, and names the
fix: record again, or pass an explicit path. A deleted run-group member names the member.