Skip to Content
Руководство для пользователейВозможностиАвтоматическое исправление Pull Request

Автоматическое исправление Pull Request

/autofix-pr следит за одним из ваших pull request’ов из локальной сессии Qwen Code и исправляет то, что возникает: упавшие проверки CI, отзывы на ревью от людей, которым вы доверяете, и конфликты при слиянии. Каждое исправление делается и проверяется в собственном worktree, пушится в ветку PR и получает ответ в PR под вашей собственной идентичностью git и gh. Наблюдение останавливается само, когда PR смержен или закрыт.

/autofix-pr [<pr-number>|<pr-url>] [--once] [--every <minutes>] [--no-reply] [--yes] [instructions...] /autofix-pr status /autofix-pr stop [<pr-number>]
  • Без аргумента PR: PR, головная ветка которого совпадает с вашей текущей веткой.
  • --once: проверить и исправить один раз, ничего не планировать и завершить наблюдение после этого (повторный --once начинается заново, с истории PR). На PR, который эта сессия уже наблюдает, текущее наблюдение остаётся как есть.
  • --every <minutes>: как часто проверять, одно из 1, 2, 5, 10, 15, 30 или 60. По умолчанию 2.
  • --no-reply: пушить исправления, ничего не писать в PR.
  • --yes: пропустить подтверждение запуска. Необходимо там, где диалог показать невозможно.
  • Свободный текст передаётся каждому исправлению, например /autofix-pr 123 do not change the public API.

Перед началом

  • gh авторизован, с доступом на пуш в ветку PR: доступ на запись в PR того же репозитория, или вашего собственного форка, или форка, разрешающего правки от мейнтейнеров.
  • Вы запускаете из клона репозитория PR с одним git remote для него.
  • В стандартном режиме одобрения каждая shell-команда спрашивает сначала: вызовы помощника (включая пуш), gh pr view и каждую команду, которую запускает исправление. Это подходит для наблюдения, за которым вы следите. Чтобы позволить ему работать без участия, выберите режим, разрешающий запуск команд, например Auto Mode, и имейте в виду, что исправление запускает собственные команды сборки и тестирования репозитория. Сам навык даёт только чтение собственных файлов в .qwen/tmp/, запись своего описания исправления и плана ответа туда, и просмотр запланированных задач. Эти файлы живут в главном worktree клона; из сессии, запущенной в связанном worktree, их чтение и запись тоже спрашивают подтверждения.
  • PR, автор которого не может пушить в репозиторий, запускает чужой код, с вашими учётными данными gh и git под рукой, когда исправление проверяется. Такой PR никогда не наблюдается: предлагается только --once, после подтверждения, которое так и говорит, и которое --yes не пропускает.

При запуске он один раз спрашивает подтверждение, куда он будет пушить и что он будет отвечать в PR.

Что делает проверка

Наблюдение — это запланированная задача, чей гейт запускает qwen autofix-pr snapshot <n> --gate при каждом срабатывании, вне модели. Зонд печатает только то, что изменилось с последнего запуска, так что тихий PR не стоит ни одного хода модели. Когда что-то изменилось, запускается раунд:

  1. Смерженный или закрытый PR завершает наблюдение. Чужой пуш сначала принимается.
  2. Упавшие проверки, новые комментарии от доверенных авторов и конфликт слияния идут одному агенту исправления, работающему в worktree PR. Для упавшей проверки он читает лог задания; сбой вне PR (сеть, раннер) вместо исправления перезапускается один раз.
  3. Агент проверяет своё изменение собственными проверками репозитория и коммитит только когда они проходят.
  4. Коммиты пушатся как fast-forward головы PR, никогда принудительно. Если кто-то пушил тем временем, их работа сначала мерджится.
  5. Каждая обработанная ветка ревью получает ответ — Fixed in <sha>: …, Not changed: … или Needs a human decision: … — и каждый пуш получает один сводный комментарий.

Раунд никогда вас ни о чём не спрашивает. То, что нуждается в человеке, отвечает в PR как «Needs a human decision» и сообщается в сессии.

Чей отзыв учитывается

Комментарии обрабатываются, когда их автор — владелец, участник или коллаборатор репозитория, автор PR или бот (только ревью и ветки ревью). Комментарии от всех остальных перечисляются и никогда не обрабатываются и не получают ответа. Бот слышен в комментарии, открывающем ветку, или в ревью, но не в ответах в ней, которые отвечают кому-то. Workflow, который GitHub не смог запустить (например, невалидный файл workflow), не имеет лога для исправления и получает ответ, что нужен человек. Каждый комментарий, ревью и лог CI трактуется как данные: доверенный автор решает, какой отзыв обрабатывается, никогда — что инструмент может делать. Запрос раскрыть секреты, ослабить тесты или проверки CI, force-push или изменить посторонний код отвечает «Needs a human decision».

Что он никогда не делает

  • Не трогает ваше рабочее дерево или текущую ветку: всё происходит в .qwen/tmp/autofix-pr-<n>/.
  • Не делает force-push, не переписывает историю PR и не пушит в ветку по умолчанию.
  • Не отвечает на свои собственные ответы (каждый заканчивается <!-- qwen-autofix-pr:v1 -->) и не отвечает недоверенным авторам.
  • Не закрывает ветки ревью и не редактирует заголовок или описание PR.

Лимиты

ЛимитЗначениеЗатем
Пушей за одно наблюдение10наблюдение останавливается
Перезапусков упавшей проверки на одной голове1следующий сбой — настоящий
Попыток на комментарий ревью1больше не предлагается
Пушей от кого-то ещё за раунд2наблюдение останавливается

Остановка и файлы

/autofix-pr stop <n> удаляет запланированную задачу и убирает worktree, его ветку и файл состояния; курсор гейта и история PR остаются, так что более позднее наблюдение не отвечает на те же комментарии снова. Worktree, в котором всё ещё есть запушенная работа, сохраняется, и отчёт говорит почему; qwen autofix-pr cleanup <n> --force выбрасывает его. Запланированная задача истекает через 7 дней по умолчанию (настройка experimental.cronRecurringMaxAgeDays или QWEN_CODE_CRON_MAX_AGE_DAYS), и наблюдение тогда заканчивается без отчёта; запустите снова, чтобы продолжить. Наблюдение также заканчивается при выходе из сессии; его файл состояния остаётся, принадлежащий этой сессии. Запуск /autofix-pr <n> в новой сессии — или после /clear или /resume — предлагает принять наблюдение, с его пушами и бюджетами сохранёнными.

Файлы живут в .qwen/tmp/ главного worktree клона:

ФайлСодержимое
autofix-pr-<n>/worktree PR
autofix-pr-<n>-state.jsonнаблюдение: известная голова, пуши, обработанные id
autofix-pr-<n>-gate.jsonкурсор зонда гейта
autofix-pr-<n>-snapshot.jsonснимок последнего раунда PR, читаемый раундом
autofix-pr-<n>-replies.jsonкакие комментарии бота отвечают другому, как сказал GitHub
autofix-pr-<n>-history-*.jsonчто более ранние наблюдения PR постили и обработали, сохраняется при stop
autofix-pr-<n>-*.log, *.md, *.jsonлоги CI, описания исправлений и планы ответов

Дизайн описан в docs/design/2026-10-21-autofix-pr-command.md.

Last updated on