Автоматическое исправление 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 не стоит ни одного хода модели. Когда что-то изменилось, запускается раунд:
- Смерженный или закрытый PR завершает наблюдение. Чужой пуш сначала принимается.
- Упавшие проверки, новые комментарии от доверенных авторов и конфликт слияния идут одному агенту исправления, работающему в worktree PR. Для упавшей проверки он читает лог задания; сбой вне PR (сеть, раннер) вместо исправления перезапускается один раз.
- Агент проверяет своё изменение собственными проверками репозитория и коммитит только когда они проходят.
- Коммиты пушатся как fast-forward головы PR, никогда принудительно. Если кто-то пушил тем временем, их работа сначала мерджится.
- Каждая обработанная ветка ревью получает ответ —
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.