config-drift-checker · komo-stack · mutation test

Catches 6 of 15 sabotages

9 stayed green under a case that claims them. 2 did not run (budget).

Each mutant is one small sabotage of a temp copy of the setup: a deleted or inverted rule, a blurred skill trigger, a removed skill or a disabled hook. A good suite goes red on every one.

score
0.40 caught / (caught + missed + nothing tests it)
mutants
17 every one generated
reference
one run of the original $0.78
spend
$3.08 of $3 budget, 1 run per case
caught when
a case drops more than 0.15 below the reference
generated
2026-10-24 08:27 UTC

Tested but not caught

A case claims them, but it stayed green with the sabotage in place. Tighten its graders.

Every mutant

resultoperatormutantcaught bycost
misseddelete-rule deleted rule 'Explicit constructor injection only. Declare dependencies a…' from skills/spring-boot-conventions/SKILL.md
delete-rule:skill/spring-boot-conventions/explicit-constructor-injection-only-declare-dependencies
spring-controller-follows-conventions 1.00 to 1.00$0.11
misseddelete-rule deleted rule 'Never use field injection (@Autowired on a field) and never…' from skills/spring-boot-conventions/SKILL.md
delete-rule:skill/spring-boot-conventions/never-use-field-injection-autowired
spring-controller-follows-conventions 1.00 to 1.00$0.11
missedinvert-rule heuristic inverted rule 'Never use field injection (@Autowired on a field) and never…' in skills/spring-boot-conventions/SKILL.md ('Never' became 'Always')
invert-rule:skill/spring-boot-conventions/never-use-field-injection-autowired
spring-controller-follows-conventions 1.00 to 1.00$0.11
caughtdelete-rule deleted rule 'Request and response shapes are Java records, grouped in a…' from skills/spring-boot-conventions/SKILL.md
delete-rule:skill/spring-boot-conventions/request-and-response-shapes-are-java
spring-request-dtos-are-validated-records 1.00 to 0.67$0.11
misseddelete-rule deleted rule 'Validate request bodies with jakarta.validation (@Valid, @N…' from skills/spring-boot-conventions/SKILL.md
delete-rule:skill/spring-boot-conventions/validate-request-bodies-with-jakarta-validation
spring-request-dtos-are-validated-records 1.00 to 1.00$0.12
misseddelete-rule deleted rule '@RestController + @RequestMapping("/api/<area>"). Thin: par…' from skills/spring-boot-conventions/SKILL.md
delete-rule:skill/spring-boot-conventions/restcontroller-requestmapping-api-area-thin-parse
spring-controller-follows-conventions 1.00 to 1.00$0.11
caughtdelete-rule deleted rule 'Every response is wrapped: ApiResponse.ok(body) or ApiRespo…' from skills/spring-boot-conventions/SKILL.md
delete-rule:skill/spring-boot-conventions/every-response-is-wrapped-apiresponse-ok
spring-controller-follows-conventions 1.00 to 0.83$0.11
missedinvert-rule heuristic inverted rule 'Every response is wrapped: ApiResponse.ok(body) or ApiRespo…' in skills/spring-boot-conventions/SKILL.md ('Never' became 'Always')
invert-rule:skill/spring-boot-conventions/every-response-is-wrapped-apiresponse-ok
spring-controller-follows-conventions 1.00 to 1.00$0.11
caughtdelete-rule deleted rule 'Pagination is 1-based page and size query params. Clamp: in…' from skills/spring-boot-conventions/SKILL.md
delete-rule:skill/spring-boot-conventions/pagination-is-1-based-page
spring-controller-follows-conventions 1.00 to 0.67$0.11
misseddelete-rule deleted rule 'Business rules and authorization checks live in the service…' from skills/spring-boot-conventions/SKILL.md
delete-rule:skill/spring-boot-conventions/business-rules-and-authorization-checks-live
spring-service-owns-rules-and-errors 1.00 to 1.00$0.16
misseddelete-rule deleted rule 'Services return records or small result types, never Map<St…' from skills/spring-boot-conventions/SKILL.md
delete-rule:skill/spring-boot-conventions/services-return-records-or-small-result
spring-service-owns-rules-and-errors 1.00 to 1.00$0.13
caughtinvert-rule heuristic inverted rule 'Services return records or small result types, never Map<St…' in skills/spring-boot-conventions/SKILL.md ('never' became 'always')
invert-rule:skill/spring-boot-conventions/services-return-records-or-small-result
spring-service-owns-rules-and-errors 1.00 to 0.80$0.14
caughtdelete-rule deleted rule 'Throw domain exceptions; a @RestControllerAdvice handler ma…' from skills/spring-boot-conventions/SKILL.md
delete-rule:skill/spring-boot-conventions/throw-domain-exceptions-a-restcontrolleradvice-handler
spring-service-owns-rules-and-errors 1.00 to 0.80$0.15
missedinvert-rule heuristic inverted rule 'Throw domain exceptions; a @RestControllerAdvice handler ma…' in skills/spring-boot-conventions/SKILL.md ('Do not' became 'Do')
invert-rule:skill/spring-boot-conventions/throw-domain-exceptions-a-restcontrolleradvice-handler
spring-service-owns-rules-and-errors 1.00 to 1.00$0.14
caughtblur-trigger blurred the trigger description of skill 'spring-boot-conventions' in skills/spring-boot-conventions/SKILL.md
blur-trigger:skill/spring-boot-conventions
spring-service-owns-rules-and-errors 1.00 to 0.80$0.59
not rundrop-skill removed skill 'spring-boot-conventions' (skills/spring-boot-conventions/) entirely
drop-skill:skill/spring-boot-conventions
budget $3 spent before this mutant
not rundisable-hook disabled hook PreToolUse on Bash (node ${CLAUDE_PLUGIN_ROOT}/hooks-handlers/guard.m…) in hooks/hooks.json
disable-hook:hook/pretooluse-bash
budget $3 spent before this mutant

Scores are the mean over a case's runs with the setup loaded, against a reference run of the unmutated setup. Inverted rules are a word swap and can read oddly, so they are marked heuristic. Generated by config-drift-checker mutate.