You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .nuke/build.schema.json
+4Lines changed: 4 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -110,6 +110,10 @@
110
110
"type": "number",
111
111
"description": "Minimum acceptable line coverage percentage for the Coverage gate",
112
112
"format": "double"
113
+
},
114
+
"Since": {
115
+
"type": "string",
116
+
"description": "Git baseline that scopes mutation testing to your local changes. Defaults to 'HEAD' — only the code you have changed since your last commit. The Mutate target diffs against this with the git CLI and mutates just those files; running mutation across the whole codebase is intentionally not supported — it is far too slow"
Copy file name to clipboardExpand all lines: CLAUDE.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,7 +16,7 @@
16
16
Full gate:
17
17
1.**Full suite green.** Run the complete `.\build.ps1 --target Test` (not just the fixtures you touched) and paste the pass/fail totals. A single failure blocks everything.
18
18
2.**Coverage ≥95% and not dropped.** Run `.\build.ps1 --target Coverage`, quote the exact merged line-coverage number. If it dropped versus the baseline — even while still ≥95% — that is a regression: add tests until it recovers, or state precisely why (e.g. pre-existing untested code in an unrelated assembly) with the measured baseline to prove it.
19
-
3.**Mutation testing run and surviving mutants addressed.** Run `.\build.ps1 --target Mutate`. Stop the running Desktop app first (`Get-Process Collectary.UI.Desktop | Stop-Process -Force`) — a live instance locks `Collectary.UI.dll` and fails Stryker's build. Quote the mutation score and review survivors in the code you changed; kill them with tests or justify each explicitly.
19
+
3. **Mutation testing — scoped to your local changes only, surviving mutants addressed. Running full Stryker is forbidden.** Stryker over the whole codebase takes far too long; never do it. Always run it scoped to your diff: `.\build.ps1 --target Mutate` `git diff`s against `HEAD` and mutates only those files, so it covers just the code you have changed since your last commit (your uncommitted working-tree changes). Run it **before you commit** — once your work is committed there is nothing left in the diff to mutate. Override the baseline only when you need a wider sweep (`.\build.ps1 --target Mutate --since <branch-or-commit>`). (`--since` is the git diff base, not Stryker's own `--since`, which LibGit2Sharp can't use in this relative-path worktree.) Stop the running Desktop app first (`Get-Process Collectary.UI.Desktop | Stop-Process -Force`) — a live instance locks `Collectary.UI.dll` and fails Stryker's build. Quote the mutation score and review survivors in the code you changed; kill them with tests or justify each explicitly.
20
20
4.**Manual UI verification (for UI changes).** Ask the user to run the app with exact repro steps (see "Verifying UI Fixes"). Tests do not replace this; they are in addition to it.
21
21
22
22
If any gate cannot be completed (e.g. a pre-existing failure you did not introduce), STOP and surface it to the user with the evidence — do not quietly proceed as if it passed.
@@ -39,7 +39,7 @@ A feature or fix is complete **only** when every box below is genuinely ticked,
39
39
-[ ]**All three layers present** (rule #4) — unit + integration + headless, or an explicit note on why a layer doesn't apply.
40
40
-[ ]**Tests run, scaled to the change** (rule #5) — small localized change: relevant fixtures green, totals quoted, classification stated. Big/multi-project change: full suite green (`.\build.ps1 --target Test`), totals quoted.
41
41
-[ ]**Coverage ≥95% and not dropped** (rule #5.2) — *big changes only*; exact number quoted; regressions explained with a measured baseline.
-[ ]**Mutation run scoped to local changes, survivors handled** (rule #5.3) — *big changes only*; run `.\build.ps1 --target Mutate` (diff vs `HEAD`, your uncommitted changes) **before** committing — never full Stryker; Desktop app stopped first; score quoted; new survivors killed or justified.
43
43
-[ ]**Manual UI verification requested** (rule #5.4) — for any UI change, exact repro steps handed to the user.
44
44
-[ ]**Docs updated** (rule #13).
45
45
-[ ]**Localization complete** (rule #2) — every new key in both `Strings.en.resx` and `Strings.de.resx`.
Copy file name to clipboardExpand all lines: build/Build.cs
+54-1Lines changed: 54 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1,13 +1,16 @@
1
1
usingSystem;
2
+
usingSystem.Collections.Generic;
2
3
usingSystem.Globalization;
3
4
usingSystem.Linq;
4
5
usingSystem.Xml.Linq;
5
6
usingNuke.Common;
6
7
usingNuke.Common.IO;
7
8
usingNuke.Common.Tooling;
8
9
usingNuke.Common.Tools.DotNet;
10
+
usingNuke.Common.Tools.Git;
9
11
usingSerilog;
10
12
usingstaticNuke.Common.Tools.DotNet.DotNetTasks;
13
+
usingstaticNuke.Common.Tools.Git.GitTasks;
11
14
12
15
classBuild:NukeBuild
13
16
{
@@ -19,6 +22,9 @@ class Build : NukeBuild
19
22
[Parameter("Minimum acceptable line coverage percentage for the Coverage gate")]
20
23
readonlydoubleCoverageThreshold=95;
21
24
25
+
[Parameter("Git baseline that scopes mutation testing to your local changes. Defaults to 'HEAD' — only the code you have changed since your last commit. The Mutate target diffs against this with the git CLI and mutates just those files; running mutation across the whole codebase is intentionally not supported — it is far too slow.")]
0 commit comments