mutation-hardenlisted
Install: claude install-skill DanielLetto2020/vibe-rules
# Разбор выживших мутантов
## Зачем это вообще
Покрытие говорит, что строка исполнялась. Оно не говорит, что её проверяли.
Набор со 100% покрытия и 4% убитых мутантов исполняет каждую строку
и пропускает почти все возможные ошибки.
Мутационное тестирование портит код нарочно — меняет `>` на `>=`, `+` на `-`,
убирает вызов, подменяет константу — и смотрит, покраснеют ли тесты.
**Выживший мутант = место, где код можно сломать, и никто не заметит.**
На коде, написанном агентом, мутанты выживают заметно чаще при том же
покрытии: ассерты получаются согласованными с реализацией, а не с требованием.
## Порядок работы
### 1. Возьми отчёт, а не общий процент
Общая цифра говорит только «плохо» или «хорошо». Работать нужно со списком
выживших: файл, строка, какая мутация выжила.
### 2. Раздели выживших на три группы
**Настоящая дыра.** Мутация меняет поведение, и ни один тест этого не видит.
Это подавляющее большинство. Лечится добавлением ассерта — не нового теста,
а именно проверки, которой не хватало.
**Эквивалентный мутант.** Мутация не меняет наблюдаемое поведение вообще
(например, порядок в коммутативной операции). Убить его невозможно. Помечается
в конфиге как исключение — с комментарием, почему.
**Мутация в непроверяемом месте.** Логирование, отладочный вывод, тривиальные
геттеры. Такие места исключаются из мутирования целиком, а не по одному.
Не начинай с исключений. Если хочется исключить больше десятой части
выживших — почти наверняка это самообман.
### 3. Чини а