Skip to content

§12: latency-regression gate over the BenchmarkDotNet hot paths - #64

Merged
ivanball merged 1 commit into
mainfrom
feat/s12-perf-regression-gate
Jul 16, 2026
Merged

§12: latency-regression gate over the BenchmarkDotNet hot paths#64
ivanball merged 1 commit into
mainfrom
feat/s12-perf-regression-gate

Conversation

@ivanball

Copy link
Copy Markdown
Owner

Summary

Ships the reopened #12 maturity lever (the 2026-07-15 re-score downgraded §12 M4 to 3 because performance-smoke was runs-clean only):

  • The CI job now runs the hot-path suite with --job Short --exporters json (real measurements, still under a minute) instead of --job Dry.
  • A new build/perfgate verifier (dependency-free console, same isolation pattern as build/facts) fails the job against the committed Tests/Performance/perf-baseline.json:
    • Per-benchmark allocation ceilings (deterministic across machines): 0 B/op for the cached IsSatisfiedBy path, 8000 for the recompile anti-pattern, 4500 for criteria composition.
    • A machine-independent ratio floor: the compiled-expression cache must stay at least 1000x faster than recompile-each-call (measured ~120,000x locally); if the cache breaks, the ratio collapses and the gate reds.
    • Rule-named benchmarks missing from the results fail the gate (no vacuous pass).
  • Moving the numbers deliberately means updating the baseline in the same PR.

Verification

  • Local Short run captured real numbers (0.37 ns / 44,486 ns / 858 ns; 0 / 5588 / 3040 B/op).
  • perfgate green against those results; red on a seeded ceiling violation (exact benchmark + numbers in the message); reverted.
  • The job rename does not touch any required-check name (verified against branch protection).

Backlog #12 updated: lever DONE, maturity 3->4 candidacy recorded for the next re-score.

🤖 Generated with Claude Code

The performance-smoke CI job now measures (--job Short, JSON export)
instead of only running clean (--job Dry), and a new dependency-free
build/perfgate verifier fails the job against the committed
Tests/Performance/perf-baseline.json: deterministic allocation ceilings
per benchmark plus a machine-independent ratio floor (compiled-expression
cache >= 1000x the recompile anti-pattern; measured ~120,000x). Missing
benchmarks fail the gate rather than passing vacuously. Verified green on
real results and red on a seeded ceiling violation. Reopened backlog #12
lever shipped; maturity candidacy recorded for the next re-score.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ivanball
ivanball merged commit 7577c2f into main Jul 16, 2026
9 checks passed
@ivanball
ivanball deleted the feat/s12-perf-regression-gate branch July 16, 2026 19:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant