Communitygithub.com

PRs empilés (Stacked PRs)

À utiliser lorsqu'une modification dépasse environ 300 lignes, que le travail s'étend sur plusieurs commits ou étapes, que vous ouvrez une pull request, que vous recevez ou répondez à des retours de revue sur une pull request, ou que vous rebasez ou fusionnez une pile de PRs dépendantes. Couvre le budget de taille des PRs et ce qui compte, comment diviser et empiler les PRs, la revue séquentielle étape par étape, et comment traiter les retours de revue en vérifiant chacun, puis en corrigeant ou en justifiant.

Qu'est-ce que PRs empilés (Stacked PRs) ?

Ce skill définit les meilleures pratiques pour gérer des pull requests de grande taille ou des séquences de modifications interdépendantes via un système de PRs empilées (stacked PRs). Il est utile pour les développeurs travaillant sur des fonctionnalités complexes qui ne peuvent pas tenir dans une seule PR, ainsi que pour les réviseurs humains ou agents IA. Il prend en charge n'importe quelle plateforme de revue de code (GitHub, GitLab, etc.) et décrit un processus structuré en plusieurs étapes : établir un budget de taille (~300 lignes par PR), diviser le travail en étapes atomiques avant d'écrire du code, empiler les PRs les unes sur les autres pour que chaque révision ne montre que le delta de l'étape, et effectuer une revue séquentielle (une PR à la fois de bas en haut). Il explique également comment traiter les retours de revue : vérifier techniquement chaque commentaire, le corriger ou le contester avec des arguments, et répondre à chaque commentaire. Ce skill encourage une collaboration efficace, évite les révisions inutiles et garantit que les modifications restent compréhensibles et réversibles.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/chukaofili/agent-plugins/tree/HEAD/plugins/coding-protocol/skills/stacked-prs

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait PRs empilés (Stacked PRs) ?

Le budget de taille

Visez environ 300 lignes modifiées par PR, avec 500 comme plafond. À cette taille, un humain peut garder l'ensemble de la modification en tête pour une revue rapide, et les agents de revue reviennent avec des retours propres et spécifiques au lieu de survoler.

Ce qui compte : le code écrit à la main et les tests.

Ce qui ne compte pas : les fichiers de verrouillage (lockfiles), le code généré (migrations, génération de code, sortie OpenAPI), les snapshots, les fixtures et les fichiers fournis (vendored). Ils sont survolés, pas lus. Listez les fichiers générés dans le corps de la PR pour que le réviseur sache quoi ignorer.

Divisez avant d'écrire, pas après. La division est décidée dans le plan (voir coding-process). Si une étape prévue dépasse 500, re-planifiez-la. Points de division courants :

  • Les tests peuvent être leur propre étape. Par exemple, la logique avec des tests unitaires et d'intégration, puis l'interface utilisateur avec des tests E2E.
  • Schéma ou modèle de données, puis le service qui l'utilise, puis la surface API, puis l'interface utilisateur.
  • Un refactoring qui simplifie la modification, puis la modification.
  • Une mise à jour de documentation trop volumineuse pour être incluse devient une étape dédiée en haut de la pile.

Les modifications véritablement indivisibles, comme une migration cohérente ou un renommage sur 80 fichiers, peuvent dépasser la limite. Le corps de la PR dit pourquoi et indique au réviseur la partie qui nécessite une lecture attentive.

Les commits atomiques s'appliquent toujours à l'intérieur de chaque PR. Le budget est par PR, et ne remplace pas une bonne hygiène de commits.

Empilement

Un travail en plusieurs étapes est livré sous forme de pile de PRs, jamais comme une seule branche portant tout le plan. Chaque PR représente une étape et cible la branche de l'étape précédente, pas main. Ainsi, chaque diff que le réviseur voit correspond uniquement à la modification de cette étape, et une étape risquée (une migration, un changement d'authentification) peut être révisée et annulée indépendamment.

  • Créez chaque branche à partir de la tête de l'étape précédente. Seule la PR du bas cible main :
    gh pr create --base <branche-etape-precedente>
    
  • Notez la position dans le corps de chaque PR (Empilé sur #123) afin qu'un réviseur qui ouvre une PR dans le désordre sache ce qu'il regarde.
  • Fusionnez de bas en haut. Lorsqu'une branche de base change (une correction de revue, ou la fusion de la base), rebasez les branches au-dessus et force-push celles-ci. Force-push vos propres branches de pile non fusionnées est courant. Force-push main ou une branche partagée ne l'est jamais.
  • Après qu'une PR de la pile a fusionné, synchronisez le reste sur la nouvelle base avant de commencer l'étape suivante.
  • Les corrections issues d'une revue ou d'une vérification sur une surface UI sont livrées comme une nouvelle étape au-dessus, de sorte que la construction et les corrections restent séparément révisables.
  • Les outils d'empilement comme gh stack, Graphite ou git-town sont facultatifs. Git pur et gh suffisent.

Revue séquentielle

Révisez une pile une étape à la fois. Demandez une revue au réviseur du projet (voir les barrières de projet dans AGENTS.md) uniquement sur la PR du bas, puis :

  1. Demandez une revue sur cette seule étape.
  2. Traitez chaque commentaire (voir ci-dessous).
  3. Redemandez une revue, et répétez jusqu'à ce que l'étape soit approuvée.
  4. Alors seulement demandez une revue sur l'étape suivante.

Ne demandez pas une revue sur toute la pile en une fois. Un commentaire sur l'étape 1 peut invalider des commentaires déjà écrits sur les étapes 2 à 5, et la revue séquentielle maintient l'effort du réviseur limité.

Si une étape stagne (pas de retour de revue, ou un commentaire nécessitant une décision produit), signalez-la et continuez à construire localement les étapes supérieures qui n'en dépendent pas.

Traitement des retours de revue (toute PR, empilée ou non)

  • Vérifiez techniquement chaque commentaire avant d'agir. Lisez le code qu'il cible et reproduisez le problème si possible.
  • Corrigez-le, ou contestez avec des arguments. Les réviseurs, humains ou bots, ont régulièrement tort en toute confiance. Faire une mauvaise modification pour être agréable est pire que de discuter. Pas d'accord factice.
  • Jugez les commentaires par leur probabilité réelle. Contestez les corrections pour des scénarios qui ne peuvent pas se produire en pratique, et les suggestions qui ajoutent de la complexité sans gain réel.
  • N'ajoutez pas de tests qui ne peuvent pas échouer. Un test qui passe que le bug existe ou non est du bruit. Lancez-le d'abord avec le code défaillant (voir testing).
  • Répondez à chaque commentaire pour que le réviseur puisse voir ce qu'il en est : corrigé dans quel commit, ou pourquoi pas.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills associés