# От запроса до коммита

Курс: Claude Code: уровень профи — https://zero2claude.ru/learn/claude-code-pro
Канонический URL: https://zero2claude.ru/learn/claude-code-pro/5-4-ot-zaprosa-do-kommita

Попросить изменение и принять что пришло — так сессии и сбиваются с пути. Семь шагов с проверкой на каждом — разведка в режиме плана, план, реализация, тесты, чтение диффа, поправка и коммит — превращают запрос в изменение, за которое ты отвечаешь.

Это итоговый урок уровня. Возьмём одну реальную задачу и проведём её от запроса до коммита — с проверкой на каждом шаге.

## Семь шагов

1. **Разведка** в режиме плана: Claude читает и отвечает, ничего не меняя.
2. **План** — одобряй, только когда он совпадает с тем, что тебе нужно.
3. **Реализация** — правки одобряешь по мере появления.
4. **Тесты** — работает ли изменение, говорят они, а не итог, который пишет Claude.
5. **Дифф** — читаешь построчно.
6. **Поправка** — всё, что не нравится, просишь исправить обычными словами.
7. **Коммит** — изменение сохранено, его легко откатить.

## Задача

Коллега пишет: «если в linkcheck.json указана несуществующая папка, утилита говорит, что все ссылки в порядке, и выходит с кодом 0». Приложил скриншот.

### 1. Разведка

Нажимай `Shift+Tab`, пока в строке статуса не появится `⏸ plan mode on`. Скриншот вставь из буфера: `Ctrl+V` (в iTerm2 работает и `Cmd+V`, в Windows и WSL — `Alt+V`). В поле ввода появится метка `[Image #1]`. Нет метки — картинка не добавилась: перетащи файл в окно Claude Code или укажи путь, например «посмотри на картинку .practice/bug.png».

```
Это вывод linkcheck для конфига с несуществующей папкой. Почему он считает, что всё в порядке? Где в коде читается список папок?
```

### 2. План — с падающим тестом

```
Спланируй исправление. Сначала добавь тест, который воспроизводит баг, и запусти его — я хочу увидеть, что он падает. Потом исправь код.
```

Это прямой совет из рекомендаций Anthropic: напиши падающий тест, который воспроизводит проблему, и только потом исправляй.

Пока план на экране, открой второй терминал и сохрани две вещи:

```bash
git status --porcelain > .practice/before.txt
printf '%s\n' src/config.js src/cli.js test/config.test.js > .practice/plan.txt
```

Первая — что рабочее дерево чистое до начала. Вторая — какие файлы план собирается менять, тест включительно. Если план называет лишние файлы, верни его и попроси держаться нужных.

### 3. Реализация

Выбери **Yes, manually approve edits** и одобряй правки по одной. Команды тоже читай: обычное **Yes**, когда команда делает то, что нужно плану, и **No** с пояснением, если она делает больше — например, прячет изменения в stash или перезаписывает файлы. Не выбирай **Yes, and switch to auto mode**: тогда остальные шаги проверял бы не ты, а фоновые проверки.

### 4. Тесты

Новый тест должен сначала упасть, а после исправления — пройти. Claude Code сворачивает длинный вывод команды до короткой сводки. `Ctrl+O` раскрывает его — найди итог тестов в конце, `Esc` вернёт назад.

### 5. Дифф

Набери `/diff`. Откроется одно из двух:

- **панель рядом с разговором.** Тестовые файлы в её списке скрыты, пока не нажмёшь строку со счётчиком вроде `1 test/generated (show)`. Если панель уже открылась сама, читай в ней: повторный `/diff` её закроет;
- **список над полем ввода.** Стрелками выбираешь файл, `Enter` открывает его дифф, `Esc` возвращает.

Во втором терминале `git diff` покажет изменения в отслеживаемых файлах. Новый файл, который создал Claude, там не появится, пока не выполнишь `git add -N путь/к/файлу`. Если дифф остановился на двоеточии — это пейджер, выход по `q`.

### 6. Поправка

Прочитал тест и видишь, что он проверяет только один случай? Скажи прямо:

```
Тест проверяет только одну несуществующую папку. Добавь случай, когда из трёх папок не существует одна, и снова запусти тесты.
```

После поправки снова посмотри дифф и убедись, что тесты проходят.

### 7. Коммит

```
закоммить исправление вместе с тестом, в сообщении скажи, что изменилось
```

Claude спросит перед запуском коммита — прочитай команду целиком. Потом проверь, что коммит трогает только файлы из плана:

```bash
git show --stat HEAD
cat .practice/plan.txt
git status
```

В коммите не должно быть ни одного файла вне плана, а `git status` должен сказать `nothing to commit, working tree clean`.

**Осторожно.** 
Скриншот уходит Claude вместе с запросом. Прежде чем вставлять, обрежь всё личное: токены, адреса почты, данные клиентов. И не путай итог Claude с результатом: фразу «всё работает» подтверждают только вывод тестов и дифф, который ты прочитал сам.
