What happened
The pre-publish benchmark gate failed PR #2586 (job log) with three native-engine regressions:
build benchmarks > native — No-op rebuild: 30 → 103 (+243%, threshold 50%)
incremental benchmarks > native — No-op rebuild: 32 → 103 (+222%, threshold 50%)
query benchmarks > native — diffImpact latency: 10.1 → 26.5 (+162%, threshold 25%)
PR #2586 adds one match/map arm for enum_declaration to the JS export-kind tables in both engines. A no-op rebuild parses zero files, so that code is never reached — the diff cannot produce this.
Evidence it was runner noise, not a regression
Comparing the uploaded benchmark-results-json artifacts across the four most recent PR runs (all at 847 files, all within a few commits of each other):
| run |
native noop |
native 1-file |
native full build |
wasm noop |
native diffImpact |
| #2582 (32212933277) |
23ms |
217 |
5223 |
23 |
12.4 |
| #2584 (32215138390) |
32ms |
267 |
6709 |
30 |
16.5 |
| #2585 (32220394153) |
32ms |
264 |
6592 |
29 |
16.9 |
| #2586 (32225365117) |
103ms |
273 |
6332 |
32 |
26.5 |
Everything else in the failing run matched baseline closely — native full build 6332 vs 6345 at 3.17.0, wasm full build 19154 vs 19082, wasm noop 32 vs 31 — so the runner was not uniformly slow, and the per-phase breakdown for the 1-file rebuild shows no new or inflated phase. Historical native noopRebuildMs has never exceeded 32ms across all 36 recorded releases (15 → 32, tracking file-count growth).
The same CI run also had build / Build x86_64-unknown-linux-musl hang for 6 hours inside apt-get update (#2589), which suggests the Azure host pool was degraded during that window.
Re-running the failed jobs was the resolution; no code change was needed.
The interesting part
No-op rebuild already gets the strongest noise treatment in the suite — NOISY_METRICS (50% threshold), 2 warmup runs, and timeMedian(..., RUNS=5). For a median of 5 to land at 103ms, at least 3 of the 5 samples had to be ≥103ms. This was a sustained ~3x slowdown across most of the sampling window, not a single GC blip, so more samples would not obviously have rescued it.
Note also that native diffImpact latency has been running 16.5–16.9ms against a 10.1ms baseline (+63–67%, well past its 25% threshold) on recent passing runs — those only pass because the ~10ms MIN_ABSOLUTE_DELTA floor filters a 6.8ms delta. At 26.5ms the delta cleared the floor and the metric flagged. The baseline may simply be stale relative to where this metric now sits, making it a thin-margin tripwire.
Suggested work
- Decide whether
No-op rebuild's remaining exposure is worth further hardening (e.g. trimmed mean, discard-max, or a re-measure-once-on-failure retry) or whether an occasional infra-driven red PR is acceptable given a re-run fixes it.
- Separately, look at whether the native
diffImpact latency baseline should be refreshed — it currently sits ~65% under where the metric actually runs, so the check is riding entirely on the absolute-delta floor.
What happened
The pre-publish benchmark gate failed PR #2586 (job log) with three native-engine regressions:
PR #2586 adds one match/map arm for
enum_declarationto the JS export-kind tables in both engines. A no-op rebuild parses zero files, so that code is never reached — the diff cannot produce this.Evidence it was runner noise, not a regression
Comparing the uploaded
benchmark-results-jsonartifacts across the four most recent PR runs (all at 847 files, all within a few commits of each other):Everything else in the failing run matched baseline closely — native full build 6332 vs 6345 at 3.17.0, wasm full build 19154 vs 19082, wasm noop 32 vs 31 — so the runner was not uniformly slow, and the per-phase breakdown for the 1-file rebuild shows no new or inflated phase. Historical native
noopRebuildMshas never exceeded 32ms across all 36 recorded releases (15 → 32, tracking file-count growth).The same CI run also had
build / Build x86_64-unknown-linux-muslhang for 6 hours insideapt-get update(#2589), which suggests the Azure host pool was degraded during that window.Re-running the failed jobs was the resolution; no code change was needed.
The interesting part
No-op rebuildalready gets the strongest noise treatment in the suite —NOISY_METRICS(50% threshold), 2 warmup runs, andtimeMedian(..., RUNS=5). For a median of 5 to land at 103ms, at least 3 of the 5 samples had to be ≥103ms. This was a sustained ~3x slowdown across most of the sampling window, not a single GC blip, so more samples would not obviously have rescued it.Note also that native
diffImpact latencyhas been running 16.5–16.9ms against a 10.1ms baseline (+63–67%, well past its 25% threshold) on recent passing runs — those only pass because the ~10msMIN_ABSOLUTE_DELTAfloor filters a 6.8ms delta. At 26.5ms the delta cleared the floor and the metric flagged. The baseline may simply be stale relative to where this metric now sits, making it a thin-margin tripwire.Suggested work
No-op rebuild's remaining exposure is worth further hardening (e.g. trimmed mean, discard-max, or a re-measure-once-on-failure retry) or whether an occasional infra-driven red PR is acceptable given a re-run fixes it.diffImpact latencybaseline should be refreshed — it currently sits ~65% under where the metric actually runs, so the check is riding entirely on the absolute-delta floor.