Поиск причины, а не удачной правки
debug-root-causePROотладкаошибки
Заставляет сначала воспроизвести ошибку и назвать причину, и только потом трогать код.
Что делает
- Срабатывает на «сломалось», «вчера работало», «тест падает через раз», «на проде не так, как локально».
- Требует сформулировать ошибку одной фразой: при таком входе в таком состоянии код делает X вместо Y. Пока фразы нет — любая правка остаётся угадыванием.
- Ищет последнюю рабочую версию раньше, чем читает код: коммит, после которого сломалось, обычно называет причину сам и стоит дешевле чтения.
- Разрешает менять по одной вещи за раз. Две правки сразу — и непонятно, какая из них сказала правду.
- Знает обычные укрытия: значение не то, что вы думаете; общее состояние между запросами; порядок выполнения; проглоченная ошибка в пустом catch.
- Не даёт закрыть задачу словами «поменял и перестало». Это не причина, а перемещение ошибки в другое место.
Зачем он нужен
Правка, подобранная наугад, иногда срабатывает — и это хуже, чем если бы она не сработала: ошибка никуда не делась, а стала тише и всплывёт там, где её никто не ждёт. Скил разворачивает работу в обратную сторону: сначала воспроизведение, потом гипотеза, потом одна проверка. Дольше на первых десяти минутах и заметно короче на всей задаче.
Куда положить
- 1Создайте в проекте папку .claude/skills/debug-root-cause
- 2Положите в неё файл SKILL.md с текстом ниже
- 3Всё. Claude Code подключит скил сам, когда задача подойдёт под описание
Чтобы скил работал во всех проектах, а не в одном, положите его в ~/.claude/skills вместо папки проекта.
Файл SKILL.md
# Finding the cause, not a fix that happens to work
Before changing a single line, be able to state the bug as: given this
input, in this state, the code does X where it should do Y.
If you cannot state it that way, you do not understand it yet, and any
edit you make is a guess. Guesses that appear to work are worse than
guesses that fail — they move the bug somewhere quieter.
## The order
**1. Reproduce it.**
Find the shortest sequence that triggers it every time. "Sometimes" is
not a reproduction. If it only happens sometimes, the missing variable
is part of the bug: time, order, cached state, a second request, an
empty list on the first run.
**2. Find the last version that worked.**
`git log` on the touched files, or bisect. Knowing which commit
introduced it usually names the cause outright and costs less than
reading the code.
**3. Write down what you believe is happening.**Файл скила входит в PRO-подборку
Открыть доступ