Skip to content

ci: enable stryker break threshold - #297

Merged
samtrion merged 1 commit into
mainfrom
ci/stryker-break-threshold
Nov 4, 2026
Merged

samtrion merged 1 commit into
mainfrom
ci/stryker-break-threshold

Conversation

@samtrion

Copy link
Copy Markdown
Collaborator

Problem

stryker-config.json has "thresholds": { "high": 80, "low": 60, "break": 0 }. The scheduled mutation run (run 40488130044) logged The final mutation score is 31.98 %, far below low 60, and still concluded success, despite 504 survivors and 8348 NoCoverage mutants. A mutation score regression can never be noticed from the workflow status.

Root cause

break = 0 disables the gate. (high and low only colour the report; only break makes Stryker exit non-zero.) The current low score is, at least partly, a separate problem (duplicate Roslyn variants and test projects that "did not report any test", 8 log lines); the share of each is inferred from the logs, not measured.

Change

break: 0 -> break: 25. low stays 60, so break <= low holds (Stryker rejects break > low with an InputException; any higher break would require raising low/high in the same change).

Provisional, blocked on the variant fix. The baseline will change once the duplicate-Roslyn-variant fix lands, so this PR is a draft. Before merging: re-measure with a dispatch run on the new baseline, then set break about 5 points below that observed score (and raise low/high if needed). 25 is only "a few points below today's measured 32 %".

Before / After

metric before after
thresholds.break 0 25 (provisional)
score 31.98 % (run 40488130044) 32.02 % on probe run 40805541569 (same code, only thresholds differ); score is stable across runs
conclusion at ~32 % with break=0 success not measured with break=25 (see probe)
gate propagation unproven confirmed: throwaway branch ci/stryker-break-gate-probe with high=low=break=100, run https://github.com/dailydevops/frameshift/actions/runs/40805541569 logged Final mutation score is below threshold break. Crashing... and the job concluded failure

A dispatch run on this PR branch was not done: it would take about 2.5 h and, with a score of ~32 % vs break 25, would just be green; the gate itself was proven with the probe run. Mutants created / compile errors / NoCoverage are unchanged (18800 / - / 8348 in the probe run).

Risk / what this does not change

  • Does not change the mutation score, mutants or test runtime.
  • Once merged, any run with a score below 25 % fails the workflow (flaky coverage or timeouts could dip the score by a few points; 7 points margin).
  • Should not be merged before the variant fix; the value then needs to be re-derived.

thresholds.break was 0, which disables the gate: a mutation run with a
31.98 % score (below low=60) still concluded successfully.

Set break to 25 so a drop below the currently measured score (31.98 % and
32.02 % on two identical runs) fails the scheduled mutation workflow. low
stays at 60, so break <= low as required by Stryker input validation.

This value is provisional and must be raised after the duplicate Roslyn
variant mutation fix lands and a new baseline has been measured.
@codecov

codecov Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.69%. Comparing base (98b8eb0) to head (6cda4b0).
⚠️ Report is 8 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #297      +/-   ##
==========================================
+ Coverage   95.66%   95.69%   +0.02%     
==========================================
  Files         111      111              
  Lines        7031     7031              
  Branches     1427     1427              
==========================================
+ Hits         6726     6728       +2     
+ Misses        140      138       -2     
  Partials      165      165              

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@samtrion
samtrion marked this pull request as ready for review November 4, 2026 00:29
@samtrion
samtrion merged commit f6db3c0 into main Nov 4, 2026
11 checks passed
@samtrion
samtrion deleted the ci/stryker-break-threshold branch November 4, 2026 01:04
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