# 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).