
Andrew Hanna

Andrew Hanna

En bref : un conflit de fusion, ce sont deux modifications concurrentes de la même partie d'un fichier que le gestionnaire de versions ne sait pas réconcilier seul. Sur Salesforce, la plupart ne sont pas réels : c'est du bruit d'ordonnancement XML qu'un merge conscient des métadonnées devrait régler sans déranger personne. La vraie question porte sur les conflits qui survivent à ce filtre, et c'est le premier endroit d'un pipeline de livraison où l'IA justifie vraiment sa place.
Deux raisons structurelles, et ce n'est la faute de personne.
D'abord, les fichiers sont énormes. Un Profile décrit les permissions de toute l'org, donc deux développeurs travaillant sur deux objets sans rapport peuvent produire des modifications adjacentes dans un seul fichier. Profiles, permission sets, page layouts, pages Lightning et custom labels sont les suspects habituels.
Ensuite, l'ordre des éléments dans ces fichiers n'est pas stable. Récupérez deux fois le même Profile et les entrées de liste peuvent revenir dans un autre ordre. Git voit des lignes réordonnées et appelle cela un changement, même quand le sens des permissions est identique. C'est ainsi qu'une équipe passe un jeudi après-midi à résoudre un conflit qui n'existe pas.
Cette distinction est tout l'article, autant l'énoncer clairement.
Traiter les deux comme un seul problème, voilà pourquoi l'outillage de conflits à mauvaise réputation. Il faut deux mécaniques distinctes.
Un merge conscient des métadonnées analyse le XML en éléments dotés de clés stables et fusionne élément par élément au lieu de ligne par ligne. Le merge driver Git pour Salesforce en open source illustre bien l'approche : il identifie des clés uniques dans les éléments de métadonnées, fusionne les entrées individuelles plutôt que des tableaux entiers, gère un réordonnancement déterministe pour les types réellement ordonnés comme les value sets de listes de sélection et les affectations de types d'enregistrement, et ne retombe sur un conflit brut que lorsqu'il ne reconnaît pas une clé. Les outils commerciaux font de même ; Gearset décrit un algorithme de merge sémantique conscient des métadonnées exactement pour cette raison.
Ce n'est pas de l'IA et cela ne doit pas l'être. C'est du parsing, et le parsing doit rester déterministe, rapide et ennuyeux. Bien fait, il élimine la grande majorité des conflits Salesforce avant qu'un humain les voie.
Ce qu'il ne peut pas faire, c'est décider. Quand les deux branches donnent à la même clé des valeurs différentes, un fusionneur déterministe correct refuse, et il a raison de refuser.
Exactement là, sur ce refus. La résolution de conflits est un excellent premier travail pour l'IA en livraison, pour quatre raisons.
Comparez avec demander à un modèle d'écrire de l'Apex : entrée non bornée, contexte ambigu, vérification coûteuse. La résolution de conflits a la forme inverse, d'où l'intérêt de commencer par là.
Oui, et vite. Le DevOps Center de Salesforce propose désormais la résolution de conflits via des outils MCP, ou de grands modèles de langage analysent les conflits, les expliquent en langage naturel et suggèrent des solutions depuis l'IDE. Quand l'éditeur de la plateforme met l'analyse de conflits par LLM dans la boîte, le débat sur sa place dans un pipeline est clos.
Serpent aborde le sujet par le même angle. C'est le seul
serveur MCP natif du DevOps Salesforce, avec
resolve_metadata_conflict aux côtés de plan_deploy,
create_pull_request et trigger_pipeline, si bien que la même
résolution se pilote depuis Claude, Cursor, Windsurf ou Agentforce, avec contrôles
préalables et approbation humaine obligatoire. La revue de code par IA tourne sur tous
les plans, y compris le gratuit, parce que la revue et le conflit sont la même
conversation sur le même changement.
L'IA doit-elle fusionner automatiquement sans relecture ?
Non. Proposer et expliquer, puis exiger une approbation humaine, en particulier sur les Profiles et permission sets où une mauvaise fusion modifie l'accès de chaque utilisateur affecté.
Le merge sémantique rend-il l'IA inutile ?
Au contraire. Il élimine les faux conflits, donc il ne reste que les arbitrages ou du contexte supplémentaire aide.
Pourquoi les Profiles sont-ils les pires ?
Ce sont d'énormes fichiers uniques couvrant toute l'org, donc des travaux sans rapport atterrissent sur des lignes voisines, et l'ordre de leurs listes n'est pas garanti stable entre deux récupérations.
De quel contexte a besoin un résolveur IA ?
Le diff a trois voies, le ticket lié, les messages de commit et l'état de l'org cible. Sans cela, il devine avec plus d'assurance qu'un humain.
Comment savoir qu'une résolution était correcte ?
Validez le résultat fusionné contre l'org cible avant que la fusion n'atterrisse, et gardez une trace de ce qui a été proposé et approuvé.
Sans engagement.