Examen interactif des PR — NVIDIA-NeMo/RL
Examinez une pull request ou une branche locale de manière interactive, en appliquant les directives de codage du projet.
Analyser les arguments
- Si
$ARGUMENTScontient un nombre → mode PR avec ce numéro de PR - Si
$ARGUMENTSest vide ou ne contient aucun nombre → mode LOCAL (examiner la branche actuelle par rapport à main) - Si
$ARGUMENTScontientupdate→ mode UPDATE (mode PR uniquement) - Si
$ARGUMENTScontient--deep→ utiliser des sous-agents parallèles pour un examen plus approfondi
Repo : NVIDIA-NeMo/RL
Exemples :
/review-pr 123— examiner la PR #123, agent unique/review-pr 123 --deep— examiner la PR #123 avec des sous-agents parallèles/review-pr 123 update— relancer les discussions existantes pour la PR #123/review-pr— examiner la branche actuelle par rapport à main, sortie terminal uniquement
Phase 1 : Configuration
Mode PR
git fetch origin pull/$PRNUM/head:pr-$PRNUM-review
git checkout pr-$PRNUM-review
Mode LOCAL
Vous êtes déjà sur la bonne branche. Déterminez la base de fusion :
git merge-base main HEAD
Phase 2 : Rassembler le contexte
Mode PR — récupérations MCP parallèles
Tous avec owner=NVIDIA-NeMo, repo=RL, pullNumber=$PRNUM :
mcp__github__pull_request_readméthode=get→ titre de PR, description, auteur, branche de base, labels, SHA de headmcp__github__pull_request_readméthode=get_diff→ diff completmcp__github__pull_request_readméthode=get_files→ liste des fichiers modifiésmcp__github__pull_request_readméthode=get_review_comments→ discussions d'examen existantesmcp__github__pull_request_readméthode=get_reviews→ examens existantsmcp__github__pull_request_readméthode=get_comments→ commentaires généraux sur la PR
Mode LOCAL — git diff
git diff $(git merge-base main HEAD)..HEAD
git diff $(git merge-base main HEAD)..HEAD --name-only
Aucun appel MCP nécessaire.
Les deux modes — lectures locales
- Lire @CLAUDE.md à la racine du repo pour la philosophie d'examen
- Lire tous les fichiers
.claude/skills/*/SKILL.md(saufreview-pr) pour les règles de directives - Glob
.claude/review-memory/*.md— s'il y en a, les lire pour les modèles appris
Phase 3 : Analyser
Mode agent unique (par défaut)
Analysez tous les changements vous-même. Retournez une liste de problèmes candidats — chacun avec fichier, ligne, catégorie et description. Ne les notez PAS encore ; la notation se fait à l'étape de validation (Phase 3b).
Mode deep (--deep) — sous-agents parallèles
Lancez 3 sous-agents opus en parallèle à l'aide de l'outil Agent. Fournissez à chacun le diff, la description de PR (si mode PR), et le contenu des skills de directives. Chacun retourne une liste de problèmes candidats (fichier, ligne, catégorie, description). Ne leur demandez PAS de noter — la notation se fait en Phase 3b.
Sous-agent 1 — Conformité aux directives : Examinez le diff par rapport à tous les skills de directives (code-style, config-conventions, error-handling, testing, copyright, docs). Pour chaque violation, retournez le fichier, la ligne, la description et quel skill elle viole.
Sous-agent 2 — Scan de bugs (diff uniquement) : Scannez pour les bugs évidents dans le diff sans lire le contexte environnant. Signalez les erreurs de syntaxe, les erreurs de type, les erreurs de logique claires, les imports manquants, les références non résolues.
Sous-agent 3 — Scan de bugs contextuel : Lisez le code environnant et l'historique git pour chaque fichier modifié. Cherchez les bugs qui ne deviennent apparents qu'avec le contexte : utilisation incorrecte d'API (notamment megatron-bridge, megatron-lm, automodel, gym), conditions de course, hypothèses brisées.
Après que tous les sous-agents retournent : fusionnez les résultats et dédupliquez (même fichier+ligne+problème = une découverte). Puis passez à la Phase 3b.
Règles d'analyse (tous les modes)
Mode NEW
- Analysez le diff par rapport à tous les skills de directives
- Pour chaque fichier modifié, lisez le contexte environnant localement en utilisant
ReadetGreppour comprendre le changement en contexte - Croisez les commentaires d'examen existants (mode PR uniquement, à partir de l'étape 4) pour éviter de dupliquer les points déjà soulevés par d'autres examinateurs
- Appliquez aussi les modèles issus des fichiers de mémoire d'examen
- Catégorisez les découvertes :
- [BUG] — Erreurs de logique, références nulles, conditions de course, erreurs de syntaxe
- [TEST] — Couverture de test manquante ou insuffisante
- [GUIDELINE] — Violations des directives de codage des skills
- [DOC] — Documentation obsolète ou manquante
Mode UPDATE (mode PR uniquement)
- Examinez tous les discussions d'examen non résolues sur la PR
- Pour chaque discussion, déterminez si une action est nécessaire :
- Nous ne sommes pas d'accord avec la réponse → rédigez un commentaire comme « Nous pouvons résoudre cette discussion parce que XYZ »
- L'auteur a posé une question ou fait un commentaire qui nécessite une réponse → rédigez une réponse
- POUVEZ aussi créer de nouveaux commentaires si vous remarquez quelque chose de justifié lors de l'examen des discussions
- Ignorez les discussions qui sont résolues ou où aucune réponse n'est nécessaire
Phase 3b : Valider et noter
Pour chaque problème candidat de la Phase 3, lancez un sous-agent opus de validation séparé à l'aide de l'outil Agent. Lancez-les en parallèle (regroupez tous à la fois).
Chaque sous-agent de validation reçoit :
- Le problème candidat (fichier, ligne, catégorie, description)
- Le contexte de code pertinent (le chunk diff + lignes environnantes)
- Le titre et la description de PR (si mode PR)
- Le contenu du skill de directive spécifique (s'il s'agit d'une violation de directive)
Le travail du sous-agent de validation :
- Vérifier indépendamment que le problème est réel en examinant le code réel — par exemple, si le problème dit « la variable n'est pas définie », vérifiez qu'elle est réellement indéfinie ; si elle dit qu'une règle CLAUDE.md/skill est violée, confirmez que la règle s'applique à ce fichier
- Attribuer un score de confiance (0-100) :
| Score | Signification |
|---|---|
| 0 | Pas confiant, probablement un faux positif |
| 25 | Somewhat confiant, pourrait être réel |
| 50 | Modérément confiant, réel mais mineur |
| 75 | Très confiant, réel et important |
| 100 | Absolument certain, définitivement réel |
- Retourner : validé (oui/non), score de confiance, et optionnellement une description affinée
Filtre : éliminez tout problème notant moins de 80. Ce sont les faux positifs que nous voulons éviter.
Phase 4 : Aperçu et confirmation
Affichez les découvertes à l'utilisateur avec les scores de confiance :
Mode PR
PR #<number>: <title> (par <author>)
Fichiers modifiés : <count>
--- Découvertes (notées ≥80) ---
[BUG 95] path/to/file.py:42 — <brief description>
Suggéré : « <le texte du commentaire> »
[GUIDELINE 85] path/to/other.py:15 — <brief description>
Suggéré : « <le texte du commentaire> »
--- Filtrées (notées <80) ---
N problèmes de faible confiance omis
--- Ignorées (déjà couvertes par d'autres examinateurs) ---
- <brief list>
--- Réponses aux discussions (<count>) --- (mode UPDATE uniquement)
Discussion sur file.py:10 (par <author>) — <planned action>
Réponse suggérée : « <le texte de la réponse> »
Puis utilisez AskUserQuestion :
- Options : (1) Publier tout — tout poster comme indiqué, (2) Discuter individuellement — passer en revue chaque élément un par un, (3) Annuler — ne rien faire
- Si l'utilisateur choisit « Discuter individuellement » : itérez à travers les éléments. Pour chacun, demandez s'il souhaite approuver, modifier le texte ou ignorer.
Mode LOCAL
Branche : <branch-name> (par rapport à main)
Fichiers modifiés : <count>
--- Découvertes (notées ≥80) ---
[BUG 95] path/to/file.py:42 — <brief description>
[GUIDELINE 85] path/to/other.py:15 — <brief description>
--- Filtrées (notées <80) ---
N problèmes de faible confiance omis
Pas d'étape de publication — sortie terminal uniquement. Demandez si l'utilisateur souhaite discuter de découvertes.
Phase 5 : Publier l'examen (mode PR uniquement)
Nouveaux commentaires (modes NEW et UPDATE)
- Créer un examen en attente :
mcp__github__pull_request_review_writeavecmethod=create,commitID=<head_sha>(aucunevent— crée un examen en attente) - Pour chaque commentaire approuvé :
mcp__github__add_comment_to_pending_reviewavec :path: chemin de fichier relatifline: numéro de ligne sur le côté DROIT du diffside:RIGHTsubjectType:LINE(ouFILEsi le commentaire est au niveau du fichier)body: le texte du commentaire
- Soumettre l'examen :
mcp__github__pull_request_review_writeavecmethod=submit_pending,event=COMMENT,body=<one-line summary of findings>
Si un numéro de ligne ne peut pas être mappé à partir du diff, recourez à subjectType: FILE.
Réponses aux discussions (mode UPDATE)
Pour chaque réponse à un discussion : mcp__github__add_reply_to_pull_request_comment avec :
commentId: l'ID du commentaire auquel on répondbody: le texte de la réponse
Phase 6 : Mettre à jour la mémoire d'examen
Après l'examen (modes PR et LOCAL), pour chaque commentaire/découverte que l'utilisateur a approuvé ou discuté :
- Glob
.claude/review-memory/*.mdpour les modèles existants - Vérifiez si un fichier couvre déjà ce modèle (en lisant les titres)
- Si un fichier de mémoire correspondant existe :
- Ajoutez la nouvelle occurrence à la section
## Occurrences - Demandez à l'utilisateur : « Le modèle « <name> » s'est déjà produit. Promouvoir au skill
<skill-name>? (oui/non) » - Si oui → ajoutez comme nouvelle sous-section dans le
SKILL.mddu skill approprié, puis supprimez le fichier de mémoire - Si non → gardez en mémoire
- Ajoutez la nouvelle occurrence à la section
- Si aucun fichier de mémoire correspondant n'existe :
- Créez un nouveau fichier plat dans
.claude/review-memory/avec ce format :
- Créez un nouveau fichier plat dans
# <Pattern Name>
**Do:** <what to do instead>
**Don't:** <the anti-pattern>
## Occurrences
- PR #<number>: <file>:<line> (<date>)
Créez le répertoire .claude/review-memory/ s'il n'existe pas (mkdir -p).