copilot-pr-autopilot

Par github · awesome-copilot

Copilot a laissé 14 commentaires de review sur votre PR — la moitié sont des détails mineurs. Des heures de correction → réponse → résolution → nouvelle demande, et chaque cycle génère ENCORE plus de commentaires. Cette skill exécute une boucle d'ingénierie : elle déclenche automatiquement la Code Review Copilot via GraphQL (sans mention @copilot), trie chaque thread ouvert (Copilot, humains, advanced-security) selon une grille fix / decline / escalate, distribue des sous-agents de correction parallèles qui respectent les conventions de build/test/lint du dépôt, effectue un commit par itération, répond et résout en citant le SHA poussé, puis relance jusqu'à ce que HEAD soit reviewé avec zéro thread en attente de réponse de l'agent (les threads encore ouverts sont des escalades explicites vers l'humain — refus escaladés, compromis de conception). Vous mergez une PR propre ; le bot s'en charge. Phrases déclenchantes : "address copilot comments", "run a copilot review loop", "fix this PR", "iterate on copilot feedback". Agnostique au dépôt, gh CLI + PowerShell. Le pilote automatique complet nécessite les droits Triage/Write sur le dépôt ; les auteurs de PR externes bénéficient du mode itération unique avec redéclenchement manuel (UI 🔄 ou push d'un commit substantiel).

npx skills add https://github.com/github/awesome-copilot --skill copilot-pr-autopilot

Copilot PR Autopilot

Pilotez n'importe quel pull request GitHub à travers plusieurs rounds successifs de révision de code Copilot jusqu'à ce que l'agent ait terminé son travail — chaque constatation de Copilot reçoit une réponse de l'agent (acceptation-avec-correction, refus-avec-justification, ou transfert explicite à l'utilisateur). Les threads ouverts restants, s'il y en a, sont des transferts délibérés au propriétaire de fusion humain — il ne s'agit pas d'échecs de boucle. Agnostique au référentiel — fonctionne sur n'importe quel dépôt ayant la révision de code Copilot activée, exécuté à partir d'une machine avec la CLI gh installée et authentifiée (voir Conditions préalables).

Quand utiliser cette skill

  • L'utilisateur demande « demander une révision Copilot » ou « exécuter une boucle de révision Copilot » sur un PR.
  • Un PR est fonctionnellement complet et l'utilisateur souhaite une vérification de justesse finale via plusieurs rounds de révision automatisés.
  • Une révision Copilot antérieure sur le PR a laissé des threads ouverts qui nécessitent un triage, des corrections, des réponses et une résolution.

Quand NE PAS utiliser cette skill

  • Le PR est toujours en cours de conception active — attendez que la structure soit stable ; sinon les constatations varient d'un round à l'autre.
  • L'utilisateur souhaite des retours de relecteurs humains, pas ceux de Copilot.

Conditions préalables

  • CLI gh installée et authentifiée contre le référentiel cible.
  • PowerShell sur PATH — Windows PowerShell 5.1+ (powershell.exe) ou PowerShell 7+ (pwsh). Les deux sont testés.
  • La révision de code Copilot est le cas d'usage principal (01-request-review.ps1 utilise GraphQL requestReviewsByLogin pour déclencher Copilot). Ce n'est PAS une exigence stricte — si 01-request-review.ps1 échoue parce que Copilot n'est pas activé sur le dépôt / compte, l'agent peut toujours piloter les threads de révision existants (humains, advanced-security, etc.) à la conclusion en exécutant les étapes 3–8 une seule fois comme une seule itération ; il suffit de sauter le déclenchement + attente. Il n'y a pas de détection automatique pour « Copilot indisponible » — l'agent prend cette décision après l'échec du déclenchement (le script ne peut pas distinguer de manière fiable « Copilot désactivé » de « Copilot activé mais pas encore déclenché » à partir de l'état de l'API seul).

Permissions : qui peut exécuter la boucle complète

L'autopilot multi-round complet (étapes 1 → 9 → 1) nécessite une permission Triage ou Write sur le dépôt cible, car l'API publique GitHub pour ajouter le bot Copilot en tant que relecteur (requestReviewsByLogin) est protégée par cette permission. Vérifié par rapport à la surface REST + GraphQL publique dans l'historique des commits de ce PR — il n'existe pas de chemin API public pour les relecteurs bot sans permission d'écriture.

Vous êtes… Ce qui fonctionne
Collaborateur du dépôt avec Triage / Write Boucle complète : 01 déclenche Copilot, 02 attend, 0408 trient / corrigent / répondent, boucle retour à 01. Sans intervention.
Auteur de PR externe (pas de permission d'écriture) 01 lèvera une erreur claire et exploitable. Utilisez le mode -SingleIteration : adressez tous les constatations actuelles en une seule passe, puis soit cliquez sur l'UI 🔄 à côté de Copilot, soit poussez un commit substantiel (l'événement synchronize déclenche automatiquement Copilot sur la plupart des dépôts). Ensuite ré-exécutez 02 pour vérifier.

En mode itération unique, le booléen de convergence de la boucle est Converged: true ssi OpenThreadsAwaitingReply == 0 (le côté agent est terminé). Le redéclenchement côté mainteneur pilote alors tout round supplémentaire.

Chaque script dot-source scripts/_lib.ps1 qui exécute Assert-GhReady au chargement : si gh est manquant OU gh auth status échoue, le script s'arrête avant tout travail avec un seul message d'erreur exploitable nommant la commande d'installation et gh auth login. L'agent doit transmettre ce message à l'utilisateur textuellement et arrêter la boucle — ne pas réessayer ou contourner.

Flux de travail étape par étape

La boucle : étapes 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9, puis retour à l'étape 1 si Converged: false. Répétez le round 1→9 jusqu'à ce que l'étape 9 retourne Converged: true ; ce n'est qu'alors qu'il faut exécuter l'étape 10 une seule fois et appeler task_complete. À chaque 10e round, le parent exécute la porte de récapitulatif du cap de round avant de boucler — récapitulez tous les rounds antérieurs et arrêtez si la boucle a dévié du scope original du PR.

Chaque round exécute les étapes 1–9 ; l'étape 10 est un nettoyage unique après convergence. L'agent parent coordonne ; chaque étape de sous-agent s'exécute dans un contexte frais avec un budget borné. Protocole transversal (délai limite, extension, fallback itération unique) : orchestration.md.

  1. Demander révision (parent) — voir 01-request-review.md
  2. Attendre la révision (sous-agent, cap 20 min) — voir 02-wait.md
  3. Lister + catégoriser les threads ouverts (sous-agent, 5 min) — voir 03-list-threads.md
  4. Triage (sous-agent, 5 min par ≤5 threads) — voir 04-triage.md
  5. Corriger (sous-agents, max 5 parallèles, 5 min chacun) — voir 05-fix.md
  6. Construire + tester selon les conventions du dépôt (sous-agent, 10 min) — voir 06-build-test.md
  7. Commiter + pousser (parent) — voir 07-commit-push.md
  8. Répondre (toujours) + résoudre (conditionnel) (sous-agent brouille, parent poste) — voir 08-reply-resolve.md
  9. Vérifier convergence (sous-agent, 3 min) — voir 09-convergence.md
    • Converged: false → boucler retour à l'étape 1 pour un autre round (redéclenchement, attente, liste, triage, correction, push, réponse, revérification). Chaque round adresse les constatations de Copilot du HEAD du round antérieur ; la boucle se termine dès que Copilot n'a rien de nouveau à dire ET que chaque thread ouvert a une réponse de l'agent.
    • Converged: true → sortir de la boucle, exécuter l'étape 10 une seule fois, appeler task_complete avec la preuve.
    • Chaque 10e round (10, 20, 30…) → exécuter la porte de récapitulatif du cap de round avant de boucler. Récapitulez TOUS les rounds antérieurs par rapport au scope original du PR et choisissez un verdict : CONTINUE, REVERT-AND-SHIP (supprimer les commits dérivés, livrer ceux du scope), ou HAND-OFF (escalader vers l'utilisateur). C'est le disjoncteur qui arrête une boucle de révision bot qui s'emballe.
  10. Nettoyer les éléments obsolètes (parent, post-convergence, une fois) — voir 10-cleanup.md

La convergence est calculée par scripts/02-check-review-status.ps1 comme un seul booléen Converged: true. N'appelez pas task_complete tant qu'il ne retourne pas true ; imprimez la preuve (HeadOid, LatestCopilotReview.commitOid, submittedAt) dans le message de fin.

Pièges

Les scripts fournis appliquent les invariants de justesse stricte (déclenchement arrivée via l'ID d'événement copilot_work_started, Converged nécessitant correspondance HEAD + zéro-en-attente + révision at-HEAD, sémantique fallback itération unique, garde d'état PR). Fiez-vous à eux — ne réduisez pas. Les notes ci-dessous couvrent les décisions que les scripts ne peuvent pas prendre pour vous :

  • Répondre à chaque thread ouvert ; résoudre uniquement quand la boucle détient la disposition. Pour les threads fix et decline, répondre + résoudre. Pour les threads escalate-to-user, répondre avec l'analyse mais laisser le thread OUVERT (08-reply-and-resolve.ps1 -NoResolve) pour que le propriétaire de fusion humain puisse agir. Voir 08-reply-resolve.md.
  • Les threads Copilot sont contrôlés par la boucle ; les threads humains / advanced-security / autre-bot font défaut à escalate-to-user. La résolution automatique d'un thread de révision humain peut cacher des préoccupations non adressées. Voir 04-triage.md pour la rubrique.
  • Un commit focalisé par round, pas un par PR. Regrouper les rounds détruit la piste d'audit de quelle constatation a piloté quel changement et casse git bisect. Voir 07-commit-push.md.
  • Construire/tester/linter avec les commandes propres du dépôt (selon son CONTRIBUTING / AGENTS / README / package.json / Makefile) avant de pousser une correction. Procédure de découverte : 06-build-test.md.
  • Repousser avec justification écrite quand une constatation de Copilot sur-ingenierait la conception pour un cas limite hypothétique. Accepter chaque suggestion automatiquement érode la conception — voir le chemin decline dans 04-triage.md.
  • Pièges de script (type-coercion gh api graphql -F, analyse positionnelle git stash push -m, les trois pièges GraphQL pour la mutation relecteur) sont documentés dans references/api-quirks.md. Lisez avant de modifier n'importe quel script.

Dépannage

Problème Solution
Le script lève prerequisite missing — gh CLI is not on PATH Installer gh (winget install GitHub.cli sur Windows ; brew install gh sur macOS ; gestionnaire de paquets sur Linux ; ou télécharger depuis https://cli.github.com). Puis gh auth login. Transmettez le message à l'utilisateur et ARRÊTEZ la boucle — ne réessayez pas.
Le script lève prerequisite missing — gh CLI is not authenticated Exécutez gh auth login. ARRÊTEZ la boucle jusqu'à ce que l'utilisateur complète l'authentification.
Le déclenchement échoue ou aucun événement copilot_work_started ne se pose Poussez un commit substantiel (non-whitespace) — l'attribution automatique sur synchronize est le déclenchement le plus fiable. L'échec persistant indique que la révision de code Copilot peut ne pas être activée sur le dépôt / compte (vérifier dépôt Paramètres → Code & automation → Copilot, ou Copilot Pro/Pro+ au niveau du compte).
Aucune nouvelle révision après attente ~10 min Période calme après rejet récent ou suppression diff-trivial. Poussez un commit substantiel et réessayez. Ne pas aveuglément ré-exécuter 01-request-review.ps1 — il rapporte InFlight tandis que Copilot est toujours un relecteur demandé.
Threads obsolètes mais non résolus dans la liste ouverte Attendu : l'état non résolu est la source de vérité. Répondez + résolvez-les comme n'importe quel autre thread ouvert. 10-cleanup-outdated.ps1 n'est qu'un filet de sécurité final.
Incertain si corriger ou refuser une constatation Voir references/04-triage.md.
Besoin d'une formulation de réponse pour « corrigé », « refusé » ou « dérive » Voir les modèles sous templates/reply-fix.md, reply-decline.md, reply-drift.md, reply-partial.md.

Références

Skills similaires