Skip to content

Commit 21f5d82

Browse files
committed
docs(bench): replace stale sub-30ms criterion with accurate sub-200ms jitter framing
1 parent bd12eb0 commit 21f5d82

1 file changed

Lines changed: 13 additions & 12 deletions

File tree

tests/benchmarks/regression-guard.test.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,26 +44,27 @@ const REGRESSION_THRESHOLD = BENCH_CANARY ? 0.5 : 0.25;
4444
/**
4545
* Wider regression threshold applied to metrics in NOISY_METRICS.
4646
*
47-
* Sub-30ms timing metrics (no-op rebuild, 1-file rebuild, fnDeps depth 1)
48-
* routinely jitter ±10ms from CI runner load, GC pauses, and OS scheduling,
49-
* which translates to ±50%+ on small absolute numbers. The MIN_ABSOLUTE_DELTA
50-
* floor (10ms) filters trivial noise but cannot distinguish a 10–14ms
51-
* "real" jitter event from a regression on these specific metrics.
47+
* Short-latency timing metrics (no-op rebuild, 1-file rebuild, fnDeps depth 1)
48+
* that routinely jitter ±10–50ms from CI runner load, GC pauses, and OS
49+
* scheduling — translating to ±25–155%+ on sub-100ms baselines. The
50+
* MIN_ABSOLUTE_DELTA floor (10ms) filters trivial noise but cannot distinguish
51+
* a 10–14ms "real" jitter event from a regression on these specific metrics.
5252
*
53-
* Keeping the global threshold at 25% means a regression in the 30–100ms
54-
* range is still caught (e.g. 50ms→63ms = +26%, flagged), while sub-30ms
55-
* metrics in this set get the wider 50% allowance.
53+
* Keeping the global threshold at 25% means a regression in the 100–500ms
54+
* range is still caught (e.g. 200ms→253ms = +26%, flagged), while the
55+
* high-jitter metrics in this set get the wider 50% allowance.
5656
*
5757
* In BENCH_CANARY mode this is overridden to 1.0 (100%) — the canary's
58-
* purpose is to catch gross regressions (+50%+), not sub-30ms jitter.
58+
* purpose is to catch gross regressions (+50%+), not short-latency jitter.
5959
*/
6060
const NOISY_METRIC_THRESHOLD = BENCH_CANARY ? 1.0 : 0.5;
6161

6262
/**
6363
* Metric labels treated as high-variance and given the NOISY_METRIC_THRESHOLD
6464
* tolerance instead of the default REGRESSION_THRESHOLD. Add a metric here
65-
* only when its baseline is consistently sub-30ms and CI variance has been
66-
* empirically shown to exceed 25%.
65+
* only when CI variance has been empirically shown to exceed 25% due to runner
66+
* jitter (±10–50ms absolute) that dominates the percentage on short-ish
67+
* sub-200ms baselines — document the evidence in the entry below.
6768
*
6869
* - `No-op rebuild`: native baselines across releases span 15–30ms
6970
* (3.11.0: 15ms, 3.11.2: 19–25ms, 3.12.0: 23–30ms depending on suite).
@@ -104,7 +105,7 @@ const NOISY_METRIC_THRESHOLD = BENCH_CANARY ? 1.0 : 0.5;
104105
* CI consistently measures +40–60% on this sub-30ms metric while the
105106
* absolute delta (~13ms) is at the noise floor for shared runners.
106107
* Methodology already discards 3 warmup runs (#1077). Same pattern as
107-
* No-op rebuild and 1-file rebuild — sub-30ms baseline amplified by
108+
* No-op rebuild and 1-file rebuild — short-latency baseline amplified by
108109
* ±10ms runner jitter into a percentage swing that looks like regression.
109110
*/
110111
const NOISY_METRICS = new Set<string>(['No-op rebuild', '1-file rebuild', 'fnDeps depth 1']);

0 commit comments

Comments
 (0)