# Directives pour les pull requests
Sâapplique Ă : Tous les contributeurs soumettant des pull requests aux dĂ©pĂŽts de lâorganisation GitHub Mojaloop (opens new window). Ces directives complĂštent le guide des contributeurs, la politique dâusage responsable de lâIA et le processus dâingĂ©nierie produit.
Divulgation IA Ce document inclut du contenu gĂ©nĂ©rĂ© avec lâassistance de Claude Sonnet 4.6. Lâensemble du contenu a Ă©tĂ© relu et validĂ© par lâauteur.
# 1. Avant dâouvrir une PR
# 1.1 Commencer par un ticket GitHub
Chaque PR doit ĂȘtre liĂ©e Ă un ticket GitHub. Nâouvrez pas de PR sans ticket.
- Si aucun ticket pertinent nâexiste, crĂ©ez-le dâabord et laissez le temps au triage ou Ă la discussion avant de commencer lâimplĂ©mentation â en particulier pour les changements non triviaux.
- Les tickets sont lâespace principal pour la discussion de conception, les dĂ©cisions de pĂ©rimĂštre et lâalignement avec les mainteneurs. Utilisez-les.
# 1.2 Discuter dâabord des changements consĂ©quents ou critiques
Si votre changement touche des interfaces partagĂ©es, la logique de rĂšglement ou de compensation, les API centrales ou du code sensible Ă la sĂ©curitĂ©, consultez le processus de changement consĂ©quent (opens new window) et le processus de changement critique (opens new window) avant dâĂ©crire du code. Soumettre un changement architectural majeur en PR surprise entraĂźnera son renvoi pour discussion prĂ©alable.
# 2. Titres des pull requests
Mojaloop utilise Conventional Commits (opens new window) pour lâoutillage automatisĂ© de releases et dĂ©ploiements. Le titre de votre pull request doit respecter la spĂ©cification des commits conventionnels pour passer les contrĂŽles CI/CD dans CircleCI.
Avec Conventional Commits et le versionnement sĂ©mantique, une nouvelle version peut ĂȘtre publiĂ©e automatiquement pour un composant, avec incrĂ©ment MAJOR, MINOR ou correctif selon les titres de PR, et gĂ©nĂ©ration de changelogs dĂ©taillĂ©s. (Voir cet exemple (opens new window) de changelog auto-gĂ©nĂ©rĂ©.)
Note : Lors de la fusion (avec squash), GitHub utilise le titre de la PR comme message de commit. Pour indiquer un changement rupturiste, utilisez le format avec
!: « Si inclus dans le prĂ©fixe type/scope, les changements rupturistes DOIVENT ĂȘtre indiquĂ©s par un ! immĂ©diatement avant les deux-points. Si ! est utilisĂ©, BREAKING CHANGE: peut ĂȘtre omis du pied de page, et la description du commit DOIT dĂ©crire le changement rupturiste. »
# Exemples de bons titres de PR
- feat(api): add ability to handle
PUT /thirdpartyRequests/trasactions/{ID}endpoint - fix: update outdated node modules
- feat(models)!: change database schema
- chore: tidy up readme
# 3. Garder les PR petites et ciblées
Câest la chose la plus importante que vous puissiez faire pour aider les reviewers et les mainteneurs.
# 3.1 Une PR, un objectif
Une pull request doit faire exactement une chose : corriger un bug, implémenter une fonctionnalité ou traiter un sujet précis. Les PR à objectifs multiples sont difficiles à revoir, difficiles à annuler en cas de problÚme et créent un historique de commits ambigu.
Ne combinez pas :
- Un correctif de bug et un refactoring
- Une fonctionnalité et un nettoyage de tests sans lien
- Des mises à jour de dépendances et des changements fonctionnels
- Des changements dâespacement et des changements fonctionnels
Si vous vous surprenez Ă Ă©crire « et aussi⊠» dans la description de la PR, câest le signe quâil faut la scinder.
Notez que des changements massifs dâespacement, par exemple une rĂ©indentation, peuvent masquer lâobjectif dâun changement sous-jacent. SĂ©parez les grands changements dâespacement dans leurs propres PR pour faciliter la revue.
# 3.2 Viser une taille de diff appropriée
Il nâexiste pas de limite stricte en nombre de lignes, mais voici un guide pratique :
| Taille du diff | Attente |
|---|---|
| < 200 lignes | IdĂ©al. Peut ĂȘtre revu rapidement et en profondeur. |
| 200 â 500 lignes | Acceptable pour des changements bien cadrĂ©s et bien contextualisĂ©s. |
| 500 â 1000 lignes | NĂ©cessite une justification solide. Envisagez de scinder. |
| > 1000 lignes | Sera probablement renvoyĂ©e pour ĂȘtre dĂ©coupĂ©e, sauf si le changement est intrinsĂšquement atomique (par ex. un fichier gĂ©nĂ©rĂ©, un renommage massif). |
Lorsquâun changement important est rĂ©ellement atomique â par exemple une migration de schĂ©ma, une sortie de gĂ©nĂ©ration de code ou un renommage en masse â ajoutez une note expliquant pourquoi il ne peut pas ĂȘtre scindĂ©.
# 3.3 Séparer le refactoring des changements fonctionnels
Si vous devez refactoriser du code avant dâapporter un changement fonctionnel, soumettez dâabord le refactoring dans sa propre PR. MĂ©langer refactoring et changements de comportement rend difficile la vĂ©rification quâaucune rĂ©gression nâa Ă©tĂ© introduite.
# 3.4 Garder des commits propres
Squashez ou rĂ©organisez vos commits avant dâouvrir la PR afin que chaque commit reprĂ©sente une Ă©tape logique et autonome. Ăvitez les commits du type fix typo, wip ou try again. Un historique de commits propre aide les reviewers et rend git bisect utile.
# 4. Rédiger une bonne description de PR
Une description bien rĂ©digĂ©e nâest pas optionnelle â elle fait partie de votre contribution. Les reviewers ne doivent pas avoir Ă reconstruire votre intention Ă partir du diff.
Votre description de PR doit inclure :
# 4.1 Quoi et pourquoi
Expliquez ce que fait le changement et pourquoi il est nĂ©cessaire. Liez le ticket GitHub pertinent. Ne vous contentez pas de reprendre le titre du ticket â ajoutez le contexte dont un reviewer a besoin pour Ă©valuer vos choix dâimplĂ©mentation.
# 4.2 Comment tester
Décrivez comment le reviewer peut vérifier que le changement fonctionne correctement. Incluez :
- Les étapes pour reproduire le problÚme (pour les correctifs de bug)
- Comment exercer le nouveau comportement (pour les fonctionnalités)
- Des indications vers les tests automatisés pertinents
Si un changement ne peut pas ĂȘtre testĂ© automatiquement, expliquez pourquoi et dĂ©crivez la vĂ©rification manuelle que vous avez effectuĂ©e.
# 4.3 Changements rupturistes
Si votre PR introduit un changement rupturiste â sur une API, une interface de configuration, un schĂ©ma de base de donnĂ©es ou un contrat partagĂ© â signalez-le explicitement et de façon visible en tĂȘte de la description. Les changements rupturistes nĂ©cessitent une revue supplĂ©mentaire et peuvent devoir suivre le processus de changement consĂ©quent (opens new window).
# 4.4 Divulgation de lâassistance IA (voir section 5)
Si des outils dâIA ont Ă©tĂ© utilisĂ©s pour produire une partie de la PR â code, tests ou description de PR â cela doit ĂȘtre divulguĂ© dans la description de la PR. Voir la section 5 pour le format requis.
# 5. Assistance IA : attribution et responsabilité
La politique IA Mojaloop (opens new window) sâapplique Ă toutes les contributions par PR. Les rĂšgles suivantes en distillent les exigences concrĂštes pour les PR.
# 5.1 La divulgation est obligatoire
Si un outil dâIA (y compris, sans sây limiter, GitHub Copilot, ChatGPT, Claude, Gemini, Cursor ou Ă©quivalent) a assistĂ© la production de toute partie de votre PR â y compris le code, les tests, les messages de commit ou la description de PR elle-mĂȘme â vous devez inclure le bloc de divulgation suivant dans la description de votre PR :
**Divulgation de lâassistance IA**
Des outils dâIA ont Ă©tĂ© utilisĂ©s pour produire une partie de cette contribution.
Outils utilisés : [liste des outils et versions si connues]
PĂ©rimĂštre : [brĂšve description de ce qui a Ă©tĂ© assistĂ© par lâIA, par ex. « Ă©chafaudage de tests unitaires », « implĂ©mentation initiale de la fonction X », « brouillon de description de PR »]
Lâensemble du contenu gĂ©nĂ©rĂ© par lâIA a Ă©tĂ© relu, compris et validĂ© par lâauteur.
Tous les fichiers de code de lâorganisation GitHub Mojaloop doivent inclure un en-tĂȘte de licence et de contributeurs. Assurez-vous que les fichiers que vous modifiez contiennent votre nom et votre adresse e-mail actuelle dans la liste. Si vous avez utilisĂ© lâIA, vous devez inclure les dĂ©tails des outils utilisĂ©s Ă cĂŽtĂ© de votre nom et de votre e-mail, ainsi :
- {votre nom} <{votre e-mail}> [Assisté par {nom du modÚle} {version du modÚle}]
Par exemple :
/*****
License
--------------
Copyright © 2026 Mojaloop Foundation
The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0
(the "License") and you may not use these files except in compliance with the [License](http://www.apache.org/licenses/LICENSE-2.0).
You may obtain a copy of the License at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the [License](http://www.apache.org/licenses/LICENSE-2.0).
Contributors
--------------
This is the official list of the Mojaloop project contributors for this file.
Names of the original copyright holders (individuals or organizations)
should be listed with a '*' in the first column. People who have
contributed from an organization can be listed under the organization
that actually holds the copyright for their contributions (see the
Mojaloop Foundation organization for an example). Those individuals should have
their names indented and be marked with a '-'. Email address can be added
optionally within square brackets <email>.
* Mojaloop Foundation
- James Bush <jbush@mojaloop.io> [Assisted by Claude Sonnet 4.6]
--------------
******/
Omettre cette divulgation lorsque lâIA a Ă©tĂ© utilisĂ©e constitue une violation de la politique IA et entraĂźnera le renvoi de la PR.
# 5.2 Vous ĂȘtes entiĂšrement responsable de tout le code soumis
La divulgation nâest pas une dĂ©charge de responsabilitĂ©. Que lâassistance IA ait Ă©tĂ© utilisĂ©e ou non, lâauteur humain de la PR est entiĂšrement responsable de :
- La justesse de la logique
- La sĂ©curitĂ© de lâimplĂ©mentation
- La cohérence architecturale avec les normes Mojaloop
- La conformitĂ© aux licences â vous ne devez pas soumettre de code gĂ©nĂ©rĂ© par lâIA issu de donnĂ©es dâentraĂźnement sous licence non autorisĂ©e
- La maintenabilité à long terme de ce que vous avez introduit
« LâIA lâa Ă©crit » nâest pas une rĂ©ponse acceptable Ă un commentaire de revue. Si vous ne pouvez pas expliquer et dĂ©fendre chaque partie de votre PR, elle nâest pas prĂȘte Ă ĂȘtre soumise.
# 5.3 LâIA ne doit pas se substituer au jugement humain
Les outils dâIA ne peuvent pas ĂȘtre utilisĂ©s pour prendre ou dĂ©lĂ©guer des dĂ©cisions architecturales ou de conception. Lorsquâun outil dâIA propose une approche qui sâĂ©carte des motifs ou invariants Mojaloop Ă©tablis, le contributeur humain est responsable de le reconnaĂźtre et de le corriger avant la soumission.
# 5.4 Les soumissions par agents automatisés sont interdites
Les PR ne peuvent pas ĂȘtre soumises par des agents IA entiĂšrement autonomes. Toutes les PR doivent ĂȘtre ouvertes par un contributeur humain. La seule exception concerne lâautomatisation GitHub native officiellement approuvĂ©e dĂ©jĂ intĂ©grĂ©e aux workflows Mojaloop (par ex. Dependabot, Snyk, outillage automatisĂ© de maintenance de la Mojaloop Foundation). Les soumissions par agents automatisĂ©s seront rejetĂ©es sans revue.
# 6. Checklist de qualité du code
Avant de marquer une PR prĂȘte pour revue, confirmez les points suivants :
- La PR est liée à un ticket GitHub avec un mot-clé de clÎture
- La PR fait exactement une chose ; les changements sans lien ont été retirés ou scindés
- Tous les tests automatisés passent localement
- Le nouveau comportement est couvert par des tests
- Aucune nouvelle erreur ou alerte de linting nâa Ă©tĂ© introduite
- Les changements de dépendances sont justifiés et minimaux
- Tout changement rupturiste est clairement signalé
- La description de la PR explique quoi, pourquoi et comment tester
- La divulgation de lâassistance IA est incluse le cas Ă©chĂ©ant (voir section 5.1)
- Vous avez lu, compris et pouvez défendre chaque ligne du diff
# 7. Attentes envers les reviewers
Les reviewers sont des bénévoles qui donnent de leur temps. Aidez-les à vous aider.
- Répondez rapidement aux commentaires de revue. Si vous avez besoin de temps, dites-le.
- Nâajoutez pas de changements sans lien Ă une PR dĂ©jĂ en cours de revue sans les signaler.
- Ne rebasez pas et ne force-push pas une PR qui fait lâobjet de commentaires de revue actifs â cela perturbe le contexte du reviewer. Coordonnez-vous dâabord.
- Si un reviewer vous demande de scinder une PR, faites-le. Ce nâest pas une critique ; câest ainsi que Mojaloop maintient un historique revueable et bisectable.
- Une PR sans activitĂ© pendant 30 jours peut ĂȘtre fermĂ©e par un mainteneur. Elle peut ĂȘtre rouverte lorsque vous ĂȘtes prĂȘt Ă continuer.
# 8. PR brouillon
Utilisez la fonctionnalitĂ© GitHub Draft PR pour les travaux en cours. Cela indique aux mainteneurs et reviewers quâun retour sur lâorientation gĂ©nĂ©rale est le bienvenu, mais quâune revue complĂšte nâest pas encore demandĂ©e. Passez à « Ready for Review » uniquement lorsque tous les Ă©lĂ©ments de la checklist ci-dessus sont satisfaits.
# 9. Correctifs urgents et changements critiques
Pour les correctifs de sĂ©curitĂ© critiques ou les bugs bloquants en production, suivez le processus de changement critique (opens new window). MĂȘme sous la pression du temps, lâexigence de divulgation IA et la checklist de qualitĂ© du code sâappliquent toujours. Une revue rapide nâest pas une autorisation de les contourner.
Pour toute question sur ces directives, publiez sur le canal Slack du workstream concerné ou ouvrez un ticket GitHub contre le dépÎt documentation (opens new window).
