В трекере висит задача: «Исправить ошибку в обработчике оплаты, из-за которой транзакции зависают на этапе подтверждения». Цена ошибки тут высокая — если задеть что-то лишнее, пользователи просто не смогут оплатить подписки. Я открываю Claude Code и даю команду: «Найди, почему статус платежа не обновляется, и исправь логику в payment_handler.py».
Инструмент переписывает функцию. Я решаю заодно навести порядок в структуре и прошу переместить старый конфиг в архив: «Перемести файл config_old.json в папку /archive». Claude выполняет это одной командой Bash. Однако спустя десять минут правок я обнаруживаю, что новая логика оплаты конфликтует с редким типом валют. Код превратился в кашу, и нужно срочно вернуться к моменту, когда всё только начало работать.
Выбор точки возврата
В Claude Code работает система автоматических контрольных точек: инструмент сохраняет состояние кода перед каждым новым запросом, который начинает очередной ход в диалоге.
Я ввожу команду «/rewind», и передо мной открывается список всех моих запросов за сессию. Теперь нужно выбрать, насколько глубоко мы откатываемся. Если я выберу «Restore code and conversation», то и файлы, и история переписки вернутся к выбранному моменту. Но мне нужно сохранить текущий разговор, чтобы не объяснять ИИ заново, в чём заключалась проблема с валютами, поэтому я выбираю «Restore code».
Сюрприз в папке /archive
После отката я смотрю в дерево файлов и понимаю, что config_old.json всё ещё лежит в папке /archive. Странно: код в обработчике оплаты вернулся к исходному состоянию, а файл-беглец не вернулся на место. Лера, заглянувшая через плечо, замечает, что я пытался «отмотать» действие Bash-команды.
Дело в том, что изменения файлов, сделанные командами Bash (например, перемещение или удаление), не отслеживаются системой контрольных точек. /rewind восстанавливает только те правки, которые инструмент внёс через свои внутренние средства редактирования файлов.
— Дима, ты пытался отменить mv командой отката, — смеётся Лера. — Это так не работает. Bash — это «чёрная дыра» для контрольных точек. Пришлось вручную переносить файл из архива обратно.
Теперь, когда код снова в стабильном состоянии, я запрашиваю исправление с учётом проблемных валют, не используя Bash для перемещения ресурсов. Я знаю, что в рамках одной сессии у меня есть запас в 100 последних контрольных точек, так что экспериментировать с кодом можно смелее.
В итоге клиенту уходит исправленный обработчик оплаты, который теперь корректно отрабатывает все типы валют, а config_old.json возвращается на своё законное место в корне проекта.
