Bug Fixes:
--configflag now properly loads custom suppression configurations during analysis - the option was previously documented but not wired into the analysis pipeline (PR #71)- Hook mode now falls back to full file analysis when
git statusis unavailable (e.g., outside a git repository), instead of silently returning no results (PR #71)
Documentation:
- Updated README examples to reflect correct
.slopwatch/config.jsonschema, SW006 severity levels, and local tool installation instructions (PR #71)
New Features:
.razorfiles (Blazor) are now scanned by default - SW001-SW006 detection rules apply to Razor components without requiring explicit-fflags (PR #64)
Bug Fixes:
- Fixed
slopwatch initcommand to scan.propsand.targetsfiles, matching the patterns used byanalyze- prevents incomplete baselines when projects have SW005 violations in MSBuild property files (PR #53, fixes #52)
Improvements:
- JSON output now uses relaxed escaping for human-readable characters - apostrophes appear as
'instead of\u0027in baseline.json and JSON output (PR #54, fixes #50) - Centralized default file patterns into
DefaultPatternsclass to prevent drift between commands (PR #56)
Compatibility:
- SW006 now treats CPM package version overrides (
VersionandVersionOverride) as errors, preventing inline overrides when CPM is enabled (PR #48)
Bug Fixes:
- Fixed
slopwatch --versionand--helpreturning exit code 2 instead of 0, which was breaking CI/CD pipelines (PR #44, fixes #43) - SW003 no longer flags catch blocks that log exceptions - logging IS handling for fire-and-forget operations, background jobs, and graceful degradation scenarios (PR #45, fixes #42)
Dependency Updates:
- Bump actions/setup-dotnet from 5.0.1 to 5.1.0 (PR #39)
- Bump xunit.runner.visualstudio from 3.0.2 to 3.1.5 (PR #37)
Compatibility:
- Downgraded to .NET 8 for broader compatibility across environments (PR #34)
Bug Fixes:
- MultiEdit tool now properly analyzed in Claude Code hook mode (PR #32)
Documentation:
- Improved hook error messages for clarity when working with programming assistants (PR #35)
New Features:
- Added SW006 detection rule for Central Package Management (CPM) version override abuse (PR #25)
- Detects
VersionOverrideattribute onPackageReference(always flagged as it explicitly bypasses CPM) - Detects
Versionattribute onPackageReferencewhen CPM is enabled viaDirectory.Packages.propsorManagePackageVersionsCentrallysetting - Context-aware detection that only flags violations when CPM is actually in use
- Detects
- MSBuild
.propsand.targetsfiles now analyzed by default (PR #24)- Enables SW005 rule to detect warning suppression in
Directory.Build.props,Directory.Build.targets, and custom MSBuild files - Previously required explicit
-fflag to analyze these files
- Enables SW005 rule to detect warning suppression in
Performance Improvements:
- Hook mode now uses
git statusto analyze only dirty files - near-instant analysis (~340ms vs ~16s on large repos) (PR #20) - Parallel analysis with Akka.Streams for CI/CD mode - 2.4x speedup on large codebases (6.62s vs 15.89s on Akka.NET's 2225 files) (PR #22)
- New
--parallelflag to control parallelism (default = processor count, 0 = sequential) (PR #22) - Parallel analysis activates automatically when analyzing >50 files (PR #22)
Bug Fixes:
- Fixed bug where hook mode git status optimization wasn't triggering due to CommandLineParser initializing IEnumerable to empty instead of null (PR #21)
- Git worktrees now excluded from analysis by default to prevent duplicate scanning (PR #19)
- SW003 rule no longer flags legitimate
catch(Exception)blocks with actual handling code - only empty catches and logging-only catches are flagged (PR #18, fixes #17)
Compatibility:
- Added
RollForward=LatestMajorto allow running on newer .NET versions (PR #16)
New Features:
- Claude Code hook integration with
--hookflag for exit code 2 on detection (PR #13) --verboseflag to control baseline loading output visibility (PR #13)--statsflag for performance metrics and analysis statistics (PR #14)
Bug Fixes:
- Fixed default glob pattern handling for CommandLineParser empty IEnumerable issue (PR #13)
- Fixed path handling in SuppressionChecker to resolve relative paths correctly (PR #13)
Initial release of Slopwatch - LLM anti-cheat for .NET.
Features:
- Detection rules: SW001-SW005 for common LLM reward-hacking patterns
- Baseline mode to detect only NEW slop in existing codebases
slopwatch initcommand for easy project onboarding- JSON output format for CI/CD integration
- Configurable severity levels and rule customization
- Multi-level suppression system (attributes, comments, config)
Detection Rules:
- SW001: Disabled tests (Skip, Ignore, #if false)
- SW002: Warning suppression (pragma, SuppressMessage)
- SW003: Empty catch blocks
- SW004: Timeout jiggling (Task.Delay, Thread.Sleep in tests)
- SW005: Project file slop (NoWarn, TreatWarningsAsErrors)