|
| 1 | +# Performance variance baseline — 2026-09-16 (warning-first, no gate) |
| 2 | + |
| 3 | +Maintenance plan §11: before any perf budget can block, establish the same- |
| 4 | +host repeat variance of the existing `npm run benchmark:perf -- --costmetrics` |
| 5 | +tool. This record is that baseline. **Warning-only: nothing in CI blocks on |
| 6 | +these numbers, and no threshold below may be turned into a blocking gate |
| 7 | +without its own owner-approved change.** |
| 8 | + |
| 9 | +- Tree: `origin/dev` `ef0b880e445ff6d9d591cb5d73173f77e9d82c4d` |
| 10 | +- Environment: linux x64, AMD Ryzen 9 5950X (32 threads), Node v24.18.0, |
| 11 | + npm 11.16.0, otherwise-idle host, 5 consecutive passes of the unmodified |
| 12 | + tool (its own protocol: analyzer warm-in-process 1 warmup + 7 measured |
| 13 | + passes; CLI cold start 3 fresh processes per run). Generated |
| 14 | + `perf-latest.{md,json}` files were snapshotted per pass and restored — |
| 15 | + no generated drift is part of this PR. |
| 16 | +- Raw per-pass JSON stays local (5 snapshots); this document records the |
| 17 | + aggregate only, per the no-long-logs rule. |
| 18 | + |
| 19 | +## Observed baseline and repeat variance (n=5 passes) |
| 20 | + |
| 21 | +| Metric | Mean | Min–max | SD | Spread (max−min)/mean | |
| 22 | +|---|---:|---:|---:|---:| |
| 23 | +| CLI cold start, mean ms (3 procs/pass) | 73.6 | 71.4–79.9 | 3.6 | 11.6% | |
| 24 | +| CLI cold start, p95 ms | 77.3 | 72.8–92.6 | 8.6 | 25.7% | |
| 25 | +| npm tarball bytes | 1,521,793 | identical ×5 | 0 | 0% | |
| 26 | +| RSS delta bytes (report process) | 14.2 MB | 13.5–14.9 MB | 0.6 MB | 10.0% | |
| 27 | + |
| 28 | +Analyzer per-fixture p50 (warm, ms): |
| 29 | + |
| 30 | +| Fixture | Mean | Min–max | Spread | |
| 31 | +|---|---:|---:|---:| |
| 32 | +| perf-en-short | 0.198 | 0.193–0.207 | 7.1% | |
| 33 | +| perf-ko-short | 0.202 | 0.196–0.206 | 4.9% | |
| 34 | +| perf-en-medium | 0.358 | 0.345–0.367 | 6.2% | |
| 35 | +| perf-mixed-long | 0.352 | 0.321–0.451 | 36.9% | |
| 36 | +| perf-synth-lexicon | 0.666 | 0.655–0.678 | 3.5% | |
| 37 | +| perf-ko-medium | 0.757 | 0.734–0.817 | 11.0% | |
| 38 | +| perf-synth-mattr | 2.030 | 1.932–2.157 | 11.1% | |
| 39 | + |
| 40 | +## Warning thresholds derived from the variance (advisory only) |
| 41 | + |
| 42 | +A future same-host measurement is *worth a look* (not a failure) when it |
| 43 | +falls outside roughly 3× the observed same-host noise: |
| 44 | + |
| 45 | +- **Tarball bytes:** deterministic (0% spread) — any change is real; flag |
| 46 | + growth > 5% versus the recorded release baseline for comment in the PR |
| 47 | + that caused it. |
| 48 | +- **CLI cold start (mean of ≥3 fresh processes):** flag beyond ±35% of |
| 49 | + 73.6 ms (≈ outside 48–99 ms). Sub-±35% moves are inside plausible noise |
| 50 | + for a single run on this host. |
| 51 | +- **Analyzer per-fixture p50:** flag beyond ±50% of the fixture's baseline |
| 52 | + mean. `perf-mixed-long` alone showed 37% pure repeat noise, so smaller |
| 53 | + per-fixture moves must not be read as regressions from one run. |
| 54 | +- **p95-style figures:** the cold-start p95 varied 26% across identical |
| 55 | + passes at n=3 processes; per §11, do not quote single-run p95 values as |
| 56 | + precise, and never gate on them at this sample size. |
| 57 | + |
| 58 | +## Contract notes (§11 honored) |
| 59 | + |
| 60 | +- Shared CI runners are noisier than this host; these numbers are a |
| 61 | + same-host baseline, not a CI gate. A CI-side budget would need its own |
| 62 | + runner-population baseline first. |
| 63 | +- Model/backends latency is out of scope here (local deterministic analysis |
| 64 | + and process startup only); rewrite-path call/token budgets stay a separate |
| 65 | + §11 line with their own unknown/null reporting rules. |
| 66 | +- Baseline refresh: rerun the same 5-pass procedure, record SHA + environment |
| 67 | + + reason next to the new numbers; do not overwrite this record. |
0 commit comments