Skip to content

ci: raise the PERF-01 budget 200 -> 400ms for the 79-pattern library - #198

Merged
hermanngeorge15 merged 2 commits into
mainfrom
fix/perf-gate-budget-79-patterns
Oct 21, 2026
Merged

hermanngeorge15 merged 2 commits into
mainfrom
fix/perf-gate-budget-79-patterns

Conversation

@hermanngeorge15

Copy link
Copy Markdown
Contributor

Closes the CI half of #188.

The problem

main has been red since 2026-10-10, and every open PR inherits it. All of them fail on one step — Performance gate — 500 files under 200ms — and none of them causes it.

The gate is nondeterministic, not wrong:

Why it rotted

The 200ms budget was set in 20c88d1 on 2026-08-21, against a 48-pattern library. v0.2.0 ships 79 — 65% more per-file matching work — and the budget was never re-derived.

It stayed invisible because the job was being cancelled at 30 minutes before it ever reached this step. Raising that ceiling to 60 (#188) is what exposed a gate that had already been failing.

Why 400ms

The gate still has to catch the regression it was built for: pattern compilation moving back inside the per-file loop. That cost 806ms at 48 patterns and would be roughly 1.3s at 79 — several times over this budget. 400ms clears the observed 213ms hosted-runner result with ~1.9x headroom while staying well under the regression it guards.

The rationale is written into the step so the next person can re-derive it. tests/perf_regression_test.rs already makes the companion argument for why the ratio guard lives in the test suite and the absolute budget lives here.

Follow-up

Converting this step to a self-calibrating ratio, as perf_regression_test.rs does, is the more durable fix. This PR is the unblock; that is worth its own issue.

Once this merges, #194 and #196 can be re-run and merged, and #191 / #192 / #197 stop being judged by a gate none of them broke.

🤖 Generated with Claude Code

hermanngeorge15 and others added 2 commits October 21, 2026 09:12
…188)

The 200ms budget was set in 20c88d1 (2026-08-21) against 48 patterns. v0.2.0
ships 79 — 65% more per-file matching work — and the budget was never
revisited. The job was being cancelled at 30 minutes before it ever reached
this step, so the stale budget stayed invisible until the 30 -> 60 ceiling
change exposed it.

The gate was nondeterministic, not wrong. Four Dependabot PRs opened
2026-10-16 that change no Rust at all split two-pass/two-fail on this step
(#193 #195 pass, #194 #196 fail), and main itself has been red since
2026-10-10. Measured 213ms on a hosted runner and 172ms best-of-5 locally,
with runs spanning 172-375ms.

400ms keeps the gate load-bearing: the regression it defends against is
pattern compilation moving back inside the per-file loop, which cost 806ms at
48 patterns and would be roughly 1.3s at 79.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The step was still called "500 files under 200ms" while checking against
400ms, which is the same documentation drift this gate already suffered from.
The required status check is the job name, not the step name, so renaming is
safe.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@hermanngeorge15
hermanngeorge15 force-pushed the fix/perf-gate-budget-79-patterns branch from 281de1b to a498a11 Compare October 21, 2026 07:13
@hermanngeorge15
hermanngeorge15 merged commit 5668af4 into main Oct 21, 2026
1 check passed
@hermanngeorge15
hermanngeorge15 deleted the fix/perf-gate-budget-79-patterns branch October 21, 2026 07:36
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