Complexity Control
Detects over-engineering: single-use interfaces, abstract classes without abstract members, and unnecessary indirection added in the diff.
Why this rule exists
Speculative abstraction is a tax on every future reader. An IFoo with one implementation and no test double doubles the navigation cost without adding flexibility.
Code example
+ public interface IFoo { void Bar(); }
+ public class Foo : IFoo { public void Bar() { ... } }
+ // IFoo has exactly one implementation and no tests use it+ public class Foo { public void Bar() { ... } }
+ // Extract IFoo when the second implementation or test double appears.Configuration
Disable or adjust the severity of this rule in .gauntletci.json:
{
"rules": {
"GCI0045": { "enabled": true, "severity": "Info" }
}
}See Configuration for the full schema.
Related rules
Dependency Injection Safety
Detects DI anti-patterns: service locator usage, direct instantiation of injectable types, and captive dependency violations.
Pattern Consistency Deviation
Detects mixed sync/async naming conventions and service locator anti-patterns introduced inconsistently within the same file.
Implemented in src/GauntletCI.Core/Rules/Implementations/GCI0045_*.cs.
Eric Cogen -- Founder, GauntletCI
Twenty years in .NET production. Most of those years, the bugs that hurt me were not the ones tests caught. They were the assumptions I did not know I was making: a removed guard clause, a renamed method that still did the old thing, a catch {} that turned a page into a silent dashboard lie. GauntletCI is the checklist I wish I had run before every commit. It runs the rules I learned the hard way, so you do not have to.
