SpyBara
Go Premium

code-review-pull-requests.md 2026-10-26 22:57 UTC to 2026-10-27 22:59 UTC

No changes for this document in this history range.

2026
Thu 15 23:58 Tue 20 23:00 Wed 21 23:02 Thu 22 22:58 Fri 23 22:59 Sun 25 23:58

Чтение результатов и запрос ревью для pull request

Читайте результаты Code Review в вашем pull request на GitHub, отвечайте на них или отклоняйте их, а также запрашивайте ревью с помощью @claude review.

Code Review — это управляемый сервис, который Owner в вашей организации Claude включает для набора репозиториев GitHub. После включения Claude проводит ревью pull request в этих репозиториях и публикует свои результаты в виде встроенных комментариев, сводки в теле ревью и check run с именем Claude Code Review. Ревью никогда не одобряет и не блокирует ваш pull request, а check run никогда не завершается со статусом failure.

Owner управляет тем, когда запускаются ревью и насколько они тщательны, для каждого репозитория.

[!NOTE]

Если ваш план не включает Code Review, вы всё равно можете поручить Claude провести ревью вашей ветки из сессии Claude Code: см. Локальное ревью с помощью /code-review.

Уровни серьёзности

Claude публикует каждый результат в виде встроенного комментария к соответствующим строкам и помечает его одним из трёх уровней серьёзности:

Маркер Серьёзность Значение
🔴 Important Ошибка, которую следует исправить перед слиянием
🟡 Nit Незначительная проблема, которую стоит исправить, но она не блокирует
🟣 Pre-existing Ошибка, которая существует в кодовой базе, но не была внесена этим PR

Если ревью зафиксировало свои рассуждения, у результата есть свёрнутый раздел Why this was flagged. Разверните его, чтобы узнать, почему Claude пометил проблему и как он её проверил.

Чтобы изменить, что Claude помечает в вашем репозитории или как он оценивает серьёзность, см. Настройка Code Review.

Ответ на результаты

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

Чтобы закрыть результат, разрешите его ветку обсуждения или отправьте исправление.

  • Отклонить без изменения кода: разрешите ветку обсуждения самостоятельно на GitHub. Одного ответа недостаточно, чтобы отклонить результат.
  • Исправить проблему: измените код и выполните push. Следующее ревью pull request разрешит прежнюю ветку обсуждения, если сочтёт проблему исправленной, — независимо от того, запускается ли это ревью автоматически при push или вы запрашиваете его сами.
  • Объяснить или не согласиться: ответьте на комментарий. Claude не отвечает сразу, и ответ не запускает ревью. Следующее ревью pull request читает ответы на свои прежние результаты и может разрешить ветку обсуждения или опубликовать один ответный комментарий. Если один и тот же тип результата постоянно возвращается, попросите сопровождающего добавить правило в REVIEW.md.

Чтобы получить это следующее ревью без push, оставьте @claude review в виде комментария верхнего уровня к pull request.

Вывод check run

Ссылка Details в check run Claude Code Review открывает результаты в одной таблице, отсортированной по серьёзности, включая любые результаты, встроенные комментарии к которым GitHub не принял:

Серьёзность Файл:Строка Проблема
🔴 Important src/auth/session.ts:142 Обновление токена конкурирует с выходом из системы, из-за чего устаревшие сессии остаются активными
🟡 Nit src/auth/session.ts:88 parseExpiry молча возвращает 0 при некорректных входных данных

Результат, у которого есть строка, но который не был опубликован как встроенный комментарий, отображается как аннотация на вкладке Files changed у соответствующих строк. Результаты Important отображаются красным, nit — жёлтым, а pre-existing ошибки — серым.

Check run завершается со статусом neutral или, после некоторых push, которые не изменяют ни одного файла и сохраняют прежний результат, со статусом skipped. Он никогда не завершается со статусом failure, поэтому завершённое ревью не приводит к провалу обязательной проверки. Если вы не видите результатов или ревью не запустилось, см. Устранение неполадок Code Review.

Когда push сохраняет прежний результат

Если после push у check run один из следующих заголовков, Code Review сохранил результат прежнего ревью вместо запуска нового:

  • Code review skipped — no new changes: ни один результат Important из прежнего ревью больше не открыт, поэтому новое ревью не требуется
  • Code review not repeated — earlier findings still open: чтобы запустить новое ревью, отправьте push с исправлением открытого результата Important или закройте его ветку обсуждения и снова выполните push

На github.com Code Review может сохранить результат, если выполняются оба условия:

  • Pull request по-прежнему добавляет и удаляет те же строки, как после пустого коммита, чистого слияния базовой ветки или чистого rebase
  • С момента того ревью никто не закрыл ветку обсуждения результата Important

Чтобы получить ревью без изменения кода, оставьте комментарий @claude review или нажмите Re-run в check run.

Чтение результата из скрипта

Чтобы блокировать слияние или публиковать сводку из собственного CI, разберите последнюю строку текста Details с помощью gh и jq. Эта строка — HTML-комментарий, содержащий количество результатов по уровням серьёзности в формате JSON:

<!-- bughunter-severity: {"nit":1,"normal":2,"pre_existing":0} -->

Строки над ней могут содержать имена файлов из pull request. Если вы разбираете текст собственным способом, берите количество только из последней строки, как это делает команда в приведённых ниже шагах.

1. Найдите ID check run

В оболочке выведите список check run для коммита и возьмите id запуска Claude Code Review. Замените OWNER и REPO на владельца и имя вашего репозитория, а <commit-sha> — на головной коммит pull request:

gh api repos/OWNER/REPO/commits/<commit-sha>/check-runs --jq '.check_runs[] | {id, name}'

Если для коммита было несколько запусков Claude Code Review, например после Re-run, GitHub выводит только самый новый.

2. Прочитайте количество по уровням серьёзности

Прочитайте количество из поля output.text этого check run, в котором хранится текст Details. Замените CHECK_RUN_ID на ID:

gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID --jq '
  (.output.text | split("\n") | last
    | scan("^<!-- bughunter-severity: (.*) -->$")[0] | fromjson)?
  // error("no severity line")'

Команда выводит JSON-объект с количеством для каждого уровня серьёзности, ключи которого упорядочены по алфавиту, например {"nit": 1, "normal": 2, "pre_existing": 0}. За исключением check run, который сохранил прежний результат, в количество входят результаты прежних ревью pull request, ветки обсуждения которых всё ещё открыты.

При заголовке Code review skipped — no new changes в количество не входят открытые nit и pre-existing результаты из прежних ревью. Ни один результат Important из прежнего ревью в этом случае не открыт.

3. Обработайте результат

Предусмотрите в скрипте обработку следующих случаев в указанном порядке:

  • Заголовок начинается с Code review not repeated: Code Review сохранил прежний результат, результаты Important которого всё ещё открыты, и в check run нет строки с количеством по уровням серьёзности. Прочитайте заголовок до количества с помощью gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID --jq .output.title. Завершите задание с ошибкой, если хотите блокировать слияние.
  • Заголовок заканчивается на no new changes: позвольте заданию пройти успешно без чтения количества
  • normal больше нуля: завершите задание с ошибкой, если хотите блокировать слияние. Ключ normal содержит количество результатов Important, то есть Claude нашёл хотя бы одну ошибку, которую стоит исправить перед слиянием. Чтобы вывести только это количество, добавьте | .normal перед закрывающей одинарной кавычкой.
  • Строка отсутствует: вместо количества команда выводит ошибку, содержащую no severity line, и завершается с ненулевым статусом. Считайте это отсутствием вердикта, а не нулём результатов. В check run для ревью, которое завершилось ошибкой, превысило время ожидания, было отменено или заменено более новым, такой строки нет; её также нет в некоторых завершённых ревью.

Запрос ревью

Если ваш pull request является черновиком или создан из форка, автоматические ревью его пропускают, поэтому запросите ревью с помощью команды в комментарии. Чтобы получить ревью для вашего pull request, выполните одно из следующих действий:

  • Откройте его или пометьте как готовый: в репозитории с настройкой Once after PR creation или After every push ревью запускается, когда вы открываете или повторно открываете pull request либо помечаете черновик как готовый к ревью.
  • Оставьте команду в комментарии: опубликуйте @claude review в pull request.
  • Выполните push коммита: push запускает ревью в репозитории с настройкой After every push или в pull request, на который вы подписались с помощью @claude review always. Если после push ваш pull request по-прежнему добавляет и удаляет те же строки, Code Review может вместо этого сохранить предыдущий результат.
  • Нажмите Re-run: после того как ревью завершилось ошибкой или превысило время ожидания в pull request, созданном не из форка, запустите его снова из check run. В pull request, созданном не из форка, вы также можете нажать Re-run после push, при котором был сохранён предыдущий результат.
  • Дождитесь автоматической повторной попытки: ревью, сессия которого была прервана, автоматически повторяется один раз. Сводка check run сообщает, когда это происходит.

Команды в комментариях

Опубликуйте одну из этих команд в виде комментария к pull request:

Команда Что она делает Когда её использовать
@claude review Запускает одно ревью без подписки PR на будущие push Вам нужно одно ревью сейчас, например для pull request в репозитории с настройкой Manual, или ещё одно ревью немедленно в других режимах
@claude review always Запускает ревью и подписывает PR на ревью, запускаемые при push, в дальнейшем Вы хотите, чтобы последующие push запускали ревью, например для высокоприоритетного PR в репозитории с настройкой Manual
@claude review once То же, что @claude review: запускает одно ревью без подписки Те же случаи, что и для @claude review
@claude review stop Завершает подписку PR на ревью, запускаемые при push, не запуская ревью и не отменяя уже выполняющееся. Claude отвечает комментарием вместо check run. Вы подписали PR с помощью @claude review always в репозитории с настройкой Manual или Once after PR creation и больше не хотите, чтобы каждый push запускал ревью
@claude review off или @claude review pause То же, что @claude review stop Те же случаи, что и для @claude review stop

В репозитории с настройкой After every push нельзя остановить ревью с помощью комментария, поскольку push там запускают ревью независимо от наличия подписки. Чтобы push не запускали ревью для одного pull request в таком репозитории, преобразуйте его в черновик. Когда вы снова пометите его как готовый к ревью, запустится ревью.

Чтобы любая команда в комментарии сработала, должны выполняться все следующие условия:

  • Опубликуйте её как новый комментарий верхнего уровня к pull request, а не как встроенный комментарий к строке diff и не как тело ревью. Редактирование более раннего комментария не считается.
  • Поместите всю команду на одной строке в начале комментария. После неё может следовать другой текст. Если always или stop написано с ошибкой или находится на следующей строке, Claude воспринимает комментарий как обычный @claude review и запускает одно ревью. Регистр не имеет значения.
  • Вам нужны права write, maintain или admin в репозитории. Claude проверяет это через GitHub для каждого комментирующего, а комментарии от ботов не запускают ревью.
  • Pull request должен быть открыт.

Когда команда, запускающая ревью, принята, в pull request появляется check run Claude Code Review с заголовком Code review queued.... Заголовок меняется на Code review in progress..., когда ревью начинается. Claude также может отреагировать на ваш комментарий с помощью 👀, но эта реакция может появиться и тогда, когда ревью не запускается, поэтому ориентируйтесь на check run.

Если ревью уже выполняется для последнего коммита pull request, новый запрос не запускает второе.

[!NOTE]

До обновления в июле 2026 года @claude review подписывал PR на ревью, запускаемые при push. Если вы полагались на это поведение, используйте вместо этого комментарий @claude review always.

Что охватывает последующее ревью

Последующее ревью, которое запускается само, например после push, фокусируется на том, что изменилось с момента последнего ревью, и публикует меньше результатов nit и pre-existing. Чтобы узнать, были ли в результате какие-то результаты опущены, найдите в тексте ревью предложение, в котором указано их количество:

  • Результаты по коду, который не изменился с момента последнего ревью: предложение заканчивается на «outside the scope of this re-review and not posted»
  • Результаты nit и pre-existing: предложение заканчивается на «found and not posted»

Чтобы получить ревью, в котором ничего из этого не опущено, оставьте комментарий @claude review. Такое ревью снова охватывает весь pull request.

Ревью черновиков и pull request из форков

Автоматические ревью пропускают оба этих случая, поэтому запросите ревью с помощью команды в комментарии:

  • Черновики pull request: команда в комментарии выполняется для черновика, поэтому вы можете запросить ревью до того, как пометите pull request как готовый. Push в черновик не запускают ревью, даже после @claude review always. Подписка вступает в силу, как только вы пометите pull request как готовый.
  • Pull request из форков: Claude не проводит ревью pull request из форка автоматически, независимо от настройки Review runs репозитория. Чтобы запустить ревью, оставьте комментарий @claude review в pull request. Условия для команд в комментариях по-прежнему действуют, причём права на запись нужны в базовом репозитории, а не в форке.

В pull request из форка @claude review always тоже работает, но не подписывает pull request на ревью при последующих push. Нажатие Re-run в check run там не запускает ревью.

Использование Code Review вместе с Claude Code GitHub Action

Если в репозитории также работает Claude Code GitHub Action в интерактивном режиме с триггерной фразой по умолчанию @claude, комментарий @claude review запускает и Action. Чтобы разделить их, задайте для входного параметра trigger_phrase в Action другую фразу.

Связанные ресурсы