
Andrew Hanna

Andrew Hanna

Kort gezegd: een merge-conflict is twee concurrerende wijzigingen aan hetzelfde deel van een bestand die versiebeheer niet zelf kan verzoenen. In Salesforce zijn de meeste niet echt: het is XML-volgordelawaai dat een metadatabewuste merge zonder tussenkomst hoort af te handelen. De interessante vraag is wat er gebeurt met de conflicten die dat filter overleven, en dat is de eerste plek in een releasepijplijn waar AI zich echt terugverdient.
Twee structurele redenen, en beide zijn niemands schuld.
Ten eerste zijn de bestanden enorm. Een Profile beschrijft rechten over de hele org, dus twee developers die twee ongerelateerde objecten aanraken kunnen aangrenzende wijzigingen in een bestand veroorzaken. Profiles, permission sets, page layouts, Lightning pages en custom labels zijn de gebruikelijke verdachten.
Ten tweede is de volgorde van elementen in die bestanden niet stabiel. Haal hetzelfde Profile twee keer op en de lijstelementen kunnen in een andere volgorde terugkomen. Git ziet herschikte regels en noemt dat een wijziging, ook als de rechten qua betekenis identiek zijn. Zo besteedt een team een donderdagmiddag aan een conflict dat niet bestaat.
Dit onderscheid is het hele artikel, dus laten we het expliciet maken.
Deze twee als een probleem behandelen is precies waarom conflicttooling een slechte naam krijgt. Ze vragen om verschillende machinerie.
Een metadatabewuste merge parseert de XML naar elementen met stabiele sleutels en merget element voor element in plaats van regel voor regel. De open source Salesforce git merge driver is een goede publieke referentie voor die aanpak: hij identificeert unieke sleutels binnen metadata-elementen, merget losse entries in plaats van hele arrays, handelt deterministische herordening af voor echt geordende types zoals picklist value sets en record type-toewijzingen, en valt pas terug op een ruw conflict als hij een sleutel niet herkent. Commerciele tools doen hetzelfde; Gearset beschrijft een metadatabewust semantisch merge-algoritme om precies deze reden.
Dit is geen AI en moet dat ook niet zijn. Het is parsen, en parsen hoort deterministisch, snel en saai te zijn. Goed uitgevoerd verwijdert het de grote meerderheid van Salesforce-conflicten voordat een mens ze ziet.
Wat het niet kan, is beslissen. Als beide branches dezelfde sleutel op verschillende waarden zetten, weigert een correcte deterministische merger, en dat weigeren is terecht.
Precies daar, bij die weigering. Conflictoplossing is een opvallend goede eerste klus voor AI in delivery, om vier redenen.
Vergelijk dat met een model Apex laten schrijven, waar de input onbegrensd is, de context dubbelzinnig en verificatie het dure deel. Conflictoplossing heeft de tegenovergestelde vorm, en daarom is het de verstandige plek om te beginnen.
Ja, en snel. Salesforce' eigen DevOps Center levert nu conflictoplossing via MCP-tools, waarbij large language models conflicten analyseren, ze in natuurlijke taal uitleggen en oplossingen voorstellen vanuit de IDE. Als de platformleverancier LLM-conflictanalyse in de doos stopt, is de discussie of dit in een pijplijn hoort voorbij.
Serpent benadert het vanuit dezelfde richting. Het is de enige
native MCP-server in Salesforce DevOps, met
resolve_metadata_conflict naast plan_deploy,
create_pull_request en trigger_pipeline, dus dezelfde
oplossing is aan te sturen vanuit Claude, Cursor, Windsurf of Agentforce, met
preflight-checks en verplichte menselijke goedkeuring. AI-codereview draait op elk
plan, ook het gratis plan, omdat de review en het conflict hetzelfde gesprek over
dezelfde wijziging zijn.
Mag AI Salesforce-conflicten automatisch mergen zonder review?
Nee. Voorstellen en uitleggen, daarna menselijke goedkeuring verplichten, zeker bij Profiles en permission sets waar een slechte merge de toegang van elke toegewezen gebruiker verandert.
Maakt semantisch mergen AI overbodig?
Integendeel. Het verwijdert de valse conflicten, dus wat overblijft zijn precies de afwegingen waar extra context helpt.
Waarom zijn Profiles de grootste boosdoeners?
Het zijn enkele enorme bestanden over de hele org, dus ongerelateerd werk landt op aangrenzende regels, en hun lijstvolgorde is niet gegarandeerd stabiel tussen ophaalacties.
Welke context heeft een AI-resolver nodig?
De driewegdiff, het gekoppelde ticket, de commitberichten en de staat van de doel-org. Zonder die gokt hij zelfverzekerder dan een mens zou doen.
Hoe weten we dat een oplossing klopte?
Valideer het samengevoegde resultaat tegen de doel-org voordat de merge landt, en houd een auditrecord bij van wat is voorgesteld en wie het goedkeurde.
Vrijblijvend.