Repository navigation
fix(ci): Restore before Stryker and fail when it drops a project - #306
Merged
Merged
Conversation
On a runner with nothing restored, Stryker's analysis restores several projects in parallel; when one restore fails, it leaves that project unmutated with only a warning. Anichron.Worker was dropped this way in mutation divergence run #6 (961 vs 1595 mutants) and in the master mutation gate at e014c80, which passed at 100% with 846 mutants. Both workflows now run Stryker through scripts/stryker-sweep.sh, which restores the solution first and fails on "Analysis of project ... failed". mutation-guard.sh refuses a workflow that calls dotnet stryker directly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
Author
|
Divergence run #7 on this branch: both sweeps found |
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.
Summary
When nothing is restored yet, Stryker's analysis runs several NuGet restores in parallel. If one of them fails, Stryker leaves that project unmutated, logs only a warning, and still scores the rest. Both workflows now run Stryker through a script that restores first and fails the run when Stryker logs that warning.
mutation-guard.shnow refuses any workflow that callsdotnet strykerdirectly. The new script is described indocs/mutation-testing.mdand listed among the guard rules inCLAUDE.md.Evidence
Analysis of project Anichron.Worker/Anichron.Worker.csproj failed for frameworks net10.0.in the CI-concurrency sweep. That sweep tested 961 mutants and the single-threaded sweep tested 1595, socomparefailed. The master gate ate014c80(run) lost Worker the same way and passed at 100% with 846 mutants, where the runs around it tested about 1,400.After:
scripts/stryker-sweep.test.sh(stubbeddotnet):mutation-guard.test.shcase checks that a workflow runningdotnet strykerdirectly fails the guard.scripts/mutation-guard.shpasses on this branch.Found project …/Anichron.Worker.csproj to mutatein both sweeps and the same number of mutants tested in each. It may still failcompareby one: chore(test): Single-threaded Stryker sweep reported a covered BurstRepository mutant as survived #305 is a separate case where the single-threaded sweep missed a kill.Merge Danger
Door: two-way
Revert the commit and the workflows call
dotnet strykerdirectly again.Blast Radius: CI-only
The Mutation job gains a restore step of a few seconds. A run where Stryker drops a project now fails the gate instead of passing on a partial score, so a red Mutation job may come from this check rather than from a surviving mutant. The
::error::annotation names the project.🤖 Generated with Claude Code