Repository navigation
ci: raise the PERF-01 budget 200 -> 400ms for the 79-pattern library - #198
Merged
Merged
Conversation
…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
force-pushed
the
fix/perf-gate-budget-79-patterns
branch
from
October 21, 2026 07:13
281de1b to
a498a11
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the CI half of #188.
The problem
mainhas 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:
mainitself failed it in run38055677954.Why it rotted
The 200ms budget was set in
20c88d1on 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.rsalready 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.rsdoes, 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