You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sub-millisecond benches (e.g. `test_summary_cache_lookup`, `test_composer_map_cache_lookup`) can be high-variance on shared runners. If the gate becomes flaky, raise `--slack`for those entries or add targeted exclusions in `EXCLUDED_FROM_GATE`.
42
+
Sub-millisecond cache lookups (`test_summary_cache_lookup`, `test_composer_map_cache_lookup`, `test_tab_summary_cache_lookup`) and small ZIP export (`test_post_export_zip[composers-10]`) are already listed in `EXCLUDED_FROM_GATE` because shared runners show 2–4x spread. For remaining gated benches that turn flaky, raise `--slack`at baseline refresh time or add a targeted `EXCLUDED_FROM_GATE` entry.
43
43
44
44
`test_summary_cache_round_trip` is intentionally excluded from the gate: it calls `set_cached_projects` (file write) + `get_cached_projects` (file read) each round, so OS page-cache state on shared runners causes 3–5x variation between consecutive CI runs. The baseline entry is kept for observation only.
45
45
46
+
`test_post_export_zip[composers-10]` is excluded for the same reason on the small corpus: observed ~4x spread on ubuntu-latest (e.g. 0.008s vs 0.031s on consecutive runs of the same branch). That is environmental variance (cold ZIP / page-cache), not an application slowdown — refreshing `baselines.json` cannot bracket both tails within the 0.5x–1.2x gate. The baseline entry is kept for observation only. `composers-50` remains gated (~1.2x spread).
47
+
48
+
### Out-of-scope CI fixes in feature PRs
49
+
50
+
Sometimes a feature PR fails **Performance benchmarks (gated)** even though the PR does not touch export, parse, or search hot paths. When the failure is pre-existing runner variance (as with `composers-10` above), the correct fix is a targeted `EXCLUDED_FROM_GATE` entry — **not** a `baselines.json` refresh bundled into the feature PR.
51
+
52
+
-**In scope for the feature PR:** unblocking CI so `mypy` + unit tests + the benchmark job all pass.
53
+
-**Out of scope for the feature PR:** claiming a performance win/loss, changing export behavior, or refreshing baselines for unrelated benches.
54
+
-**Reviewers:** treat `EXCLUDED_FROM_GATE` / `benchmarks/README.md` edits in a feature PR as CI maintenance when the comment block documents environmental spread, not application regression.
55
+
46
56
## Refresh baselines
47
57
48
58
After intentional performance work, capture on **ubuntu-latest** (same OS as the gated CI job). Download `benchmark-results.json` from a CI artifact when possible:
0 commit comments