From 8ef3b34c9481cddeb1a2b32b50ea7034536b248c Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Tue, 22 Sep 2026 15:50:34 +0200 Subject: [PATCH] Adopt Stryker.NET as a repo-local tool, for the mutation-testing spike Pinned in dotnet-tools.json (dotnet-stryker 5.0.0) so any checkout reproduces it with `dotnet tool restore`. Reports land in StrykerOutput/, now ignored. Spike against FireControl.cs alone: 276 mutants in 7m18s, 208 killed, 67 survived, 4 uncovered, score 74.6%. It killed every mutation the hand-written anchor harnesses defended, compiles all mutants into one assembly and switches between them at runtime -- so it never edits a source file, has nothing to re-anchor after a refactor, and cannot leak a mutant into the tree. Among the survivors: Splash's handedness is untested (flipping the sign of `right` passes every test -- the operator's "damage on the wrong side of the ship"), deleting the discrete shield's TakeHit survives, and most of the rest trace to degenerate fixture values -- shooter at the origin, fire time zero, spread zero -- which make whole families of mutants arithmetically identical. Co-Authored-By: Claude Opus 5 --- .gitignore | 3 +++ dotnet-tools.json | 13 +++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 dotnet-tools.json diff --git a/.gitignore b/.gitignore index 75b9cad4f..2cbd223f9 100644 --- a/.gitignore +++ b/.gitignore @@ -109,3 +109,6 @@ tests/_scratch_* .nuget-sandbox/ .dotnet-sandbox/ .appdata-sandbox/ + +# Stryker.NET mutation reports (regenerated per run) +StrykerOutput/ diff --git a/dotnet-tools.json b/dotnet-tools.json new file mode 100644 index 000000000..bd8661400 --- /dev/null +++ b/dotnet-tools.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-stryker": { + "version": "5.0.0", + "commands": [ + "dotnet-stryker" + ], + "rollForward": false + } + } +} \ No newline at end of file