<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://about.gitlab.com/blog</id>
    <title>GitLab</title>
    <updated>2026-08-14T19:14:06.062Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>The GitLab Team</name>
    </author>
    <link rel="alternate" href="https://about.gitlab.com/blog"/>
    <link rel="self" href="https://about.gitlab.com/fr-fr/atom.xml"/>
    <subtitle>GitLab Blog RSS feed</subtitle>
    <icon>https://about.gitlab.com/favicon.ico</icon>
    <rights>All rights reserved 2026</rights>
    <entry>
        <title type="html"><![CDATA[Moderniser Java avec Cursor et GitLab]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/modernize-java-with-cursor-and-gitlab/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/modernize-java-with-cursor-and-gitlab/"/>
        <updated>2026-08-12T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>« Moderniser Java 8 vers Java 21 » peut sembler une tâche unique, mais ce n&#39;est pas le cas. Cela concerne à la fois le build, l&#39;environnement d&#39;exécution, les dépendances, les API, la concurrence, les tests, les conteneurs et le comportement en production, souvent simultanément. Si vous demandez à un agent d&#39;accomplir tout cela en un seul prompt, vous obtiendrez une merge request gigantesque que personne ne pourra relire sans risque.</p><p>Cursor, un agent de codage d&#39;IA, excelle dans la partie ciblée de ce problème. Donnez-lui un test en échec ou un problème bien délimité, et il pourra examiner l&#39;implémentation, expliquer ce qui s&#39;est mal déroulé, proposer un correctif et exécuter les tests sans sortir du workflow de développement. Ce qu&#39;il ne peut toutefois pas déterminer de lui-même, c&#39;est ce que « sûr » signifie dans le cadre d&#39;une migration en plusieurs étapes.</p><p>C&#39;est là qu&#39;intervient GitLab, avec <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> : il orchestre les workflows d&#39;IA dans le reste du cycle de vie logiciel et est conçu pour certifier le travail des agents de codage. En raison de la hiérarchie des tickets avec les epics, le scénario est durable et vérifiable. Le serveur Model Context Protocol (<a href="https://about.gitlab.com/fr-fr/topics/ai/model-context-protocol/" rel="">MCP</a>) de GitLab apporte le contexte du cycle de développement logiciel dans Cursor. Le <a href="https://about.gitlab.com/fr-fr/topics/ci-cd/" rel="" title="Qu&#39;est-ce que le CI/CD ?">CI/CD</a>, le scan de sécurité, la revue de code, l&#39;analyse d&#39;impact et un test inter-services nous fournissent les preuves nécessaires avant de modifier le comportement en production.</p><p>Dans ce tutoriel, nous allons passer en revue trois cas d&#39;utilisation de Cursor et de GitLab :</p><ol><li>Corriger un test en échec de bout en bout avec Cursor</li><li>Préparer des contrôles de qualité pour la modernisation de Java 8 vers Java 21</li><li>Moderniser la gestion des connexions HTTP avec Java 21</li></ol><p>La progression est essentielle : commencez à petite échelle, ajoutez le contexte du projet, puis modernisez un périmètre. Cursor avance rapidement à l’intérieur de ce périmètre. Le flow Code Review, le flow Developer, le CI/CD, les approbations des propriétaires du code et l&#39;analyse d&#39;impact maintiennent cette vitesse en toute sécurité. Ce ne sont pas des points de contrôle facultatifs, mais des mécanismes qui garantissent que chaque merge request créée par un agent respecte les mêmes normes que toutes les autres.</p><p>Nous utilisons le <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector" rel="">collecteur de métriques HTTP Java de la plateforme Tanuki IoT</a> pour ces trois cas d&#39;utilisation. Il vérifie les points de terminaison HTTP, enregistre des métriques telles que le statut de réponse et les délais, et envoie les relevés à son <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/backend/rust-metrics-store" rel="">backend de métriques Rust</a>. Nous obtenons ainsi un périmètre d&#39;application visible à moderniser et un véritable contrat backend à vérifier. Il y a quelque temps, nous avons développé le backend Rust dans le <a href="https://about.gitlab.com/fr-fr/blog/fix-bugs-with-codex-and-gitlab/" rel="">tutoriel Codex et GitLab</a>, et il s&#39;intègre désormais à l&#39;architecture de production :</p><pre className="language-mermaid shiki shiki-themes github-light" code="flowchart LR
  subgraph sources[&quot;Sources de métriques HTTP&quot;]
    direction TB
    health[&quot;État des points de terminaison&quot;]
    maintenance[&quot;Maintenance des points de terminaison&quot;]
  end

  java[&quot;Collecteur de métriques HTTP Java&quot;]
  rust[(&quot;Backend de stockage des métriques Rust&quot;)]

  java --&gt;|&quot;GET&quot;| health
  java --&gt;|&quot;GET&quot;| maintenance
  java --&gt;|&quot;POST/api/metrics&quot;| rust
  rust --&gt;|&quot;Réponse HTTP&quot;| java

  classDef source fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#0f172a
  classDef focus fill:#dcfce7,stroke:#16a34a,stroke-width:3px,color:#0f172a
  classDef backend fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0f172a

  class health,maintenance source
  class java focus
  class rust backend
" language="mermaid" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">flowchart LR
</span></span><span class="line" line="2"><span class="sgsFI">  subgraph sources[&quot;Sources de métriques HTTP&quot;]
</span></span><span class="line" line="3"><span class="sgsFI">    direction TB
</span></span><span class="line" line="4"><span class="sgsFI">    health[&quot;État des points de terminaison&quot;]
</span></span><span class="line" line="5"><span class="sgsFI">    maintenance[&quot;Maintenance des points de terminaison&quot;]
</span></span><span class="line" line="6"><span class="sgsFI">  end
</span></span><span class="line" line="7"><span emptyLinePlaceholder>
</span></span><span class="line" line="8"><span class="sgsFI">  java[&quot;Collecteur de métriques HTTP Java&quot;]
</span></span><span class="line" line="9"><span class="sgsFI">  rust[(&quot;Backend de stockage des métriques Rust&quot;)]
</span></span><span class="line" line="10"><span emptyLinePlaceholder>
</span></span><span class="line" line="11"><span class="sgsFI">  java --&gt;|&quot;GET&quot;| health
</span></span><span class="line" line="12"><span class="sgsFI">  java --&gt;|&quot;GET&quot;| maintenance
</span></span><span class="line" line="13"><span class="sgsFI">  java --&gt;|&quot;POST/api/metrics&quot;| rust
</span></span><span class="line" line="14"><span class="sgsFI">  rust --&gt;|&quot;Réponse HTTP&quot;| java
</span></span><span class="line" line="15"><span emptyLinePlaceholder>
</span></span><span class="line" line="16"><span class="sgsFI">  classDef source fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#0f172a
</span></span><span class="line" line="17"><span class="sgsFI">  classDef focus fill:#dcfce7,stroke:#16a34a,stroke-width:3px,color:#0f172a
</span></span><span class="line" line="18"><span class="sgsFI">  classDef backend fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0f172a
</span></span><span class="line" line="19"><span emptyLinePlaceholder>
</span></span><span class="line" line="20"><span class="sgsFI">  class health,maintenance source
</span></span><span class="line" line="21"><span class="sgsFI">  class java focus
</span></span><span class="line" line="22"><span class="sgsFI">  class rust backend
</span></span></code></pre><h2 id="prérequis">Prérequis</h2><ol><li><a href="https://www.cursor.com/" rel="">Cursor</a> doit être installé et configuré. Nous utiliserons l&#39;IDE Cursor dans ce tutoriel.</li><li>Un projet GitLab contenant le code source du collecteur Java, les tickets et les éléments de travail de modernisation. Vous pouvez utiliser le <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector" rel="">collecteur de métriques HTTP Java de la plateforme Tanuki IoT</a>.</li><li>Java 8 pour le premier cas d&#39;utilisation et Java 21 pour les travaux de modernisation.</li><li>Maven, <a href="https://about.gitlab.com/fr-fr/blog/what-is-docker-comprehensive-guide/" rel="" title="Qu&#39;est-ce que Docker ?">Docker</a> et Docker Compose pour les builds locaux et les tests fonctionnels.</li><li>Le <a href="https://docs.gitlab.com/user/model_context_protocol/mcp_server/" rel="">serveur MCP de GitLab</a> activé sur votre instance GitLab ou votre groupe principal.</li><li><a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/code_review/" rel="">Le flow GitLab Duo Code Review</a>, <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/developer/" rel="">le flow Developer</a> et un flow personnalisé pour l&#39;analyse d&#39;impact des changements majeurs activés pour le projet du collecteur Java. Ces flows appliquent des garde-fous au projet pour chaque merge request créée par l&#39;agent.</li></ol><h3 id="préparer-le-projet-gitlab">Préparer le projet GitLab</h3><p>Si vous souhaitez reproduire ce workflow dans votre propre environnement, commencez par importer et cloner le projet, puis ouvrez-le dans Cursor :</p><ol><li>Importez le <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector" rel="">collecteur de métriques HTTP Java de la plateforme Tanuki IoT</a> dans votre environnement GitLab avec tous les tickets ouverts.</li><li>Clonez le projet dans votre environnement local et accédez-y.</li><li>Ouvrez le projet dans Cursor.</li></ol><pre className="language-shell shiki shiki-themes github-light" code="git clone https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector.git
cd java-http-metrics-collector

cursor .
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">git</span><span class="sYBdl"> clone</span><span class="sYBdl"> https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector.git
</span></span><span class="line" line="2"><span class="sYu0t">cd</span><span class="sYBdl"> java-http-metrics-collector
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span class="s7eDp">cursor</span><span class="sYBdl"> .
</span></span></code></pre><p>Le projet comprend un fichier <code>AGENTS.md</code> contenant des instructions relatives au dépôt et des commandes Maven. Cursor peut utiliser ces instructions locales pour comprendre l&#39;organisation du projet et la manière dont les modifications doivent être testées.</p><p><img alt="Le collecteur de métriques HTTP Java ouvert dans Cursor avec les instructions AGENTS.md" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733478/l4hqhlzxekmhobu2qg0v.png" /></p><h2 id="corriger-un-test-en-échec-de-bout-en-bout-avec-cursor">Corriger un test en échec de bout en bout avec Cursor</h2><p>Le collecteur permet aux utilisateurs de configurer le code de statut HTTP qu&#39;ils attendent d&#39;un point de terminaison. Toutefois, l&#39;implémentation traite chaque réponse <code>2xx</code> comme réussie, et les erreurs <code>503</code> échouent systématiquement, même lorsqu&#39;elles sont configurées comme prévu.</p><p>Le test de bout en bout expose déjà cette incohérence, mais le job CI/CD est autorisé à échouer. Ce qui a transformé un signal utile en bruit de fond accepté.</p><p><img alt="Le test de bout en bout en échec et son job CI/CD autorisé à échouer" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733536/uaxqalqoceujyja7usmv.png" /></p><h3 id="reproduire-et-corriger-avec-cursor">Reproduire et corriger avec Cursor</h3><p>Le problème peut être reproduit localement. Ouvrez l&#39;IDE Cursor avec un nouveau chat et commencez par décrire le problème observable directement dans le prompt :</p><pre className="language-markdown shiki shiki-themes github-light" code="Can you help me fix the end-to-end tests in this project? Please create an analysis first, then fix it, and run the tests again.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Can you help me fix the end-to-end tests in this project? Please create an analysis first, then fix it, and run the tests again.
</span></span></code></pre><p>Cursor commence par retracer la configuration du point de terminaison dans <code>HttpCollector</code> et le test de bout en bout en échec, puis identifie la cause racine.</p><p><img alt="Cursor analyse le problème et la cause racine" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733605/ojz2pzcftwjfcfscjtwg.png" /></p><p>Une fois les tests ciblés et la suite de tests Maven complète réussis, créez une branche et une merge request. Le job de bout en bout, auparavant autorisé à échouer, peut devenir obligatoire lorsqu&#39;il est déterministe et qu’il passe avec succès.</p><pre className="language-markdown shiki shiki-themes github-light" code="Can you create a git branch and merge request?
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Can you create a git branch and merge request?
</span></span></code></pre><h3 id="réviser-et-fusionner">Réviser et fusionner</h3><p>La merge request déclenche automatiquement le build et les tests CI/CD, ainsi que le scan de sécurité.</p><p><img alt="Merge request avec les tests de bout en bout corrigés" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733663/koz3yb3zq5ewwl6vrbgk.png" /></p><p><a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/code_review/" rel="">GitLab Duo Code Review</a> passe ensuite en revue la modification ciblée en utilisant les instructions de revue spécifiques au projet Java.</p><p><img alt="Retour de GitLab Duo Code Review" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733717/cjxeoecb4fa7yrvy7i90.png" /></p><p>Lorsque la revue identifie un problème concret, nous le traitons avec le flow Developer avant de fusionner. C&#39;est précisément l&#39;objectif : le flow Code Review garantit que chaque merge request créée par un agent répond aux mêmes exigences que n&#39;importe quelle autre merge request, quelle que soit la rapidité avec laquelle Cursor l&#39;a produite. La merge request reste la surface de collaboration et de décision.</p><p><img alt="Le flow Developer traitant le retour de revue" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733848/wehjrbkhhyhze8vtkaby.png" /></p><p>Le correctif nous fournit une référence de comportement. Nous avons corrigé un véritable bogue sans le mélanger avec une migration de l&#39;environnement d&#39;exécution, et les tests protègent désormais le contrat de statut attendu pendant les travaux de modernisation qui suivront.</p><p>Regardez cette vidéo pour découvrir comment Cursor analyse et corrige les tests de bout en bout attendus :</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/vpPt8TICiZY" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="préparer-les-murs-qualité-pour-la-modernisation-vers-java-21">Préparer les murs qualité pour la modernisation vers Java 21</h2><p>Le premier correctif a fonctionné avec le seul contexte du dépôt. La prochaine tâche est bien plus ambitieuse : moderniser le collecteur de Java 8 vers Java 21.</p><p>Ce projet dispose déjà d&#39;un contexte de planification dans l&#39;<a href="https://gitlab.com/groups/gitlab-da/demo-environments/tanuki-iot-platform/-/work_items/13" rel="">epic de modernisation Java</a> : éléments de travail enfants, discussions d&#39;équipe, recherches avec merge requests, historique des pipelines, dépendances et résultats de sécurité. Ces détails ne se trouvent pas dans la copie locale. Plutôt que de tous les copier dans un seul prompt gigantesque, nous pouvons intégrer le contexte de GitLab dans Cursor grâce au MCP.</p><h3 id="configurer-le-serveur-mcp-de-gitlab-dans-cursor">Configurer le serveur MCP de GitLab dans Cursor</h3><p>Assurez-vous que le serveur MCP de GitLab est <a href="https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#prerequisites" rel="">activé</a> sur votre instance ou votre groupe principal. Cursor utilise le transport HTTP pour se connecter directement sans dépendances supplémentaires.</p><p>Pour <a href="https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#connect-cursor-to-the-gitlab-mcp-server" rel="">connecter Cursor au serveur MCP de GitLab</a> :</p><ol><li>Dans Cursor, accédez à <strong>Settings &gt; Cursor Settings &gt; Tools &amp; MCP</strong>.</li><li>Sous <strong>Installed MCP Servers</strong>, sélectionnez <strong>New MCP Server</strong>.</li><li>Ajoutez la définition ci-dessous à la clé <code>mcpServers</code> dans le fichier <code>mcp.json</code> ouvert. Pour GitLab.com, remplacez <code>&lt;gitlab.example.com&gt;</code> par <code>gitlab.com</code>. Pour GitLab Self-Managed ou GitLab Dedicated, utilisez l&#39;URL de votre instance GitLab.</li></ol><pre className="language-json shiki shiki-themes github-light" code="{
  &quot;mcpServers&quot;: {
    &quot;GitLab&quot;: {
      &quot;type&quot;: &quot;http&quot;,
      &quot;url&quot;: &quot;https://&lt;gitlab.example.com&gt;/api/v4/mcp&quot;
    }
  }
}
" language="json" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">{
</span></span><span class="line" line="2"><span class="sYu0t">  &quot;mcpServers&quot;</span><span class="sgsFI">: {
</span></span><span class="line" line="3"><span class="sYu0t">    &quot;GitLab&quot;</span><span class="sgsFI">: {
</span></span><span class="line" line="4"><span class="sYu0t">      &quot;type&quot;</span><span class="sgsFI">: </span><span class="sYBdl">&quot;http&quot;</span><span class="sgsFI">,
</span></span><span class="line" line="5"><span class="sYu0t">      &quot;url&quot;</span><span class="sgsFI">: </span><span class="sYBdl">&quot;https://&lt;gitlab.example.com&gt;/api/v4/mcp&quot;
</span></span><span class="line" line="6"><span class="sgsFI">    }
</span></span><span class="line" line="7"><span class="sgsFI">  }
</span></span><span class="line" line="8"><span class="sgsFI">}
</span></span></code></pre><ol start="4"><li>Enregistrez le fichier et attendez que la page d&#39;autorisation OAuth s&#39;ouvre dans votre navigateur. Si elle ne s&#39;ouvre pas, fermez et redémarrez Cursor.</li><li>Examinez et approuvez la demande d&#39;autorisation dans votre navigateur.</li><li>Revenez dans Cursor et inspectez les outils affichés.</li></ol><p><img alt="Le serveur MCP de GitLab connecté dans Cursor après l&#39;autorisation OAuth" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733928/anreghjemkrnuezohhzh.png" /></p><p>Vous pouvez maintenant démarrer un nouveau chat et poser une question basée sur les outils MCP disponibles de GitLab.</p><p>Lorsque Cursor s&#39;authentifie auprès du MCP de GitLab, il agit avec votre identité GitLab existante. Il ne peut accéder qu&#39;aux projets et ressources auxquels vous avez déjà accès. Le MCP apporte un contexte approuvé dans l&#39;<a href="https://about.gitlab.com/fr-fr/blog/what-is-an-ide/" rel="" title="Qu&#39;est-ce qu&#39;un IDE ?">IDE</a> ; il ne contourne pas les autorisations de GitLab.</p><h3 id="préparer-lenvironnement-pour-la-modernisation-vers-java-21">Préparer l&#39;environnement pour la modernisation vers Java 21</h3><p>L&#39;<a href="https://gitlab.com/groups/gitlab-da/demo-environments/tanuki-iot-platform/-/work_items/13" rel="">epic de modernisation de Java 8 à 21</a> décompose le plan nécessaire en itérations plus petites, chaque artefact et chaque modification étant testable indépendamment.</p><p><img alt="Epic GitLab avec tickets enfants" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733989/thwfzpvbs7tcm0un2xg6.png" /></p><p>La première étape consiste à s&#39;assurer que l&#39;infrastructure CI/CD teste à la fois Java 8 et Java 21 en parallèle. L&#39;augmentation de la couverture de test dès le début de chaque tâche de modernisation est également obligatoire.</p><p>Ouvrez l&#39;IDE Cursor et utilisez le prompt suivant pour récupérer le contexte de planification :</p><pre className="language-markdown shiki shiki-themes github-light" code="Please help me modernize this sensor from Java 8 to 21. We want to start with the base line for CI/CD builds in work item 14, and then also look into test coverage from 21. Start the implementation in a new Git branch called `maint-java-21` so we can continue testing different scenarios.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Please help me modernize this sensor from Java 8 to 21. We want to start with the base line for CI/CD builds in work item 14, and then also look into test coverage from 21. Start the implementation in a new Git branch called </span><span class="sYu0t">`maint-java-21`</span><span class="sgsFI"> so we can continue testing different scenarios.
</span></span></code></pre><p>Après avoir terminé le travail sur le ticket de visibilité du build CI, Cursor peut également utiliser l&#39;outil MCP <code>create_workitem_note</code> pour ajouter un commentaire récapitulatif dans le ticket.</p><p><img alt="Résumé Cursor avec appel d&#39;outil du serveur MCP de GitLab" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734071/bks4lwnncddardc05r3e.png" /></p><p>La nouvelle merge request déclenche les pipelines CI/CD, ainsi que le flow Code Review, qui laisse des commentaires sur le guide de style de développement nécessitant une documentation.</p><p><img alt="Retour de revue de code dans la merge request" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734168/z7ootq0wqmom3yxmdexj.png" /></p><p>Nous pouvons immédiatement traiter le retour dans l&#39;interface GitLab en mentionnant le compte de service du flow Developer.</p><pre className="language-markdown shiki shiki-themes github-light" code="@duo-developer-&lt;group-name&gt; Can you help address the review feedback?
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">@duo-developer-&lt;group-name&gt; Can you help address the review feedback?
</span></span></code></pre><p>Ce prompt démarre une nouvelle session en arrière-plan, et nous pouvons nous concentrer sur d&#39;autres tâches pendant ce temps. Nous pouvons également revenir dans l&#39;IDE Cursor et utiliser son chat pour traiter le retour de revue dans la merge request.</p><p><img alt="Prompt dans l&#39;IDE Cursor : « There is review feedback in the MR - please help me fix it »" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734264/n5ky8nj73bpb1imzrj6h.png" /></p><p>Cursor met en œuvre les modifications et ajoute des commentaires dans les fils de discussion de la merge request à l&#39;aide de l&#39;outil MCP <code>create_merge_request_note</code>.</p><p><img alt="Merge request GitLab avec les commentaires de revue de code traités" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734337/hah0qxe8ei5h6iefzqz4.png" /></p><p>La modification conserve la base de référence Java 8 temporaire et ajoute une validation distincte du build et des tests Java 21. Ce changement rend la compatibilité visible dans le pipeline avant que le code source ne commence à utiliser des API exclusives à Java 21. Une fois ces murs qualité en place, chaque modification ultérieure pilotée par un agent est révisée, testée et traçable. C&#39;est la même norme que nous appliquons à toute autre merge request, et c&#39;est ce qui permet à Cursor d&#39;avancer rapidement en toute sécurité.</p><p>Regardez cette vidéo pour découvrir comment Cursor utilise le MCP de GitLab pour préparer les murs qualité et traiter le retour de revue de code :</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/bqT2exfE5Go" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="moderniser-la-gestion-des-connexions-http-avec-java-21">Moderniser la gestion des connexions HTTP avec Java 21</h2><p>Le collecteur de métriques HTTP Java utilise actuellement l&#39;API legacy <code>HttpURLConnection</code> de Java 8. Java 21 a modernisé la bibliothèque HTTP avec <code>java.net.http.HttpClient</code>, mais il ne s&#39;agit pas d&#39;un simple renommage mécanique. Les redirections, les en-têtes restreints, la portée des délais d&#39;attente, les corps de réponse, les interruptions et la réutilisation des connexions peuvent tous se comporter différemment. C&#39;est pourquoi l&#39;implémentation est contenue dans un seul élément de travail bien délimité : <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/work_items/16" rel="">Remplacer HttpURLConnection par java.net.http.HttpClient</a>.</p><p>Ouvrez l&#39;IDE Cursor avec un nouveau chat et demandez à mettre en œuvre les modifications.</p><p><strong>Remarque :</strong> pour ce cas d&#39;utilisation, nous souhaitons utiliser une configuration Docker Compose locale pour vérifier les modifications. Si vous souhaitez reproduire le comportement, installez Docker et Docker Compose ; sinon, supprimez le deuxième prompt.</p><pre className="language-markdown shiki shiki-themes github-light" code="We want to continue modernizing the app to Java 21 - use the same maint-java-21 branch, and start implementing issue 16.

Verify the changes locally using the docker compose setup, after making the changes.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">We want to continue modernizing the app to Java 21 - use the same maint-java-21 branch, and start implementing issue 16.
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="sgsFI">Verify the changes locally using the docker compose setup, after making the changes.
</span></span></code></pre><p>Le serveur MCP de GitLab fournit le contexte du ticket, les critères d&#39;acceptation, les dépendances et les discussions associées. Le premier ticket de modernisation du code reste délibérément synchrone et limité. Il remplace <code>HttpURLConnection</code> par un seul <code>HttpClient</code> réutilisable et n&#39;ajoute pas de threads virtuels, ne modifie pas le modèle temporel, et ne corrige pas les dépendances non liées. Ce sont des améliorations précieuses, mais les combiner rendrait les changements de comportement plus difficiles à isoler, à réviser et à annuler.</p><h3 id="mettre-en-œuvre-et-vérifier-localement">Mettre en œuvre et vérifier localement</h3><p>Des tests HTTP locaux ciblés couvrent les méthodes, les en-têtes, les codes de statut attendus et inattendus, les redirections, les délais d&#39;attente, les métadonnées de réponse, les échecs de connexion et les interruptions.</p><p><img alt="Cursor exécutant les tests Maven locaux" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734391/fuxi3jcrcg5alhuqcrje.png" /></p><p>Le test fonctionnel Docker Compose prouve ensuite que les relevés authentifiés arrivent toujours dans le backend <code>rust-metrics-store</code>.</p><p><img alt="Cursor exécutant Docker Compose local avec le backend Rust" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734439/w83djmi4df9dfynb9dfj.png" /></p><p>Si les pipelines CI/CD échouent après les modifications, utilisez les outils du serveur MCP de GitLab pour inspecter et corriger directement dans l&#39;IDE Cursor sans changer de contexte.</p><p><img alt="IDE Cursor avec appel d&#39;outil du serveur MCP de GitLab pour récupérer les job logs CI/CD" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734501/g4mfs2zdrffzb9pd8v09.png" /></p><p>Dans l&#39;interface GitLab, vous pouvez utiliser <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/fix_pipeline/" rel="">le flow Fix CI/CD Pipeline</a> ou demander l&#39;aide de l&#39;<a href="https://docs.gitlab.com/user/duo_agent_platform/agents/foundational_agents/ci_expert_agent/" rel="">agent CI Expert</a>.</p><h3 id="preuves-cicd-et-de-revue">Preuves CI/CD et de revue</h3><p>GitLab CI/CD, GitLab Duo Code Review, l&#39;analyse de sécurité et l&#39;analyse d&#39;impact assistée par l&#39;IA fournissent les preuves finales dans la merge request. La revue humaine reste primordiale, notamment pour les frontières subtiles : toute différence de comportement intentionnelle doit être explicite dans la merge request, et non découverte après le déploiement.</p><p><img alt="Le flow Developer avec analyse d&#39;impact" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734549/jxqds2bwzcedn7yafdvr.png" /></p><p>Regardez cette vidéo pour découvrir comment Cursor et GitLab modernisent la bibliothèque HTTP du collecteur vers Java 21 :</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/AZEDvb474n0" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="conseils-pour-cursor-et-gitlab">Conseils pour Cursor et GitLab</h2><p>Voici quelques conseils pour utiliser Cursor et GitLab ensemble.</p><h3 id="automatiser-lanalyse-dimpact-pour-les-changements-majeurs-de-modernisation">Automatiser l&#39;analyse d&#39;impact pour les changements majeurs de modernisation</h3><p>Le <a href="https://www.youtube.com/watch?v=AZEDvb474n0" rel="">troisième cas d&#39;utilisation</a> montre le flow Developer effectuant une analyse d&#39;impact des changements majeurs. Vous pouvez transformer ce workflow en un <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">flow personnalisé</a> automatisé qui se déclenche lorsqu&#39;une merge request est prête ou que le pipeline est au vert. Un contexte supplémentaire peut être récupéré depuis <a href="https://about.gitlab.com/fr-fr/blog/introducing-gitlab-orbit/" rel="">GitLab Orbit</a>, qui fournit un graphe de contexte à travers le code, les éléments de travail, les merge requests, les vulnérabilités, et plus encore.</p><p>Vous pouvez commencer à inspecter le flow d&#39;exemple dans le catalogue d&#39;IA : <a href="https://gitlab.com/explore/ai-catalog/flows/1013017/" rel="">MR Impact analysis (Orbit)</a>. Merci à ma collègue Fatima Sarah Kalid pour l&#39;inspiration. Les flows personnalisés sont en disponibilité générale depuis <a href="https://about.gitlab.com/fr-fr/blog/multi-step-software-delivery-with-agentic-flows/" rel="">GitLab 19.2</a>.</p><p><img alt="Workflow personnalisé dans le catalogue d&#39;IA" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734604/nk2faraxdhghiktndrs5.png" /></p><p><img alt="Analyse d&#39;impact d&#39;une merge request avec un flow personnalisé dans GitLab Duo Agent Platform et GitLab Orbit" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734740/app3pnjwqzoyulojkomq.png" /></p><h3 id="documenter-les-directives-et-les-limites-pour-les-agents">Documenter les directives et les limites pour les agents</h3><h4 id="agentsmd-pour-java">AGENTS.md pour Java</h4><p>Un fichier <a href="https://docs.gitlab.com/user/duo_agent_platform/customize/agents_md/" rel=""><code>AGENTS.md</code></a> aide Cursor et d&#39;autres agents de codage à comprendre l&#39;architecture du projet, les commandes, le style de code, les attentes en matière de tests et les limites. Conservez ces instructions à proximité du code et veillez à ce qu&#39;elles soient suffisamment précises et concrètes pour être vérifiées.</p><p>Exemple tiré du <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/blob/main/AGENTS.md?ref_type=heads" rel="">fichier AGENTS.md dans le projet de collecteur de métriques HTTP Java</a> :</p><pre className="language-markdown shiki shiki-themes github-light" code="# Java HTTP Metrics Collector - Agent Instructions

## Overview

The Java HTTP Metrics Collector is a REST API metrics collection sensor for the Tanuki IoT Platform. It monitors HTTP endpoints, collects performance metrics (response time, status codes, content length), and exports them in Prometheus text format. The application runs continuously with configurable collection intervals and supports concurrent endpoint monitoring.

## Code Style and Standards

### Java 8 Compatibility

- Do not modernize Java 8 code to Java 11+ features unless there is a GitLab issue or task specifically requesting modernization
- Target Java 8 for source and compilation: `maven.compiler.source=1.8` and `maven.compiler.target=1.8`
- Use Java 8 compatible patterns (e.g., anonymous inner classes instead of lambdas where appropriate)

### Documentation

- All public classes must have Javadoc describing purpose and usage
- All public methods must have Javadoc with `@param` and `@return` tags
- Include code examples in main class Javadoc

### Class Organization

- **Main entry point**: `HttpMetricsCollector` - orchestrates configuration loading, metric collection, and export
- **Collector**: `HttpCollector` - performs HTTP requests and collects metrics
- **Exporter**: `PrometheusExporter` - exports metrics in Prometheus text format
- **Models**: `CollectorConfig`, `EndpointConfig`, `HttpMetric` - data transfer objects

### Dependency Management

- Always use Maven for dependency management
- Use property-based version management for dependencies (e.g., `${jackson.version}`)
- Keep dependencies up-to-date in `pom.xml`

### Error Handling

- Use try-catch blocks with proper resource management (try-with-resources where applicable)
- Log errors using SLF4J Logger
- Gracefully handle configuration loading failures
- Implement proper shutdown hooks for resource cleanup

### Concurrency

- Use `ExecutorService` for concurrent HTTP requests
- Thread pool size is limited to the minimum of endpoint count and 10
- Properly shutdown executor service with timeout handling
- Use `Future` objects to collect results from concurrent tasks
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="surfw"># Java HTTP Metrics Collector - Agent Instructions
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="surfw">## Overview
</span></span><span class="line" line="4"><span emptyLinePlaceholder>
</span></span><span class="line" line="5"><span class="sgsFI">The Java HTTP Metrics Collector is a REST API metrics collection sensor for the Tanuki IoT Platform. It monitors HTTP endpoints, collects performance metrics (response time, status codes, content length), and exports them in Prometheus text format. The application runs continuously with configurable collection intervals and supports concurrent endpoint monitoring.
</span></span><span class="line" line="6"><span emptyLinePlaceholder>
</span></span><span class="line" line="7"><span class="surfw">## Code Style and Standards
</span></span><span class="line" line="8"><span emptyLinePlaceholder>
</span></span><span class="line" line="9"><span class="surfw">### Java 8 Compatibility
</span></span><span class="line" line="10"><span emptyLinePlaceholder>
</span></span><span class="line" line="11"><span class="sqxcx">-</span><span class="sgsFI"> Do not modernize Java 8 code to Java 11+ features unless there is a GitLab issue or task specifically requesting modernization
</span></span><span class="line" line="12"><span class="sqxcx">-</span><span class="sgsFI"> Target Java 8 for source and compilation: </span><span class="sYu0t">`maven.compiler.source=1.8`</span><span class="sgsFI"> and </span><span class="sYu0t">`maven.compiler.target=1.8`
</span></span><span class="line" line="13"><span class="sqxcx">-</span><span class="sgsFI"> Use Java 8 compatible patterns (e.g., anonymous inner classes instead of lambdas where appropriate)
</span></span><span class="line" line="14"><span emptyLinePlaceholder>
</span></span><span class="line" line="15"><span class="surfw">### Documentation
</span></span><span class="line" line="16"><span emptyLinePlaceholder>
</span></span><span class="line" line="17"><span class="sqxcx">-</span><span class="sgsFI"> All public classes must have Javadoc describing purpose and usage
</span></span><span class="line" line="18"><span class="sqxcx">-</span><span class="sgsFI"> All public methods must have Javadoc with </span><span class="sYu0t">`@param`</span><span class="sgsFI"> and </span><span class="sYu0t">`@return`</span><span class="sgsFI"> tags
</span></span><span class="line" line="19"><span class="sqxcx">-</span><span class="sgsFI"> Include code examples in main class Javadoc
</span></span><span class="line" line="20"><span emptyLinePlaceholder>
</span></span><span class="line" line="21"><span class="surfw">### Class Organization
</span></span><span class="line" line="22"><span emptyLinePlaceholder>
</span></span><span class="line" line="23"><span class="sqxcx">-</span><span class="sbYKK"> **Main entry point**</span><span class="sgsFI">: </span><span class="sYu0t">`HttpMetricsCollector`</span><span class="sgsFI"> - orchestrates configuration loading, metric collection, and export
</span></span><span class="line" line="24"><span class="sqxcx">-</span><span class="sbYKK"> **Collector**</span><span class="sgsFI">: </span><span class="sYu0t">`HttpCollector`</span><span class="sgsFI"> - performs HTTP requests and collects metrics
</span></span><span class="line" line="25"><span class="sqxcx">-</span><span class="sbYKK"> **Exporter**</span><span class="sgsFI">: </span><span class="sYu0t">`PrometheusExporter`</span><span class="sgsFI"> - exports metrics in Prometheus text format
</span></span><span class="line" line="26"><span class="sqxcx">-</span><span class="sbYKK"> **Models**</span><span class="sgsFI">: </span><span class="sYu0t">`CollectorConfig`</span><span class="sgsFI">, </span><span class="sYu0t">`EndpointConfig`</span><span class="sgsFI">, </span><span class="sYu0t">`HttpMetric`</span><span class="sgsFI"> - data transfer objects
</span></span><span class="line" line="27"><span emptyLinePlaceholder>
</span></span><span class="line" line="28"><span class="surfw">### Dependency Management
</span></span><span class="line" line="29"><span emptyLinePlaceholder>
</span></span><span class="line" line="30"><span class="sqxcx">-</span><span class="sgsFI"> Always use Maven for dependency management
</span></span><span class="line" line="31"><span class="sqxcx">-</span><span class="sgsFI"> Use property-based version management for dependencies (e.g., </span><span class="sYu0t">`${jackson.version}`</span><span class="sgsFI">)
</span></span><span class="line" line="32"><span class="sqxcx">-</span><span class="sgsFI"> Keep dependencies up-to-date in </span><span class="sYu0t">`pom.xml`
</span></span><span class="line" line="33"><span emptyLinePlaceholder>
</span></span><span class="line" line="34"><span class="surfw">### Error Handling
</span></span><span class="line" line="35"><span emptyLinePlaceholder>
</span></span><span class="line" line="36"><span class="sqxcx">-</span><span class="sgsFI"> Use try-catch blocks with proper resource management (try-with-resources where applicable)
</span></span><span class="line" line="37"><span class="sqxcx">-</span><span class="sgsFI"> Log errors using SLF4J Logger
</span></span><span class="line" line="38"><span class="sqxcx">-</span><span class="sgsFI"> Gracefully handle configuration loading failures
</span></span><span class="line" line="39"><span class="sqxcx">-</span><span class="sgsFI"> Implement proper shutdown hooks for resource cleanup
</span></span><span class="line" line="40"><span emptyLinePlaceholder>
</span></span><span class="line" line="41"><span class="surfw">### Concurrency
</span></span><span class="line" line="42"><span emptyLinePlaceholder>
</span></span><span class="line" line="43"><span class="sqxcx">-</span><span class="sgsFI"> Use </span><span class="sYu0t">`ExecutorService`</span><span class="sgsFI"> for concurrent HTTP requests
</span></span><span class="line" line="44"><span class="sqxcx">-</span><span class="sgsFI"> Thread pool size is limited to the minimum of endpoint count and 10
</span></span><span class="line" line="45"><span class="sqxcx">-</span><span class="sgsFI"> Properly shutdown executor service with timeout handling
</span></span><span class="line" line="46"><span class="sqxcx">-</span><span class="sgsFI"> Use </span><span class="sYu0t">`Future`</span><span class="sgsFI"> objects to collect results from concurrent tasks
</span></span></code></pre><h4 id="instructions-de-revue-de-code-pour-java">Instructions de revue de code pour Java</h4><p>Le flow GitLab Duo Code Review aide à maintenir les guides de style et les limites. Il s&#39;attend à des instructions spécifiques dans le <a href="https://docs.gitlab.com/user/duo_agent_platform/customize/review_instructions/" rel="">fichier <code>.gitlab/duo/mr-review-instructions.yaml</code></a>, par exemple pour <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/blob/main/.gitlab/duo/mr-review-instructions.yaml?ref_type=heads" rel="">Java</a> :</p><pre className="language-yaml shiki shiki-themes github-light" code="# Custom instructions for GitLab Duo Code Review

instructions:
  # General guidelines

  - name: Code Review
    instructions: |
      1. Focus on correctness and performance
      2. Ensure code comments and documentation are clear and concise
      3. Be respectful and constructive in comments

  - name: CI/CD Configuration
    fileFilters:
      - &quot;.gitlab-ci.yml&quot;
    instructions: |
      1. Do not use YAML anchors
      2. Always use rules in jobs, avoid using `only`

  # Java style guide

  - name: Java Style Guide
    fileFilters:
      - &quot;**/*.java&quot;
    instructions: |
      1. Do not modernize Java 8 code to Java 11+ features, unless there is a GitLab issue or task specifically requesting modernization
      2. All public classes must have Javadoc describing purpose and usage
      3. All public methods must have Javadoc with @param and @return tags
      4. Include code examples in main class Javadoc
      5. All public methods must have at least one test case
      6. Use httpbun.com for test endpoints (status codes, delays, JSON responses)
" language="yaml" meta="" style=""><code><span class="line" line="1"><span class="sAwPA"># Custom instructions for GitLab Duo Code Review
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="shJU0">instructions</span><span class="sgsFI">:
</span></span><span class="line" line="4"><span class="sAwPA">  # General guidelines
</span></span><span class="line" line="5"><span emptyLinePlaceholder>
</span></span><span class="line" line="6"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">Code Review
</span></span><span class="line" line="7"><span class="shJU0">    instructions</span><span class="sgsFI">: </span><span class="sD7c4">|
</span></span><span class="line" line="8"><span class="sYBdl">      1. Focus on correctness and performance
</span></span><span class="line" line="9"><span class="sYBdl">      2. Ensure code comments and documentation are clear and concise
</span></span><span class="line" line="10"><span class="sYBdl">      3. Be respectful and constructive in comments
</span></span><span class="line" line="11"><span emptyLinePlaceholder>
</span></span><span class="line" line="12"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">CI/CD Configuration
</span></span><span class="line" line="13"><span class="shJU0">    fileFilters</span><span class="sgsFI">:
</span></span><span class="line" line="14"><span class="sgsFI">      - </span><span class="sYBdl">&quot;.gitlab-ci.yml&quot;
</span></span><span class="line" line="15"><span class="shJU0">    instructions</span><span class="sgsFI">: </span><span class="sD7c4">|
</span></span><span class="line" line="16"><span class="sYBdl">      1. Do not use YAML anchors
</span></span><span class="line" line="17"><span class="sYBdl">      2. Always use rules in jobs, avoid using `only`
</span></span><span class="line" line="18"><span emptyLinePlaceholder>
</span></span><span class="line" line="19"><span class="sAwPA">  # Java style guide
</span></span><span class="line" line="20"><span emptyLinePlaceholder>
</span></span><span class="line" line="21"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">Java Style Guide
</span></span><span class="line" line="22"><span class="shJU0">    fileFilters</span><span class="sgsFI">:
</span></span><span class="line" line="23"><span class="sgsFI">      - </span><span class="sYBdl">&quot;**/*.java&quot;
</span></span><span class="line" line="24"><span class="shJU0">    instructions</span><span class="sgsFI">: </span><span class="sD7c4">|
</span></span><span class="line" line="25"><span class="sYBdl">      1. Do not modernize Java 8 code to Java 11+ features, unless there is a GitLab issue or task specifically requesting modernization
</span></span><span class="line" line="26"><span class="sYBdl">      2. All public classes must have Javadoc describing purpose and usage
</span></span><span class="line" line="27"><span class="sYBdl">      3. All public methods must have Javadoc with @param and @return tags
</span></span><span class="line" line="28"><span class="sYBdl">      4. Include code examples in main class Javadoc
</span></span><span class="line" line="29"><span class="sYBdl">      5. All public methods must have at least one test case
</span></span><span class="line" line="30"><span class="sYBdl">      6. Use httpbun.com for test endpoints (status codes, delays, JSON responses)
</span></span></code></pre><p>Au cours du processus de modernisation du code, la première directive relative à l&#39;application de Java 8 devra être mise à jour.</p><h3 id="transformer-un-workflow-éprouvé-en-compétence-agentique">Transformer un workflow éprouvé en compétence agentique</h3><p>Lorsqu&#39;un workflow spécialisé devient répétable, capturez-le dans une <a href="https://docs.gitlab.com/user/duo_agent_platform/customize/agent_skills/" rel="">compétence agentique</a>. Les compétences sont chargées à la demande et ne remplissent pas la fenêtre de contexte par défaut.</p><p>Commencez avec un CI/CD fonctionnel, des tests et des décisions révisées afin que la compétence agentique reflète une pratique éprouvée plutôt qu&#39;un plan non testé. Le <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/work_items/24" rel="">ticket 24</a> dans l&#39;epic de modernisation capture l&#39;approche dans une compétence agentique ciblée de modernisation Java 21 et les versions ultérieures. Cette approche apporte une valeur au-delà de la merge request actuelle : les futures sessions d&#39;agents pourront réutiliser les mêmes limites de sécurité au lieu de les reconstruire à partir de discussions antérieures.</p><p>Essayez cet exemple d&#39;implémentation de compétence, inspiré de la <a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/blob/main/skills/java8-maven-maintenance/SKILL.md?ref_type=heads" rel="">compétence de maintenance Maven pour Java 8</a> existante :</p><pre className="language-markdown shiki shiki-themes github-light" code="---
name: java21-modernization
description: &gt;-
  Guide incremental Java 8 to Java 21+ modernization for the HTTP metrics
  collector. Use when a GitLab work item asks for Java 21 CI visibility,
  runtime/image upgrades, HttpClient migration, dependency or source API
  modernization, or review of maint-java-21 style merge requests. Do not use
  for routine Java 8 maintenance; prefer java8-maven-maintenance instead.
compatibility: Requires Maven, Docker Compose, and access to the owning GitLab work item.
---

# Java 21 Modernization

## Overview

Modernize in small, reviewable steps. The owning work item is authoritative.
Preserve collector → Rust metrics-store behavior unless the issue says otherwise.

Companion skill: `skills/java8-maven-maintenance/` for the Java 8 default path.

## Before editing

1. Read the owning issue/epic, `AGENTS.md`, `.gitlab-ci.yml`, `pom.xml`,
   `Dockerfile`, and affected tests.
2. Record the current baseline:
   - `maven.compiler.source` / `target`
   - default CI image vs any `*:java-21` jobs
   - container base image
   - observable CLI/Compose behavior
3. Classify the change into **one** lane:
   - CI visibility only
   - runtime / image switch
   - source / API modernization
   - dependency upgrade
   - tests / contract checks

Do not combine lanes in one MR unless the work item explicitly requires it.

## Workflow

Copy and track:

```text
Modernization progress:
- [ ] Baseline recorded
- [ ] Scoped to owning work item
- [ ] Target-JDK CI evidence available before JDK-only APIs
- [ ] Java 8 lane preserved until exit criteria say otherwise
- [ ] Unit / IT / Compose checks run
- [ ] MR documents risks, rollback, human decisions
```

## Guardrails

- Do not remove Java 8 compatibility unless the work item authorizes it.
- Do not introduce Java 21-only APIs before target-JDK CI evidence exists.
- Do not mix runtime upgrades with unrelated refactors.
- Do not claim performance wins without measurements.
- Preserve the Java → Rust API and authentication contract.
- Stop for a human decision when support policy, rollback, data format, or downstream compatibility is unclear.

## Validation

```bash
mvn -Dmaven.repo.local=.m2/repository test
mvn -Dmaven.repo.local=.m2/repository clean package
```

If Compose or container files change:

```bash
docker compose config --quiet
TANUKI_INGESTION_TOKEN=replace-me docker compose up -d --build
# confirm metric_sample logs and authenticated ingest still work
docker compose down -v
```

## Completion report

In the MR description, include:

1. Baseline before the change
2. Lane changed (CI / runtime / source / deps / tests)
3. Evidence run (commands + CI jobs)
4. Remaining risks and rollback
5. Human decisions still open

## Out of scope

- Broad &quot;modernize everything to Java 21&quot; prompts
- HTTP endpoint semantics unrelated to the JDK migration
  (use `skills/http-endpoint-collector-behavior/`)
- Security triage unrelated to the migration slice
  (use `skills/security-triage-java-sensor/`)
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">---
</span></span><span class="line" line="2"><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">java21-modernization
</span></span><span class="line" line="3"><span class="shJU0">description</span><span class="sgsFI">: </span><span class="sD7c4">&gt;-
</span></span><span class="line" line="4"><span class="sYBdl">  Guide incremental Java 8 to Java 21+ modernization for the HTTP metrics
</span></span><span class="line" line="5"><span class="sYBdl">  collector. Use when a GitLab work item asks for Java 21 CI visibility,
</span></span><span class="line" line="6"><span class="sYBdl">  runtime/image upgrades, HttpClient migration, dependency or source API
</span></span><span class="line" line="7"><span class="sYBdl">  modernization, or review of maint-java-21 style merge requests. Do not use
</span></span><span class="line" line="8"><span class="sYBdl">  for routine Java 8 maintenance; prefer java8-maven-maintenance instead.
</span></span><span class="line" line="9"><span class="shJU0">compatibility</span><span class="sgsFI">: </span><span class="sYBdl">Requires Maven, Docker Compose, and access to the owning GitLab work item.
</span></span><span class="line" line="10"><span class="sgsFI">---
</span></span><span class="line" line="11"><span emptyLinePlaceholder>
</span></span><span class="line" line="12"><span class="surfw"># Java 21 Modernization
</span></span><span class="line" line="13"><span emptyLinePlaceholder>
</span></span><span class="line" line="14"><span class="surfw">## Overview
</span></span><span class="line" line="15"><span emptyLinePlaceholder>
</span></span><span class="line" line="16"><span class="sgsFI">Modernize in small, reviewable steps. The owning work item is authoritative.
</span></span><span class="line" line="17"><span class="sgsFI">Preserve collector → Rust metrics-store behavior unless the issue says otherwise.
</span></span><span class="line" line="18"><span emptyLinePlaceholder>
</span></span><span class="line" line="19"><span class="sgsFI">Companion skill: </span><span class="sYu0t">`skills/java8-maven-maintenance/`</span><span class="sgsFI"> for the Java 8 default path.
</span></span><span class="line" line="20"><span emptyLinePlaceholder>
</span></span><span class="line" line="21"><span class="surfw">## Before editing
</span></span><span class="line" line="22"><span emptyLinePlaceholder>
</span></span><span class="line" line="23"><span class="sqxcx">1.</span><span class="sgsFI"> Read the owning issue/epic, </span><span class="sYu0t">`AGENTS.md`</span><span class="sgsFI">, </span><span class="sYu0t">`.gitlab-ci.yml`</span><span class="sgsFI">, </span><span class="sYu0t">`pom.xml`</span><span class="sgsFI">,
</span></span><span class="line" line="24"><span class="sYu0t">   `Dockerfile`</span><span class="sgsFI">, and affected tests.
</span></span><span class="line" line="25"><span class="sqxcx">2.</span><span class="sgsFI"> Record the current baseline:
</span></span><span class="line" line="26"><span class="sqxcx">   -</span><span class="sYu0t"> `maven.compiler.source`</span><span class="sgsFI"> / </span><span class="sYu0t">`target`
</span></span><span class="line" line="27"><span class="sqxcx">   -</span><span class="sgsFI"> default CI image vs any </span><span class="sYu0t">`*:java-21`</span><span class="sgsFI"> jobs
</span></span><span class="line" line="28"><span class="sqxcx">   -</span><span class="sgsFI"> container base image
</span></span><span class="line" line="29"><span class="sqxcx">   -</span><span class="sgsFI"> observable CLI/Compose behavior
</span></span><span class="line" line="30"><span class="sqxcx">3.</span><span class="sgsFI"> Classify the change into </span><span class="sbYKK">**one**</span><span class="sgsFI"> lane:
</span></span><span class="line" line="31"><span class="sqxcx">   -</span><span class="sgsFI"> CI visibility only
</span></span><span class="line" line="32"><span class="sqxcx">   -</span><span class="sgsFI"> runtime / image switch
</span></span><span class="line" line="33"><span class="sqxcx">   -</span><span class="sgsFI"> source / API modernization
</span></span><span class="line" line="34"><span class="sqxcx">   -</span><span class="sgsFI"> dependency upgrade
</span></span><span class="line" line="35"><span class="sqxcx">   -</span><span class="sgsFI"> tests / contract checks
</span></span><span class="line" line="36"><span emptyLinePlaceholder>
</span></span><span class="line" line="37"><span class="sgsFI">Do not combine lanes in one MR unless the work item explicitly requires it.
</span></span><span class="line" line="38"><span emptyLinePlaceholder>
</span></span><span class="line" line="39"><span class="surfw">## Workflow
</span></span><span class="line" line="40"><span emptyLinePlaceholder>
</span></span><span class="line" line="41"><span class="sgsFI">Copy and track:
</span></span><span class="line" line="42"><span emptyLinePlaceholder>
</span></span><span class="line" line="43"><span class="sgsFI">```text
</span></span><span class="line" line="44"><span class="sgsFI">Modernization progress:
</span></span><span class="line" line="45"><span class="sgsFI">- [ ] Baseline recorded
</span></span><span class="line" line="46"><span class="sgsFI">- [ ] Scoped to owning work item
</span></span><span class="line" line="47"><span class="sgsFI">- [ ] Target-JDK CI evidence available before JDK-only APIs
</span></span><span class="line" line="48"><span class="sgsFI">- [ ] Java 8 lane preserved until exit criteria say otherwise
</span></span><span class="line" line="49"><span class="sgsFI">- [ ] Unit / IT / Compose checks run
</span></span><span class="line" line="50"><span class="sgsFI">- [ ] MR documents risks, rollback, human decisions
</span></span><span class="line" line="51"><span class="sgsFI">```
</span></span><span class="line" line="52"><span emptyLinePlaceholder>
</span></span><span class="line" line="53"><span class="surfw">## Guardrails
</span></span><span class="line" line="54"><span emptyLinePlaceholder>
</span></span><span class="line" line="55"><span class="sqxcx">-</span><span class="sgsFI"> Do not remove Java 8 compatibility unless the work item authorizes it.
</span></span><span class="line" line="56"><span class="sqxcx">-</span><span class="sgsFI"> Do not introduce Java 21-only APIs before target-JDK CI evidence exists.
</span></span><span class="line" line="57"><span class="sqxcx">-</span><span class="sgsFI"> Do not mix runtime upgrades with unrelated refactors.
</span></span><span class="line" line="58"><span class="sqxcx">-</span><span class="sgsFI"> Do not claim performance wins without measurements.
</span></span><span class="line" line="59"><span class="sqxcx">-</span><span class="sgsFI"> Preserve the Java → Rust API and authentication contract.
</span></span><span class="line" line="60"><span class="sqxcx">-</span><span class="sgsFI"> Stop for a human decision when support policy, rollback, data format, or downstream compatibility is unclear.
</span></span><span class="line" line="61"><span emptyLinePlaceholder>
</span></span><span class="line" line="62"><span class="surfw">## Validation
</span></span><span class="line" line="63"><span emptyLinePlaceholder>
</span></span><span class="line" line="64"><span class="sgsFI">```bash
</span></span><span class="line" line="65"><span class="s7eDp">mvn</span><span class="sYu0t"> -Dmaven.repo.local=.m2/repository</span><span class="sYBdl"> test
</span></span><span class="line" line="66"><span class="s7eDp">mvn</span><span class="sYu0t"> -Dmaven.repo.local=.m2/repository</span><span class="sYBdl"> clean</span><span class="sYBdl"> package
</span></span><span class="line" line="67"><span class="sgsFI">```
</span></span><span class="line" line="68"><span emptyLinePlaceholder>
</span></span><span class="line" line="69"><span class="sgsFI">If Compose or container files change:
</span></span><span class="line" line="70"><span emptyLinePlaceholder>
</span></span><span class="line" line="71"><span class="sgsFI">```bash
</span></span><span class="line" line="72"><span class="s7eDp">docker</span><span class="sYBdl"> compose</span><span class="sYBdl"> config</span><span class="sYu0t"> --quiet
</span></span><span class="line" line="73"><span class="sgsFI">TANUKI_INGESTION_TOKEN</span><span class="sD7c4">=</span><span class="sYBdl">replace-me</span><span class="s7eDp"> docker</span><span class="sYBdl"> compose</span><span class="sYBdl"> up</span><span class="sYu0t"> -d</span><span class="sYu0t"> --build
</span></span><span class="line" line="74"><span class="sAwPA"># confirm metric_sample logs and authenticated ingest still work
</span></span><span class="line" line="75"><span class="s7eDp">docker</span><span class="sYBdl"> compose</span><span class="sYBdl"> down</span><span class="sYu0t"> -v
</span></span><span class="line" line="76"><span class="sgsFI">```
</span></span><span class="line" line="77"><span emptyLinePlaceholder>
</span></span><span class="line" line="78"><span class="surfw">## Completion report
</span></span><span class="line" line="79"><span emptyLinePlaceholder>
</span></span><span class="line" line="80"><span class="sgsFI">In the MR description, include:
</span></span><span class="line" line="81"><span emptyLinePlaceholder>
</span></span><span class="line" line="82"><span class="sqxcx">1.</span><span class="sgsFI"> Baseline before the change
</span></span><span class="line" line="83"><span class="sqxcx">2.</span><span class="sgsFI"> Lane changed (CI / runtime / source / deps / tests)
</span></span><span class="line" line="84"><span class="sqxcx">3.</span><span class="sgsFI"> Evidence run (commands + CI jobs)
</span></span><span class="line" line="85"><span class="sqxcx">4.</span><span class="sgsFI"> Remaining risks and rollback
</span></span><span class="line" line="86"><span class="sqxcx">5.</span><span class="sgsFI"> Human decisions still open
</span></span><span class="line" line="87"><span emptyLinePlaceholder>
</span></span><span class="line" line="88"><span class="surfw">## Out of scope
</span></span><span class="line" line="89"><span emptyLinePlaceholder>
</span></span><span class="line" line="90"><span class="sqxcx">-</span><span class="sgsFI"> Broad &quot;modernize everything to Java 21&quot; prompts
</span></span><span class="line" line="91"><span class="sqxcx">-</span><span class="sgsFI"> HTTP endpoint semantics unrelated to the JDK migration
</span></span><span class="line" line="92"><span class="sgsFI">  (use </span><span class="sYu0t">`skills/http-endpoint-collector-behavior/`</span><span class="sgsFI">)
</span></span><span class="line" line="93"><span class="sqxcx">-</span><span class="sgsFI"> Security triage unrelated to the migration slice
</span></span><span class="line" line="94"><span class="sgsFI">  (use </span><span class="sYu0t">`skills/security-triage-java-sensor/`</span><span class="sgsFI">)
</span></span></code></pre><h2 id="résumé">Résumé</h2><p>Les trois cas d&#39;utilisation de ce tutoriel s&#39;appuient les uns sur les autres. Cursor a corrigé un échec de test de bout en bout accepté en utilisant uniquement le contexte du dépôt. Ensuite, le serveur MCP de GitLab a apporté le plan de modernisation, afin que Cursor puisse mettre en place des murs qualité et boucler la boucle sur le retour de revue de GitLab Duo directement depuis l&#39;IDE. Enfin, Cursor a effectué un changement Java 21 bien délimité et a remplacé HttpURLConnection par un HttpClient réutilisable, étayé par des tests ciblés, des exécutions d&#39;ingestion inter-services, un pipeline, des scans de sécurité, une nomenclature logicielle, des preuves de revue et une analyse d&#39;impact.</p><p>La modernisation d&#39;un code source Java 8 legacy n&#39;est pas plus sûre simplement parce qu&#39;un agent écrit le code. Elle devient plus sûre parce que chaque modification est délimitée, révisée et testée dans Java 8 et Java 21, et traçable jusqu&#39;à un élément de travail avec les décisions et les preuves qui le sous-tendent. Cursor gère l&#39;implémentation. GitLab gère les preuves. Ensemble, ils font de la migration quelque chose en quoi une équipe peut avoir confiance.</p><p>Si vous souhaitez essayer ce workflow, commencez par un test qui expose un échec accepté dans une application legacy. Rendez ce test fiable, saisissez le plan de modernisation global dans GitLab et choisissez un périmètre que vous pouvez modifier et prouver indépendamment. L&#39;agent aura ainsi une tâche ciblée, et l&#39;équipe aura des preuves qu&#39;elle pourra réviser.</p><blockquote><p>Si vous n&#39;utilisez pas encore GitLab Duo Agent Platform, commencez <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="">un essai gratuit</a>.</p><p>Si vous utilisez déjà l&#39;édition Gratuite de GitLab, vous pouvez vous inscrire à GitLab Duo Agent Platform en <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">suivant quelques étapes simples</a>.</p><p>Et si vous êtes déjà abonné à GitLab Premium ou GitLab Ultimate, lancez-vous simplement en <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">activant GitLab Duo Agent Platform</a> et en utilisant les GitLab Credits <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">inclus</a> dans votre abonnement.</p></blockquote><style>html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .surfw, html code.shiki .surfw{--shiki-default:#005CC5;--shiki-default-font-weight:bold}html pre.shiki code .sqxcx, html code.shiki .sqxcx{--shiki-default:#E36209}html pre.shiki code .sbYKK, html code.shiki .sbYKK{--shiki-default:#24292E;--shiki-default-font-weight:bold}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}</style>]]></content>
        <author>
            <name>Michael Friedrich</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/michael-friedrich/</uri>
        </author>
        <published>2026-08-12T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Comment utiliser des agents d'IA pour migrer la limitation de débit de GitLab]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/ai-agents-for-migrating-rate-limiting-system/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/ai-agents-for-migrating-rate-limiting-system/"/>
        <updated>2026-08-10T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Une équipe restreinte de GitLab a mené une expérience pour savoir si nous pouvions utiliser des agents d&#39;IA pour migrer une partie de notre système legacy de limitation de débit sans compromettre la sécurité.</p><p>En résumé : c&#39;est possible. Les agents d&#39;IA fonctionnent et peuvent révéler les faiblesses de vos méthodes de travail habituelles. Néanmoins, l&#39;équipe, le workflow et l&#39;observabilité ont joué un rôle plus important que les agents eux-mêmes. Voici comment nous avons structuré ce projet à l&#39;aide de GitLab, de <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> et d&#39;autres outils : découvrez ce qui a fonctionné, comment nous avons structuré notre workflow et où celui-ci a échoué, et comment vous pouvez reproduire notre démarche.</p><h2 id="le-contexte">Le contexte</h2><p>GitLab utilise depuis des années deux systèmes de limitation de débit en production : <code>Gitlab::ApplicationRateLimiter</code> au niveau de l&#39;application avec 121 clés, et un système distinct au niveau Rack. Nous avions pour objectif de les unifier au sein d&#39;une seule implémentation dans <code>labkit-ruby</code> afin d&#39;obtenir un résultat observable, testable et exploité de la même manière partout. Chaque requête adressée au monolithe passe par ce mécanisme, ses modes de défaillance doivent donc rester visibles et réversibles.</p><p>L&#39;équipe comptait trois membres de GitLab et plusieurs <a href="https://about.gitlab.com/fr-fr/topics/agentic-ai/" rel="">agents d&#39;IA</a>. Max Woolf, Staff Backend Engineer au sein de l&#39;équipe API Platform, s&#39;est chargé du volet monolithe et a mené la plupart des déploiements. Bob Van Landuyt, qui travaille sur l&#39;évolutivité, s&#39;est occupé de la gemme et a défini l&#39;architecture. Je me suis chargé du périmètre du projet et écrit une partie du code labkit initial. D&#39;autres ingénieurs sont intervenus ponctuellement pour prendre connaissance du contexte et contribuer au code et aux revues.</p><p>Les agents ont analysé le contexte, rédigé les spécifications, mis en œuvre des modifications bien délimitées, écrit les tests et procédé à une première revue des merge requests. GitLab Duo Code Review a permis de maintenir un haut niveau de qualité du code sur les merge requests. Les équipes, quant à elles, étaient toujours responsables de la portée, de l&#39;architecture, du déploiement et de la revue finale.</p><p>Nous avons suivi un cycle rigoureux : lecture de l&#39;epic, rédaction de la spécification, révision contradictoire de la spécification, mise en œuvre uniquement après résolution des blocages, vérification à l&#39;aide de preuves explicites, révision contradictoire de la merge request, transfert vers une revue humaine, puis merge. La revue contradictoire était limitée à deux cycles de résolution avant qu&#39;un humain ne doive intervenir. Sur l&#39;ensemble du projet, nous avons livré 14 spécifications numérotées et un peu plus de 30 merge requests dans <code>labkit-ruby</code>. Dans la pratique, la boucle était plus ou moins stricte selon la personne. Bob effectuait souvent plusieurs cycles de spécification et de revue en privé avant de livrer un artefact partagé.</p><p><img alt="Diagramme de la boucle de validation" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1783518190/iejv72y7iz9i9rczcfbr.png" /></p><p>Cette boucle peut sembler complexe, mais sur du code legacy, nous pouvons nous y fier, et un agent peut l&#39;exécuter correctement.</p><h2 id="ce-qui-a-fonctionné">Ce qui a fonctionné</h2><p>La cohorte 1 constituait le test à fort enjeu : cinq clés à fort trafic, dont <code>pipelines_create</code>, <code>notes_create</code> et <code>user_sign_in</code>. Nous l&#39;avons déployée à 1 %, puis 10 %, puis 50 % le 4 mai 2026, et à 100 % le 5 mai 2026. Le commentaire de Bob ce jour-là résume à lui seul tout le modèle opérationnel :</p><p><em>« Tous les déploiements sont terminés. Pour l&#39;instant, toutes les limites de débit issues d&#39;<code>applimiter</code> et de l&#39;implémentation labkit concordent. Mais je soupçonne que c&#39;est parce qu&#39;il n&#39;y a pas beaucoup de trafic à cet endroit. Je vais essayer de générer un trafic qui dépasse la limite. »</em></p><p>Voilà à quoi ressemble un bon déploiement, et c&#39;est le genre de jugement qu&#39;aucun agent ne devrait porter à votre place. Le fait que le nouveau système fonctionne comme l&#39;ancien n&#39;est pas en soi un succès : cela peut simplement signifier que rien ne s&#39;est déclenché.</p><p>La cohorte 2 a regroupé les 95 sites d&#39;appel suivants, 83 dans le monolithe et 12 dans GitLab Enterprise Edition (EE), sous une seule paire de feature flags. Sans cette consolidation, le déploiement aurait nécessité environ 95 activations de feature flags individuelles et près de 190 modifications YAML. Les agents excellent dans ce type de déploiement mécanique à grande échelle dans un code source. Les équipes humaines, en revanche, beaucoup moins.</p><h2 id="là-où-la-boucle-a-échoué">Là où la boucle a échoué</h2><p>Le premier incident a concerné le mode « shadow ». La cohorte 2 fonctionnait en mode « shadow » depuis plusieurs jours, conformément à l&#39;ancienne implémentation. Le passage du mode observation au mode application aurait dû se dérouler sans encombre. Un petit incident s&#39;est pourtant produit.</p><p>Le nouvel adaptateur a perdu un identifiant sans déclencher d&#39;alerte sur un chemin de code non authentifié. Trois valeurs de type String étaient compressées dans deux emplacements primitifs, et la mauvaise valeur a écrasé l&#39;identifiant. Une infime proportion d&#39;utilisateurs a rencontré une erreur générique pendant une courte période.</p><p>La comparaison en mode « shadow » avait en réalité signalé une divergence sur cette clé. Nous n&#39;avions tout simplement pas encore défini notre système de labels pour distinguer une collision structurelle d&#39;une divergence normale, si bien que le signal est resté dans le tableau de bord pendant que nous montions en charge jusqu&#39;à 100 %.</p><p>Nous avons immédiatement désactivé le feature flag d&#39;application. Bob a résumé le problème structurel en une phrase :</p><p><em>« Je pense que nous devrions améliorer ce scénario une fois que nous aurons nettoyé ce désordre, et n&#39;appeler <code>ApplicationLimiter</code> qu&#39;avec des caractéristiques nommées, sans aucune portée sous forme de tableau. »</em></p><p>Le correctif immédiat a été livré deux jours plus tard. Le nettoyage structurel est au programme de la prochaine itération.</p><p>L&#39;incident a pourtant traversé chaque étape du cycle : spécification, revue contradictoire, mise en œuvre, GitLab Duo Code Review, déploiement progressif. La boucle l&#39;a à la fois détecté et laissé passer. La leçon à tirer de cette situation n&#39;est pas que les agents sont dangereux, mais que nous disposons d&#39;une observabilité, qui n&#39;est malheureusement pas capable de distinguer les modes de défaillance qui comptent vraiment.</p><p>Le 15 mai, Max a réalisé un audit sur la branche principale, m&#39;a contacté sur Slack, et a ouvert la cohorte 6 :</p><p><em>« J&#39;ai ajouté une cohorte 6 à la migration avec des éléments épars qui étaient passés entre les mailles du filet. »</em></p><p>Nous avions prévu cinq cohortes. Il nous en a fallu six. Le diagnostic est tombé quelques jours plus tard : Claude avait oublié une poignée de limites de débit propres à GitLab EE : <code>notification_emails</code>, quelques entrées de registre GitLab EE, trois clés webhook, trois clés <code>partner_*</code> de moins d&#39;une seconde, et quelques lignes d&#39;adaptateur orphelines. 17 clés sur 121 avaient échappé aux cohortes précédentes. Chaque clé avait une raison de ne pas s&#39;intégrer proprement dans les cohortes. Aucune ne devait pourtant être invisible.</p><p>Nous n&#39;avions demandé ni aux agents, ni à nous-mêmes, de tenir un décompte continu par rapport à l&#39;inventaire complet des clés.</p><p>Autre point à mentionner : Redis. Le service <code>redis-cluster-ratelimiting</code> fonctionne comme un cluster à 4 shards. L&#39;estimation initiale de Bob était honnête : « Il y a de la marge, mais pas assez pour doubler entièrement l&#39;utilisation. »</p><p>Début mai, la contrainte déjà rencontrée par le passé est réapparue, comme le mentionne Bob :</p><p><em>« Le goulot d&#39;étranglement que nous avions déjà rencontré, qui n&#39;était pas nouveau pour ce projet, en est bel et bien un. Cela signifie que nous devons faire évoluer l&#39;infrastructure pour le contourner. »</em></p><p>Nous avons augmenté le paramètre <code>maxclients</code> par paliers et nous sommes arrêtés à 75 000 connexions au lieu de viser 100 000, une fois qu&#39;il est devenu évident que davantage de connexions ferait basculer le CPU des nœuds primaires en saturation. Un seul nœud primaire par shard, un seul cœur pour l&#39;exécution des commandes. Aucun levier vertical à actionner.</p><h2 id="ce-que-les-agents-ont-réellement-changé">Ce que les agents ont réellement changé</h2><p><img alt="Diagramme du goulot d&#39;étranglement déplacé par les agents" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1783518190/bzyemaewofxyq9ikxxcb.png" /></p><p>Les agents ont déplacé le goulot d&#39;étranglement. Avec des agents qui rédigent les spécifications et implémentent le code au sein d&#39;une boucle serrée, la génération de code a cessé d&#39;être le maillon faible. La capacité de revue, l’évaluation du déploiement et l&#39;attention des opérateurs sont devenus les points de friction. C&#39;est un bien meilleur problème à avoir, mais il continue aujourd&#39;hui de mobiliser des ressources humaines.</p><p>L&#39;expérience n&#39;a pas non plus toujours été agréable. En cours de projet, Max a écrit :</p><p><em>« Résultat mitigé, je me suis retrouvé à tourner en rond avec un agent. Je me suis dit que j&#39;aurais fait ça plus vite moi-même, ce qui était agaçant. »</em></p><p>Quelques semaines plus tôt, il avait qualifié le projet de « l&#39;une des courbes d&#39;apprentissage les plus exigeantes chez GitLab ». Travailler avec des agents est une compétence à part entière, et le prix à payer pour l&#39;acquérir se traduit par des jours pendant lesquels on aurait pu progresser davantage en travaillant seul.</p><p>L&#39;autre évolution a porté sur l&#39;honnêteté quant à la définition de « terminé ». La remarque de Bob à la fin de la cohorte 1 (<em>« le feature flag par limite de débit est excessif, nous ne devrions pas procéder ainsi pour les prochaines migrations »</em>) illustre bien ce type de jugement qu&#39;aucun agent ne peut porter à votre place. Ils génèreront volontiers 95 feature flags si vous le leur demandez. Le jugement humain consiste justement à décider de ne pas le faire.</p><h2 id="où-nous-en-sommes-aujourdhui">Où nous en sommes aujourd&#39;hui</h2><p>Mi-juin, les six cohortes étaient toutes à 100 %. Les 121 clés d&#39;<code>ApplicationRateLimiter</code> passent désormais par le nouveau framework, un audit a confirmé que le chemin d’accès legacy est pratiquement réduit à néant, et nous avons ajouté un garde-fou pour qu&#39;aucune future limite de débit ne puisse le contourner silencieusement.</p><p>La migration au niveau applicatif est donc terminée. <code>RackAttack</code> est la prochaine étape. Il s&#39;agit de la couche à plus fort volume, avec environ 4 milliards de requêtes par jour. Son intergiciel (middleware) d&#39;observation puis d&#39;application est en cours de développement ; la première merge request est approuvée et en attente de merge.</p><p>Si vous souhaitez reproduire cette démarche, vous pouvez utiliser <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> pour vous aider à rédiger vos spécifications, GitLab Duo Developer pour mettre en œuvre vos tickets et <a href="https://docs.gitlab.com/user/gitlab_duo/code_review/" rel="">GitLab Duo Code Review</a> pour vous aider à fusionner vos merge requests. Mais ce n’est que la partie facile. Demandez-vous plutôt si vous avez un Bob dans votre entreprise : quelqu&#39;un qui cherchera délibérément à faire échouer le nouveau système à 1 % avant de le laisser tourner à 50 %. Demandez-vous également si vous avez un Max : quelqu&#39;un qui effectuera un audit alors que tout le monde pense que la migration est terminée. Le workflow est essentiel, mais les personnes qui composent vos équipes le sont encore plus. Si vous souhaitez tester cette approche sur votre propre code legacy, <a href="https://about.gitlab.com/fr-fr/free-trial/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">lancez-vous dès aujourd&#39;hui.</a></p>]]></content>
        <author>
            <name>Sam Wiskow</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/sam-wiskow/</uri>
        </author>
        <published>2026-08-10T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Automatisez l'attribution des éléments de travail avec un déclencheur]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/how-to-use-a-work-item-created-trigger/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/how-to-use-a-work-item-created-trigger/"/>
        <updated>2026-08-06T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Un nouveau déclencheur basé sur des événements dans <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> permet aux flows de s&#39;activer dès qu&#39;un élément de travail est créé, transformant le classement et l&#39;attribution, autrefois une tâche manuelle et chronophage, en une automatisation qui s&#39;exécute en quelques secondes. Ce guide complet vous explique comment utiliser le déclencheur « Work item created », et vous pouvez aussi suivre ce tutoriel en vidéo :</p><iframe width="560" height="315" src="https://www.youtube.com/embed/WNDYRZpOeOo?si=o_n6IBoyeQO5UhDp" title="YouTube video player" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerPolicy="strict-origin-when-cross-origin" allowFullScreen></iframe><p>Observez le flow s&#39;activer, acheminer et attribuer des tâches en temps réel, et imaginez comment une automatisation continue et sans intervention humaine pourrait bénéficier à vos propres projets.</p><h2 id="le-problème-lattribution-manuelle-ne-passe-pas-à-léchelle">Le problème : l&#39;attribution manuelle ne passe pas à l&#39;échelle</h2><p>Attribuer des éléments de travail manuellement parmi plusieurs projets est plus complexe qu&#39;il n&#39;y paraît. Il ne s&#39;agit pas d&#39;une décision unique, mais de dizaines de décisions à prendre chaque jour. Pour chaque nouveau ticket créé, quelqu&#39;un doit interrompre ses tâches, vérifier la capacité de l&#39;équipe, équilibrer les charges de travail en cours avec les nouvelles tâches entrantes, puis décider à qui confier cet élément. En tenant compte des réunions, des pauses ou des congés, l&#39;ensemble du processus peut s&#39;allonger encore davantage. Si cette approche fonctionne à petite échelle, elle pose rapidement problème à mesure que le volume augmente et entraîne des retards dans le classement des priorités, une répartition inégale du travail et des responsables d&#39;équipe qui consacrent leur temps à l&#39;attribution des tâches plutôt qu&#39;à des activités à plus forte valeur ajoutée.</p><p>Jusqu&#39;à récemment, cette friction était inhérente au fonctionnement des flows. Chaque <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/" rel="">flow de GitLab Duo</a> nécessitait une action humaine dans l&#39;interface utilisateur (par exemple, une mention, une attribution ou un événement d&#39;attribution de relecteur) pour être activé. Il n&#39;était pas possible de piloter les flows par programmation ni de les déclencher dès qu&#39;un événement se produisait sans qu&#39;une personne actionne manuellement le déclencheur. Ainsi, même un flow d&#39;attribution bien conçu devait toujours attendre qu&#39;une personne le lance.</p><h2 id="comment-le-déclencheur-work-item-created-résout-ce-problème">Comment le déclencheur « Work item created » résout ce problème</h2><p>Le déclencheur « Work item created » comble cette lacune. Il se déclenche automatiquement dès qu&#39;un nouvel élément de travail est créé dans un projet, sans aucun transfert manuel. Au lieu qu&#39;une personne remarque le ticket, évalue la charge de travail de l&#39;équipe et l&#39;attribue, un flow s&#39;active de lui-même et effectue ces étapes à sa place. Grâce aux déclencheurs, les flows s&#39;exécutent en continu et en arrière-plan dès que les conditions définies par votre organisation sont remplies, pendant que vos équipes de développement restent concentrées sur les tâches qui requièrent véritablement leur jugement.</p><h2 id="valeur-et-avantages">Valeur et avantages</h2><p>Le déclencheur « Work item created » présente les avantages suivants :</p><p><strong>Classement instantané et sans intervention</strong><br />
L&#39;attribution s&#39;effectue dès la création d&#39;un élément de travail : vous n&#39;avez plus besoin d&#39;attendre qu&#39;une personne s&#39;en charge.</p><p><strong>Passage à l&#39;échelle quel que soit le volume</strong><br />
Qu&#39;il s&#39;agisse d&#39;un seul ticket ou de centaines, le déclencheur les traite tous en quelques secondes sans alourdir la charge de travail de quiconque.</p><p><strong>Attribution plus intelligente et équilibrée</strong><br />
Le flow peut évaluer la charge de travail actuelle et la disponibilité de chaque membre de l&#39;équipe avant d&#39;attribuer un élément. Il s&#39;agit là du même raisonnement qu&#39;une personne appliquerait, mais de manière systématique.</p><p><strong>Fin des tâches répétitives pour votre équipe</strong><br />
Fini le tri manuel des éléments de travail ouverts pour déterminer qui peut s&#39;en charger : un agent prend la décision en fonction des mêmes informations que vous utiliseriez.</p><h2 id="lattribution-automatique-en-action-tutoriel-pas-à-pas">L&#39;attribution automatique en action : tutoriel pas à pas</h2><p>Pour vous donner un exemple concret, parcourons un scénario réel à l&#39;aide d&#39;un projet appelé <strong>Intra-account-transfers</strong>.</p><h3 id="_1-la-configuration-du-déclencheur">1. La configuration du déclencheur</h3><p>Nous avons créé un flow nommé « Work item assigner » et l&#39;avons configuré pour s&#39;exécuter chaque fois qu&#39;un élément de travail est créé dans ce projet.</p><p><img alt="Flow « Work item assigner » activé pour le projet intra-account-transfers" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210850/Blog/Imported/test-work-item-trigger-blog-workflow-test/image5.png" title="Flow &quot;Work item assigner&quot; activé pour le projet intra-account-transfers" /></p><h3 id="_2-la-structure-du-flow">2. La structure du flow</h3><p>Le flow « Work item assigner » utilise deux agents, chacun doté d&#39;un prompt détaillé décrivant le processus à suivre et les outils à utiliser. Le premier agent utilise <a href="https://about.gitlab.com/fr-fr/blog/introducing-gitlab-orbit/" rel="">GitLab Orbit</a> pour déterminer la charge de travail actuelle de chaque personne au sein de l&#39;organisation. GitLab Orbit est le graphe de contexte du cycle de vie pour l&#39;ingénierie logicielle, qui accélère les capacités et renforce la précision des agents d&#39;IA de GitLab Duo Agent Platform.</p><p><img alt="Définition du premier agent « determine_resource_with_least_open_work »" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210858/Blog/Imported/test-work-item-trigger-blog-workflow-test/image8.png" title="Définition du premier agent &quot;determine_resource_with_least_open_work&quot;" /></p><p><img alt="Prompt du premier agent" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210866/Blog/Imported/test-work-item-trigger-blog-workflow-test/image9.png" title="Prompt du premier agent" /></p><p>Le second agent identifie la personne ayant le moins d&#39;éléments de travail ouverts et lui attribue le nouvel élément.</p><p><img alt="Définition du second agent « assign_work_item_prompt »" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210875/Blog/Imported/test-work-item-trigger-blog-workflow-test/image4.png" title="Définition du second agent &quot;assign_work_item_prompt&quot;" /></p><p><img alt="Prompt du second agent" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210883/Blog/Imported/test-work-item-trigger-blog-workflow-test/image7.png" title="Prompt du second agent" /></p><p>La logique d&#39;attribution étant intégrée au flow, le déclencheur suffit à lui seul à mettre l&#39;ensemble du processus en marche.</p><h3 id="_3-le-déclencheur-en-action">3. Le déclencheur en action</h3><p>3.1. Nous créons un nouvel élément de travail.</p><p><img alt="Création d&#39;un nouveau ticket" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210892/Blog/Imported/test-work-item-trigger-blog-workflow-test/image2.png" title="Création d&#39;un nouveau ticket" /></p><p>3.2. Dès que le ticket est créé, le déclencheur s&#39;active et le flow « Work item assigner » démarre automatiquement. Depuis le journal d&#39;activité du flow, vous pouvez suivre sa progression étape par étape : le premier agent récupère les informations du projet et utilise les outils de GitLab Orbit pour comptabiliser les éléments de travail ouverts de chaque utilisateur au sein du groupe principal.</p><p><img alt="Le premier agent renvoie le nombre d&#39;éléments de travail ouverts pour chaque utilisateur du groupe principal" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210901/Blog/Imported/test-work-item-trigger-blog-workflow-test/image6.png" title="Le premier agent renvoie le nombre d&#39;éléments de travail ouverts pour chaque utilisateur du groupe principal" /></p><p>Le second agent identifie ensuite le membre de l&#39;équipe ayant le moins de tâches ouvertes (dans cette démo, il s&#39;agit de William), et procède à l&#39;attribution.</p><p><img alt="Le second agent sélectionne William comme responsable du ticket qui vient d&#39;être créé" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210908/Blog/Imported/test-work-item-trigger-blog-workflow-test/image1.png" title="Le second agent sélectionne William comme responsable du ticket qui vient d&#39;être créé" /></p><h3 id="_4-vérification-de-lattribution-à-la-personne-avec-le-moins-de-tâches">4. Vérification de l&#39;attribution à la personne avec le moins de tâches</h3><p>Un rapide retour sur le ticket le confirme : le nouvel élément de travail a bien été attribué automatiquement à William.</p><p><img alt="Le ticket mis à jour affiche William comme responsable" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210914/Blog/Imported/test-work-item-trigger-blog-workflow-test/image3.png" title="Le ticket mis à jour affiche William comme responsable" /></p><h3 id="_5-un-avantage-de-bout-en-bout">5. Un avantage de bout en bout</h3><p>Ce scénario illustre clairement le changement de paradigme : au lieu qu&#39;une personne classe les éléments de travail ouverts pour déterminer les personnes qui peuvent s&#39;en charger et attribue ensuite le ticket manuellement, le <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">flow personnalisé</a> de GitLab Duo Agent Platform, lancé par le déclencheur « Work item created », accomplit l&#39;ensemble de ces opérations en quelques secondes. Il libère l&#39;équipe d&#39;une décision de routine qu&#39;un agent peut prendre avec exactement les mêmes informations qu&#39;un être humain utiliserait, permettant ainsi aux équipes de concentrer leur attention là où elle est vraiment utile.</p><h3 id="_6-pour-aller-plus-loin">6. Pour aller plus loin</h3><p>Voici quelques améliorations potentielles à apporter à ce flow personnalisé :</p><ul><li>Ajouter une connectivité Model Context Protocol (<a href="https://about.gitlab.com/fr-fr/topics/ai/model-context-protocol/" rel="">MCP</a>) à votre système RH (ou de gestion des congés) afin que l&#39;agent puisse prendre en compte les dates de congés lors de l&#39;attribution d&#39;un élément de travail.</li><li>Ajouter une connectivité MCP aux calendriers des membres de vos équipes afin que l&#39;agent puisse tenir compte de leur disponibilité lors de l&#39;attribution d&#39;un élément de travail.</li></ul><h2 id="premiers-pas">Premiers pas</h2><p>L&#39;attribution des nouveaux éléments de travail à grande échelle a toujours représenté une charge silencieuse : il s&#39;agit de dizaines de petites décisions par jour, chacune nécessitant de vérifier les charges de travail et les disponibilités avant d&#39;attribuer un ticket. Ce processus ne suit pas le rythme à mesure que le volume augmente. Le déclencheur « Work item created » dans GitLab Duo Agent Platform supprime ce goulot d&#39;étranglement en activant un flow dès la création d&#39;un élément de travail, sans transfert manuel. Comme le montre le tutoriel pas à pas ci-dessus, un flow à deux agents alimenté par GitLab Orbit peut consulter la charge de travail réelle de l&#39;équipe et attribuer chaque nouvel élément à la personne la mieux placée pour le prendre en charge, le tout en quelques secondes. Le résultat : un classement plus rapide, des charges de travail mieux équilibrées et une équipe libre de se concentrer sur les tâches qui nécessitent véritablement un jugement humain.</p><blockquote><p><a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">Commencez un essai gratuit de GitLab Duo Agent Platform dès aujourd&#39;hui.</a></p></blockquote>]]></content>
        <author>
            <name>Cesar Saavedra</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/cesar-saavedra/</uri>
        </author>
        <published>2026-08-06T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Codage agentique : le contexte fait la différence]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/agentic-coding-only-as-good-as-context/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/agentic-coding-only-as-good-as-context/"/>
        <updated>2026-08-03T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Chaque semaine, une nouvelle démonstration d&#39;agent de codage montre comment un prompt se transforme en une merge request en moins de cinq minutes. Ces démonstrations mettent souvent en avant un cas d&#39;utilisation très spécifique qui n’est pas encore en production, et font l&#39;impasse sur tout ce qui se passe <em>après</em> le commit.</p><p>La merge request ne contient pas de lien vers le ticket qu&#39;elle était censée corriger. Le <a href="https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/" rel="" title="Qu&#39;est-ce qu&#39;un pipeline CI/CD ?">pipeline CI/CD</a> échoue car l&#39;agent ignorait l&#39;existence d&#39;une règle de linter ajoutée récemment. Un scan de sécurité signale une dépendance que l&#39;agent a intégrée sans vérifier la liste des dépendances approuvées du projet.</p><p>Il s’agit là de défaillances liées au contexte, qui déterminent si le codage agentique accélère la livraison ou ralentit le travail des équipes. Mais lorsque les équipes de développement utilisent des agents de codage avec GitLab, ceux-ci s&#39;appuient sur les tickets, les pipelines et les politiques de sécurité déjà présents dans la plateforme afin de détecter les problèmes et y remédier dans le workflow de développement.</p><p>Cet article présente les changements qui interviennent lorsque vous fournissez à un agent de codage un contexte de cycle de vie de plus en plus riche, allant d&#39;une visibilité limitée à un dépôt à une visibilité complète sur la plateforme, en s&#39;appuyant sur deux tutoriels GitLab. Vous découvrirez comment le contexte de la plateforme améliore la qualité du code, les évaluations de sécurité et les cycles de revue, et ce que les équipes plateforme peuvent faire dès aujourd&#39;hui pour combler cet écart.</p><h2 id="mise-en-pratique-du-contexte">Mise en pratique du contexte</h2><p>Les tutoriels GitLab montrent ce qui se passe lorsque vous fournissez à un agent de codage externe un contexte de plateforme complet de manière progressive. Le premier tutoriel présente <a href="https://about.gitlab.com/fr-fr/blog/claude-code-and-gitlab/" rel="">trois workflows avec Claude Code</a> : la correction d&#39;un crash de capteur C++, l’enrichissement d&#39;une session avec le serveur <a href="https://about.gitlab.com/fr-fr/topics/ai/model-context-protocol/" rel="" title="Qu&#39;est-ce que le Model Context Protocol ?">Model Context Protocol (MCP)</a> de GitLab et l’utilisation de Claude Code comme agent externe dans une merge request pour traiter les retours de revue. Le second tutoriel suit la même progression avec <a href="https://about.gitlab.com/fr-fr/blog/fix-bugs-with-codex-and-gitlab/" rel="">Codex et GitLab</a>, en corrigeant cette fois-ci un bogue de filtrage WebSocket en Rust dans ces trois scénarios.</p><p><strong>Scénario 1 : l&#39;agent ne voit que le dépôt</strong><br />
Vous dirigez l&#39;agent vers le code source et décrivez le problème dans un prompt. L&#39;agent lit les fichiers, propose un correctif et lance le build. Le correctif fonctionne, mais il repose uniquement sur ce que l&#39;agent déduit des fichiers locaux et de votre prompt. Il ne comprend pas le contexte de votre organisation : les critères d&#39;acceptation du ticket, les exigences non fonctionnelles, ni les normes de revue définies dans la configuration CI de votre projet. Le code se compile, mais ne correspond pas forcément aux besoins de votre équipe.</p><p><img alt="Scénario 1 : l&#39;agent ne voit que le dépôt" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779986318/cykpoimst2bhiqxkmkyi.png" /></p><p><strong>Scénario 2 : l&#39;agent voit le dépôt et le ticket GitLab</strong><br />
Connectez le <a href="https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/" rel="">serveur MCP de GitLab</a> pour que l&#39;agent puisse récupérer le ticket avant d&#39;écrire la moindre ligne de code. Il lit alors les exigences fonctionnelles, les notes d&#39;implémentation, les labels et les jalons. Dans le tutoriel Codex et GitLab, cela signifie que l&#39;agent ajoute <code>Closes #32</code> à la description de la merge request, car il comprend la relation entre la modification du code et le ticket. Dans le tutoriel Claude Code, l&#39;agent utilise <code>get_issue</code> pour récupérer le rapport de bogue, puis <code>create_merge_request</code> pour créer la merge request avec les bonnes références. Cette fois, le correctif correspond à ce que l&#39;équipe avait planifié.</p><p><img alt="Scénario 2 : l&#39;agent voit le dépôt et le ticket GitLab" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779986319/wvbxpdm79ucuicyqmbhx.png" /></p><p><strong>Scénario 3 : l&#39;agent intervient dans la merge request</strong><br />
Une fois la merge request  créée, le <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/code_review/" rel="">flow Code Review de GitLab</a> s&#39;exécute automatiquement et partage ses retours. Dans les deux tutoriels, l&#39;agent de codage est invoqué en tant qu&#39;<a href="https://docs.gitlab.com/user/duo_agent_platform/agents/external/" rel="">agent externe</a> au sein de la merge request pour traiter ces retours. Il ajoute les tests manquants, met à jour les commentaires de documentation et corrige les lacunes de validation détectées lors de la revue. L&#39;agent effectue un commit directement sur la branche de la merge request, les pipelines CI/CD s&#39;exécutent automatiquement sur le nouveau commit, et un relecteur humain peut inspecter le résultat sans changer d&#39;outil.</p><p>Dans ce scénario, les deux tutoriels démontrent une réduction du nombre de cycles de revue et un délai réduit avant le merge.</p><p><img alt="Scénario 3 : l&#39;agent intervient dans la merge request" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779986318/wnijcgfsh06rrxkyex09.png" /></p><p><img alt="Suite du scénario 3 : l&#39;agent intervient dans la merge request" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779986318/sbybw7hs3dkbxplqblgj.png" /></p><h2 id="importance-du-codage-agentique-et-de-la-visibilité-sur-la-plateforme">Importance du codage agentique et de la visibilité sur la plateforme</h2><p>Si vous dirigez une équipe plateforme, vous décidez de la manière dont le développement assisté par l&#39;IA fonctionne au sein de votre organisation. Vous définissez quels agents sont autorisés, quels outils ils peuvent utiliser, comment leurs données de sortie sont vérifiées et à quel moment du processus les décisions humaines interviennent.</p><p>L&#39;agent a besoin de contexte pour produire des modifications auxquelles votre organisation peut se fier, et ce contexte réside dans votre plateforme <a href="https://about.gitlab.com/fr-fr/topics/devsecops/" rel="" title="Qu&#39;est-ce que le DevSecOps ?">DevSecOps</a>. Votre outil de suivi des tickets répertorie les exigences. La <a href="https://docs.gitlab.com/topics/build_your_application/" rel="">configuration CI/CD</a> définit le niveau de qualité attendu. Les instructions de <a href="https://docs.gitlab.com/development/code_review/" rel="">revue de code</a> codifient le style et les normes de l&#39;équipe. Les <a href="https://docs.gitlab.com/user/application_security/detect/" rel="">scanners de sécurité</a> appliquent les politiques en matière de vulnérabilités. Enfin, c&#39;est dans la merge request que tout converge : l&#39;étape où s&#39;effectue le contrôle humain.</p><p><img alt="Instructions de revue de code" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779986319/iq9yeutzn7qqzyl3wckf.png" /></p><p>Un agent intégrant le contexte de la plateforme suit le même workflow que celui utilisé par les équipes de développement, avec les mêmes garde-fous. La différence réside dans les cycles de revue, les taux de réussite des pipelines et le délai avant le merge.</p><p>Un agent basé sur un <a href="https://about.gitlab.com/fr-fr/blog/what-is-an-ide/" rel="" title="Qu&#39;est-ce qu&#39;un IDE?">IDE</a> ou un terminal, aussi performant soit-il, ne voit que les fichiers qu&#39;on lui fournit. La plateforme, elle, accède à l&#39;ensemble du cycle de vie du ticket, du pipeline et de la politique de sécurité jusqu&#39;à la cible de déploiement et aux règles d&#39;approbation. Cet écart de visibilité explique pourquoi la plateforme de votre organisation, et non l&#39;agent, détermine ce qui est livré en toute sécurité.</p><h2 id="production-de-code-accélérée-par-les-agents-limpact-sur-la-sécurité">Production de code accélérée par les agents : l&#39;impact sur la sécurité</h2><p>Dans tous les tutoriels, les pipelines CI/CD et la revue de code s&#39;exécutent automatiquement sur chaque merge request créée par l&#39;agent de codage. Les scans de sécurité font partie des pipelines, même si les tutoriels se concentrent sur la qualité du code plutôt que sur les résultats de sécurité. Pour les équipes plateforme, le contexte devient encore plus crucial lorsque la sécurité entre en jeu.</p><p>Les agents de codage produisent davantage de code, plus rapidement. Plus de code signifie plus de vulnérabilités introduites, plus de problèmes signalés par les scanners et plus de merge requests de correction générées.</p><ul><li><strong>Avant</strong> l&#39;arrivée des agents de codage dans le workflow, le goulot d&#39;étranglement dans la <a href="https://about.gitlab.com/fr-fr/blog/what-is-vulnerability-management/" rel="" title="Qu&#39;est-ce que la gestion des vulnérabilités ?">gestion des vulnérabilités</a> se situait du côté de la sécurité applicative : scan, hiérarchisation des résultats, transmission des plus importants aux équipes de développement, puis attente d&#39;un correctif.</li><li><strong>Désormais</strong>, grâce aux agents qui accélèrent la production de code et la remédiation, le goulot d&#39;étranglement se déplace. Le workflow passe de la question « quelle vulnérabilité corriger en premier » à « quelle merge request de correctif générée par l&#39;IA doit être revue et approuvée par un humain en premier ».</li></ul><p>Cette décision nécessite des informations contextuelles dont l&#39;agent de codage ne dispose pas : le code du projet dans son ensemble, le flux de données complet, la cible de déploiement et les politiques de sécurité applicables au sein de votre organisation.</p><ul><li><strong>Avec un contexte</strong>, la priorisation s&#39;affine : un agent qui s’appuie sur le code environnant, le flux de données et les politiques applicables peut classer les résultats en fonction de l&#39;exposition réelle dans votre environnement, plutôt que selon des scores de gravité génériques et mettre en évidence les éléments réellement importants avant que les relecteurs n&#39;y consacrent du temps.</li></ul><p>Tout comme l&#39;agent de codage du second scénario produisait un meilleur code lorsqu&#39;il pouvait lire le ticket GitLab, la couche de sécurité produit de meilleures évaluations lorsqu&#39;elle peut lire le contexte complet de l&#39;application plutôt qu&#39;un seul fichier.</p><p>La couche de sécurité de GitLab analyse les résultats en tenant compte du contexte complet du projet, <a href="https://docs.gitlab.com/user/application_security/vulnerabilities/false_positive_detection/" rel="">filtre les faux positifs détectés</a> et signale les vulnérabilités confirmées. Lorsqu&#39;une vulnérabilité est confirmée, la <a href="https://docs.gitlab.com/user/application_security/vulnerabilities/agentic_vulnerability_resolution/" rel="">résolution agentique des vulnérabilités SAST</a> lit le code vulnérable et son contexte environnant à partir du dépôt, puis crée automatiquement une merge request avec un correctif proposé. Le pipeline s&#39;exécute pour valider le correctif. Un relecteur humain le vérifie et prend la décision finale de fusionner la merge request. L&#39;agent se charge de la remédiation ; et le modèle de gouvernance reste intact.</p><p>Les contrôles qualité <a href="https://about.gitlab.com/fr-fr/topics/ci-cd/" rel="" title="Qu&#39;est-ce que le CI/CD ?">CI/CD</a>, les instructions de revue de code et les scans de sécurité opèrent tous dans la merge request, là où les agents de codage effectuent également leur travail. <strong>Plus ces contrôles sont efficaces au moment de la création du code, moins les vulnérabilités atteignent la production.</strong></p><h2 id="instructions-personnalisées-avec-agentsmd">Instructions personnalisées avec <code>AGENTS.md</code></h2><p>Les deux tutoriels s&#39;appuient sur les fichiers <code>AGENTS.md</code> présents dans le dépôt. Il s&#39;agit d&#39;<a href="https://docs.gitlab.com/user/duo_agent_platform/customize/agents_md/" rel="">instructions personnalisées</a> destinées aux agents, qui portent sur la structure du projet, les commandes à exécuter et les exigences en matière de qualité du code, y compris ce qu&#39;il ne faut pas modifier.</p><p>Dans le tutoriel Codex et GitLab, le fichier <code>AGENTS.md</code> définissait tout, de l&#39;édition Rust au modèle de concurrence asynchrone en passant par la politique d&#39;épinglage des images CI. L’agent n’avait pas besoin que le contexte soit répété dans le prompt. Il lisait le fichier et suivait les règles.</p><p><img alt="Configuration locale de la chaîne d&#39;outils" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779986319/bciynqcmc1gumgcx4mjo.png" /></p><p>Cet investissement ponctuel porte ses fruits à chaque interaction avec l’agent, que celui-ci s&#39;exécute en local dans le terminal d&#39;un développeur, qu&#39;il soit connecté via MCP ou qu&#39;il fonctionne en tant qu&#39;agent externe dans une merge request. Standardiser le fichier <code>AGENTS.md</code> d’un projet à l’autre améliore la qualité des résultats fournis par les agents, car chaque session d&#39;agent, qu’elle soit locale ou distante, lit les mêmes règles.</p><h2 id="limites-de-la-fenêtre-de-contexte">Limites de la fenêtre de contexte</h2><p>Les <a href="https://about.gitlab.com/fr-fr/blog/large-language-model/" rel="" title="Qu&#39;est-ce qu&#39;un LLM ?">grands modèles de langage</a> disposent de fenêtres de contexte déterminées, et des recherches ont montré que <a href="https://vercel.com/blog/we-removed-80-percent-of-our-agents-tools" rel="">les performances des modèles se dégradent lorsque l&#39;utilisation du contexte dépasse 30 à 40 %</a>. Plus une session contient d&#39;outils, de fichiers et d&#39;instructions, moins le raisonnement de l’agent est fiable.</p><p>Votre organisation souhaite fournir à l&#39;agent un contexte complet sur le cycle de vie : ticket, instructions de revue, historique des pipelines et politique de sécurité. Mais vous souhaitez également que ce contexte soit structuré, pertinent et transmis efficacement.</p><p>Au lieu que chaque session d&#39;agent doive reconstituer le contexte en lisant des fichiers et en effectuant des appels API inutiles (ce qui dilue la fenêtre de contexte et consomme des jetons), une plateforme capable de comprendre les relations entre le code, les tickets, les pipelines et les déploiements peut fournir le bon contexte au bon moment. GitLab capture bon nombre de ces relations tout au long du cycle de vie afin de transmettre le contexte plus efficacement. Lorsque la plateforme sait à quel ticket une merge request se rapporte, quels services sont impactés par une modification du code et quels pipelines valident le résultat, elle peut transmettre ces informations sous forme de contexte structuré plutôt que de les reconstituer à partir de fragments.</p><p>L&#39;efficacité des workflows de développement assistés par l&#39;IA de votre organisation dépend de la capacité de votre plateforme à fournir un contexte structuré, et non de la taille de la fenêtre de contexte de votre modèle.</p><h2 id="un-cycle-de-revue-raccourci-grâce-aux-agents">Un cycle de revue raccourci grâce aux agents</h2><p>Lorsqu&#39;un agent de codage traite les retours de revue d&#39;une merge request, il agit sur la revue. L&#39;agent lit les commentaires, apporte les modifications demandées, effectue un commit et laisse le CI/CD valider le résultat. Le relecteur humain valide toujours le résultat, en l’approuvant ou en demandant des modifications supplémentaires et prend la décision finale de fusionner la merge request.</p><p>Les règles d&#39;approbation, les propriétaires du code, les politiques de sécurité et les pistes d&#39;audit restent en place. L&#39;agent accélère le cycle de revue sans contourner les contrôles qui l&#39;encadrent.</p><p>Les agents externes de <a href="https://docs.gitlab.com/user/duo_agent_platform/agents/external/" rel="">GitLab Duo Agent Platform</a> peuvent être davantage intégrés avec des <a href="https://docs.gitlab.com/user/duo_agent_platform/triggers/" rel="">déclencheurs basés sur des événements</a> et des <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">flows personnalisés</a> afin d&#39;offrir aux équipes de plateforme un contrôle sur le moment et la manière dont les agents interviennent dans le workflow.</p><h2 id="vos-premiers-pas-avec-le-codage-agentique">Vos premiers pas avec le codage agentique</h2><p>Si vous évaluez la manière dont les agents de codage s&#39;intègrent dans le workflow de développement de votre organisation :</p><p><strong>Choisissez un bogue visible dans un projet réel.</strong> Définissez le comportement attendu dans un ticket GitLab avec des exigences claires. Suivez la même progression que celle présentée dans les tutoriels : corrigez-le localement avec l&#39;agent travaillant depuis le dépôt, connectez le MCP de GitLab pour que l&#39;agent travaille depuis le ticket, puis utilisez l&#39;agent comme relecteur externe pour prendre en compte les retours dans la merge request.</p><p><strong>Investissez dans <code>AGENTS.md</code>.</strong> Documentez le fonctionnement du dépôt, les commandes à surveiller et les attentes en matière de qualité du code. Ces instructions garantissent des résultats de meilleure qualité fournis par les agents, qui s’améliorent au fil du temps à mesure que davantage d’agents et d&#39;équipes de développement interagissent avec le projet.</p><p><strong>Surveillez la consommation liée au contexte.</strong> Si les sessions des agents sont lentes, coûteuses ou produisent des résultats superficiels, le problème est probablement dû au contexte fourni au modèle, et non au modèle lui-même. Un contexte structuré et pertinent transmis via des intégrations de plateforme, donne de meilleurs résultats que le simple dépôt de fichiers bruts.</p><p><strong>Vérifiez la couverture de sécurité.</strong> À mesure que les agents de codage génèrent davantage de merge requests entre les projets, assurez-vous que chaque projet fait l&#39;objet d&#39;un scan. Appliquez des <a href="https://docs.gitlab.com/user/application_security/configuration/security_configuration_profiles/" rel="">profils de configuration de sécurité</a> au niveau du groupe afin que les scanners soient activés automatiquement, puis utilisez l&#39;<a href="https://docs.gitlab.com/user/application_security/security_inventory/" rel="">inventaire de sécurité</a> pour confirmer la couverture et identifier les zones de concentration des vulnérabilités.</p><h2 id="lancez-vous-dès-aujourdhui-dans-le-codage-agentique">Lancez-vous dès aujourd’hui dans le codage agentique</h2><p>Les organisations qui tireront le meilleur parti du codage agentique seront celles qui disposent de plateformes DevSecOps offrant aux agents le contexte et les contrôles nécessaires pour livrer en toute sécurité.</p><p>Si vous n&#39;utilisez pas encore GitLab Duo Agent Platform, vous pouvez commencer <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">un essai gratuit</a>.</p><p>Si vous utilisez déjà GitLab dans l&#39;édition gratuite, vous pouvez vous inscrire à GitLab Duo Agent Platform en <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">suivant ces étapes</a>.</p><p>Et si vous êtes déjà abonné à GitLab Premium ou GitLab Ultimate, lancez-vous en <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">activant GitLab Duo Agent Platform</a> et en utilisant les crédits promotionnels GitLab <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">inclus dans votre abonnement</a>.</p>]]></content>
        <author>
            <name>Jessica Taylor</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/jessica-taylor/</uri>
        </author>
        <published>2026-08-03T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Pourquoi GitLab a signé la lettre Open Weights and American AI Leadership]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/open-weight-model-letter/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/open-weight-model-letter/"/>
        <updated>2026-07-29T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Cette semaine, GitLab a signé la lettre <a href="https://www.microsoft.com/en-us/corporate-responsibility/topics/open-weight/" rel="">Open Weights and American AI Leadership</a>, rejoignant ainsi de nombreuses autres entreprises technologiques qui soutiennent un écosystème d&#39;IA ouvert et robuste.</p><p>Cette lettre défend l&#39;idée que les poids ouverts stimulent l&#39;innovation, offrent aux clients un meilleur contrôle et constituent une voie importante vers la sécurité de l&#39;IA. Au-delà d&#39;une position politique que nous partageons, ce principe est au cœur de notre vision de l&#39;ingénierie agentique : les équipes donnent le meilleur d&#39;elles-mêmes lorsqu&#39;elles peuvent choisir le modèle le plus adapté à leurs besoins.</p><p>En tant que plateforme d&#39;orchestration intelligente pour le <a href="https://about.gitlab.com/fr-fr/topics/devsecops/" rel="" title="Qu&#39;est-ce que le DevSecOps ?">DevSecOps</a>, GitLab allie rapidité et contrôle au service du développement logiciel agentique, et place le choix du client au cœur de sa démarche en orchestrant le cycle de vie logiciel et en prenant en charge plusieurs modèles tout au long du workflow des équipes.</p><h2 id="permettre-aux-clients-de-choisir-leurs-modèles-dia">Permettre aux clients de choisir leurs modèles d&#39;IA</h2><p>De nombreuses organisations manifestent un intérêt croissant pour un accès encadré aux meilleurs modèles de base et aux modèles à poids ouverts. GitLab prend en charge les deux.</p><p>Les modèles de base offrent souvent des capacités polyvalentes, tandis que les modèles à poids ouverts permettent aux clients de mieux maîtriser les coûts, le déploiement et la résidence des données. Notre objectif est d&#39;aider les clients à les combiner selon leurs besoins.</p><p>L&#39;une des décisions les plus critiques pour les dirigeants d&#39;entreprise est de protéger leurs logiciels et leur propriété intellectuelle stratégique contre les menaces liées à la sécurité, à la confidentialité et à la concurrence. Les organisations ne devraient pas être contraintes de dépendre d&#39;un seul fournisseur de cloud ou de modèles d&#39;IA.</p><p>GitLab est la seule plateforme à la fois neutre vis-à-vis du cloud et des modèles d&#39;IA. Cette liberté de choix ne peut être préservée que si le marché des modèles reste ouvert. Les modèles à poids ouverts offrent aux équipes de développement la possibilité de choisir où exécuter leurs modèles d&#39;IA, dans des environnements air-gapped si nécessaire, tout en conservant le contrôle de leur code.</p><h2 id="notre-position">Notre position</h2><p>À l&#39;instar des décideurs politiques, nous souhaitons un écosystème d&#39;IA sûr et sécurisé, et considérons l&#39;ouverture comme un élément essentiel pour y parvenir. Nous soutenons les politiques qui préservent la capacité à développer, distribuer et utiliser des modèles à poids ouverts, sous réserve de mesures de protection ciblées et fondées sur les risques, ainsi que d&#39;outils adaptés pour lutter contre les usages malveillants avérés. Ces types d&#39;interventions peuvent jouer un rôle significatif dans le développement d&#39;un écosystème robuste, où plusieurs fournisseurs de modèles (ouverts et propriétaires) peuvent se concurrencer sur le fond, au bénéfice de l&#39;innovation, de la sécurité et du choix des clients.</p><h2 id="liens-connexes">Liens connexes</h2><ul><li><a href="https://about.gitlab.com/fr-fr/ai-transparency-center/" rel="">Centre pour la transparence de l&#39;IA de GitLab</a></li><li><a href="https://about.gitlab.com/fr-fr/blog/why-enterprise-independence-matters-more-than-ever-in-devsecops/" rel="">L&#39;indépendance des entreprises : un sujet plus important que jamais en DevSecOps</a></li></ul>]]></content>
        <author>
            <name>Bill Staples</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/bill-staples/</uri>
        </author>
        <published>2026-07-29T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Claude Opus 5 sur GitLab : un raisonnement conçu pour les tâches complexes]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/claude-opus-5-on-gitlab-duo-agent-platform/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/claude-opus-5-on-gitlab-duo-agent-platform/"/>
        <updated>2026-07-28T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Une erreur sur une tâche courante peut vous coûter quelques minutes. En revanche, une erreur lors d’une refactorisation de grande envergure ou d&#39;une session de débogage couvrant des mois d&#39;historique de commits peut avoir des conséquences bien plus lourdes, car elle s’accumule silencieusement sur des centaines d&#39;échanges. Au moment où vous la détectez, chaque étape construite par-dessus doit également être défaite. C&#39;est là toute la différence entre un travail qui récompense la rapidité et un travail de haute complexité qui exige d’être parfait dès le départ.</p><p>Le dernier modèle d&#39;IA d&#39;Anthropic, Claude Opus 5, désormais disponible sur <a href="https://docs.gitlab.com/user/duo_agent_platform/" rel="">GitLab Duo Agent Platform</a>, est conçu pour les tâches les plus exigeantes pour un agent. Avec Opus 5, vos équipes d&#39;ingénierie peuvent confier aux agents des tâches plus complexes et critiques. Lors de l’évaluation interne menée par GitLab, Opus 5 a résolu 93,3 % des tâches de référence, soit une amélioration de 20,3 points par rapport au taux de résolution de 73,0 % d&#39;Opus 4.8.</p><blockquote><p><strong>« Les équipes qui tirent le meilleur parti des agents d&#39;IA peuvent leur confier leurs tâches les plus complexes et les plus critiques, avec la certitude que le raisonnement tiendra la route du début à la fin. »</strong></p><p>— Stuart Moncada, VP, AI Product Management, GitLab</p></blockquote><h2 id="un-raisonnement-qui-résiste-à-la-complexité">Un raisonnement qui résiste à la complexité</h2><p>Certaines équipes hésitent à confier leurs tâches les plus complexes à un agent, car les erreurs sont coûteuses à corriger. Sur des tâches de longue durée et de grande complexité, le raisonnement d&#39;un agent doit rester cohérent du début à la fin. Grâce au raisonnement approfondi d&#39;Opus 5, un plus grand nombre de vos tâches complexes, comme les fonctionnalités impliquant plusieurs fichiers et les refactorisations de grande envergure, sont résolues correctement dès la première tentative, ce qui réduit le temps consacré au diagnostic et aux nouvelles tentatives après des exécutions infructueuses. Les équipes qui utilisent GitLab Duo Agent Platform avec Opus 5 peuvent s&#39;attendre à moins de correctifs partiels, avec davantage de tâches prêtes à être fusionnées.</p><p>Cette fiabilité s&#39;étend également à l&#39;exhaustivité. Lors des tests internes de GitLab, Opus 5 a mené à bien 100 % des tâches qu&#39;il a tentées, égalant le taux de complétion d&#39;Opus 4.8. La différence réside dans la qualité des résultats : un plus grand nombre de solutions proposées par Opus 5 sont vérifiées comme correctes, ce qui porte le taux de résolution à 93,3 %, contre 73,0 % pour Opus 4.8.</p><p>L&#39;une des tâches de l&#39;évaluation de GitLab consistait à implémenter la prise en charge d&#39;une connexion SSO simulable dans un flux d&#39;authentification CLI, une modification couvrant cinq fichiers, incluant de nouveaux types exportés et des champs de configuration. Plusieurs autres modèles testés n&#39;ont produit aucune tentative de correction. Opus 5, quant à lui, a développé l&#39;implémentation complète, l&#39;a validée et a ouvert une merge request.</p><p>Vous pouvez vous attendre à la même précision lors de la revue de code. Opus 5 signale les véritables bogues et génère peu de faux positifs, ce qui permet à vos équipes de rester concentrées sur les vulnérabilités réelles et de passer moins de temps à filtrer le bruit.</p><p>Si votre charge de travail fait tourner plusieurs agents simultanément, vous perdez moins de temps à démêler les conflits entre eux. Opus 5 assure la coordination des sous-agents, en veillant à ce qu&#39;ils n&#39;interfèrent pas dans le travail des autres. Les modèles « writer-verifier » détectent les problèmes entre les agents avant qu&#39;ils ne vous parviennent, avec un agent vérifiant les données de sortie d&#39;un autre avant qu&#39;elle ne soit acceptée. Les équipes qui mènent des sessions plus longues et plus autonomes avec davantage d&#39;agents en parallèle obtiennent les meilleurs résultats.</p><p>Pour les charges de travail sensibles aux coûts qui exécutent plusieurs agents en parallèle, les <a href="https://about.gitlab.com/fr-fr/blog/gitlab-18-11-budget-guardrails-for-gitlab-credits/" rel="">plafonds d&#39;utilisation des GitLab Credits</a> vous permettent de fixer une limite stricte sur les dépenses, afin que le travail en parallèle ne dépasse jamais votre budget.</p><h2 id="la-vitesse-va-de-pair-avec-la-profondeur">La vitesse va de pair avec la profondeur</h2><p>Sur les tests de performance les plus exigeants de GitLab, Opus 5 associe fiabilité et rapidité. Au 95e percentile, c&#39;est-à-dire dans la partie la plus lente de ses exécutions, Opus 5 a terminé 2,2 % plus vite qu&#39;Opus 4.8 (768 secondes contre 784,98 secondes) et 21,9 % plus vite que Sonnet 4.6 (768 secondes contre 982,57 secondes). Fiabilité et rapidité vont de pair. Pour vos équipes, cela se traduit par des délais d&#39;exécution plus prévisibles, même pour vos exécutions les plus longues.</p><h2 id="choisir-le-bon-modèle-selon-la-tâche">Choisir le bon modèle selon la tâche</h2><p>Le choix du modèle dépend de la tâche à accomplir, et non d&#39;une politique unique à l&#39;échelle de l&#39;organisation. Les modèles de la classe Sonnet prennent en charge l’essentiel du travail de développement quotidien : ils sont rapides, abordables et fiables pour les tâches que la plupart des équipes exécutent en continu. Optez pour Opus 5 lorsque le travail exige un raisonnement plus approfondi : les débogages les plus complexes, les refactorisations les plus importantes, les décisions que vous ne souhaitez pas revoir.</p><p>Vous définissez ce choix directement dans votre instance GitLab via la <a href="https://docs.gitlab.com/user/duo_agent_platform/model_selection/" rel="">sélection de modèle</a>. Quel que soit le modèle choisi, il s&#39;exécute dans la même infrastructure : la couche de contexte, les contrôles de politique et la piste d&#39;audit qui couvrent chaque modèle sur GitLab Duo Agent Platform.</p><p><img alt="Opus 5 sur GitLab" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785170335/jjimrfrttyyskwa96lnk.png" /></p><h2 id="mettez-opus-5-à-contribution">Mettez Opus 5 à contribution</h2><p>Claude Opus 5 est disponible dès maintenant sur GitLab Duo Agent Platform et, à l&#39;instar des autres modèles, fonctionne avec les <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#models" rel="">GitLab Credits</a>. Vous découvrez GitLab Duo Agent Platform ? <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="">Démarrez un essai gratuit</a> dès aujourd&#39;hui. Vous êtes déjà abonné à GitLab Premium ou GitLab Ultimate ? <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">Activez GitLab Duo Agent Platform</a> et utilisez les <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">GitLab Credits inclus dans votre abonnement</a>.</p>]]></content>
        <author>
            <name>Brittany Lutz</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/brittany-lutz/</uri>
        </author>
        <published>2026-07-28T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Planification Agile : guide complet pour livrer des logiciels plus rapidement]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/what-is-agile-planning/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/what-is-agile-planning/"/>
        <updated>2026-07-24T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>La <strong>planification Agile</strong> répond à un constat partagé par de nombreuses équipes : les exigences évoluent, les priorités changent et les plans détaillés établis en début de projet deviennent rapidement obsolètes. Plutôt que de lutter contre cette réalité, l&#39;approche Agile l&#39;intègre comme une donnée fondamentale du processus, en structurant le travail en itérations courtes et en réévaluant régulièrement les priorités.</p><p>Dans le développement moderne, cette planification ne vit plus en silo : elle s’inscrit dans un cycle DevSecOps continu où les idées deviennent du code testé, sécurisé et déployé en production. L’objectif n’est pas seulement de « mieux planifier », mais de raccourcir le temps entre l’idée et la valeur réellement livrée aux utilisateurs.</p><p>Les équipes livrent ainsi des fonctionnalités exploitables plus vite, s&#39;adaptent aux retours des utilisateurs et réduisent le risque de construire un produit déconnecté des besoins réels.</p><p>Ce guide présente les fondamentaux de la planification Agile et ses principales méthodologies, puis détaille les étapes pour mettre en place des pratiques efficaces, en montrant comment les connecter au cycle de développement logiciel.</p><blockquote><p><strong><a href="https://about.gitlab.com/fr-fr/free-trial/devsecops/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">→ Commencez un essai gratuit de GitLab Ultimate.</a></strong></p></blockquote><h2 id="quest-ce-que-la-planification-agile">Qu&#39;est-ce que la planification Agile ?</h2><p>La planification Agile désigne une approche de gestion de projet qui privilégie l&#39;<strong>adaptation continue</strong> plutôt que le respect strict d&#39;un plan initial. Contrairement au modèle en cascade (Waterfall), où chaque phase doit être terminée avant de passer à la suivante, la planification Agile découpe le travail en itérations courtes. Chaque cycle vise à produire un incrément de produit livrable et porteur de valeur.</p><p>Dans le développement logiciel, les exigences évoluent constamment. Les besoins des utilisateurs se précisent au fil du temps, les contraintes techniques apparaissent en cours de route et le marché peut évoluer entre le début et la fin d&#39;un projet. Plutôt que de considérer ces changements comme des perturbations, la planification Agile les intègre comme une composante inhérente au processus.</p><p>L&#39;origine de cette philosophie remonte à février 2001, lorsque 17 experts du développement logiciel se sont réunis à Snowbird, dans l&#39;Utah, pour trouver un terrain d&#39;entente entre leurs différentes pratiques. De cette rencontre est né le <strong>Manifeste Agile</strong>, un document fondateur qui pose les bases d&#39;une nouvelle façon de concevoir les projets.</p><p>Depuis, l&#39;agilité s&#39;est étendue bien au-delà du développement logiciel pour toucher les équipes IT, produit, marketing, ainsi que les organisations adoptant les pratiques <a href="https://about.gitlab.com/fr-fr/topics/devops/" rel="" title="Qu&#39;est-ce que le DevOps ?">DevOps</a> et <a href="https://about.gitlab.com/fr-fr/topics/devsecops/" rel="" title="Qu&#39;est-ce que le DevSecOps ?">DevSecOps</a>.</p><h3 id="les-quatre-valeurs-du-manifeste-agile">Les quatre valeurs du Manifeste Agile</h3><p>Le <a href="https://fr.wikipedia.org/wiki/Manifeste_agile" rel="">Manifeste Agile</a> repose sur quatre valeurs fondamentales qui guident toute démarche de planification Agile.</p><p>La première place les <strong>individus et leurs interactions</strong> au-dessus des processus et des outils. Concrètement, cela signifie qu&#39;une équipe qui communique bien livrera toujours mieux qu&#39;une équipe dotée des meilleurs outils mais qui travaille en silos.</p><p>La deuxième valeur privilégie le <strong>logiciel fonctionnel</strong> à une documentation exhaustive. L&#39;objectif n&#39;est pas d&#39;éliminer la documentation, mais de concentrer l&#39;énergie sur ce qui apporte de la valeur aux utilisateurs.</p><p>La troisième valeur met la <strong>collaboration avec le client</strong> au centre du processus, plutôt que la négociation contractuelle. Le client n&#39;est pas un interlocuteur qu&#39;on voit au début et à la fin du projet, mais un partenaire impliqué tout au long du développement.</p><p>Enfin, la quatrième valeur encourage l&#39;<strong>adaptation au changement</strong> plutôt que le suivi strict d&#39;un plan. Un plan reste utile, mais il doit pouvoir évoluer quand les circonstances l&#39;exigent.</p><p>Ces quatre valeurs ont formalisé des pratiques déjà émergentes, comme Scrum, co-créé par Jeff Sutherland et Ken Schwaber (tous deux signataires du Manifeste) et présenté publiquement dès 1995. Elles s&#39;accompagnent de 12 principes opérationnels et constituent le socle sur lequel repose le fonctionnement concret de la planification Agile.</p><h2 id="comment-fonctionne-la-planification-agile">Comment fonctionne la planification Agile ?</h2><p>Dans une approche Agile, la planification ne se fait pas une seule fois au début du projet. Elle s&#39;effectue à plusieurs niveaux, du plus stratégique au plus opérationnel, et se révise régulièrement. Cette structure en couches permet de garder une vision d&#39;ensemble tout en restant flexible sur les détails d&#39;exécution.</p><p>Le travail est organisé autour d’une liste de tâches liées au développement produit (appelée <strong>backlog</strong>, que ce soit dans une approche Scrum ou Kanban). Chaque élément de cette liste décrit une fonctionnalité ou un besoin du point de vue de l&#39;utilisateur. Le responsable produit (ou <strong>Product Owner</strong>) est chargé de maintenir cette liste, de la prioriser et de s&#39;assurer que chaque élément est suffisamment clair pour être développé.</p><p>Selon la méthode retenue, le rythme de travail prend des formes différentes. Dans une approche Scrum, l&#39;équipe sélectionne à intervalles réguliers les éléments prioritaires de la liste de tâches pour les traiter lors d&#39;un <strong>sprint</strong> à durée fixe (généralement d&#39;une à quatre semaines). Elle se concentre alors sur ces éléments et limite au maximum l&#39;ajout de nouvelles tâches en cours de cycle. À la fin du sprint, elle présente ce qu&#39;elle a réalisé aux parties prenantes (lors de la <strong>Sprint Review</strong>), puis identifie les améliorations à apporter à son fonctionnement pour le sprint suivant (lors de la <strong>Sprint Retrospective</strong>).</p><p>Dans une approche en flux continu comme Kanban, il n&#39;y a pas de cycle à durée fixe. Les tâches sont prises en charge dès qu&#39;une capacité se libère, dans la limite du nombre de tâches en cours autorisées (WIP limit ou limite de travail en cours), et le backlog est réapprovisionné au besoin plutôt qu&#39;à cadence régulière.</p><p>Dans les deux cas, le principe reste le même : limiter les perturbations en cours de traitement pour garder un rythme prévisible tout en s&#39;adaptant aux changements.</p><h3 id="les-niveaux-de-planification">Les niveaux de planification</h3><p>La planification Agile s&#39;organise en plusieurs horizons temporels qui s&#39;emboîtent les uns dans les autres.</p><p>Au niveau le plus élevé, la <strong>vision produit</strong> définit la direction, généralement sur 6 à 18 mois selon les organisations. Elle répond à la question fondamentale : « Quel problème résolvons-nous, pour qui et pourquoi maintenant ? » Dans GitLab, cette vision peut se matérialiser à travers des epics de haut niveau et des objectifs produits partagés.</p><p>La <strong>roadmap</strong> traduit cette vision en jalons concrets, typiquement sur 3 à 12 mois. Elle identifie les grandes fonctionnalités à livrer, sans entrer dans le détail de leur implémentation. Les équipes Scrum, par exemple, utilisent souvent des <a href="https://docs.gitlab.com/user/group/epics/" rel="">epics</a> pour regrouper les éléments de la roadmap. Un epic représente une initiative significative qui nécessitera plusieurs itérations pour être complétée.</p><p>La <strong>planification des versions</strong> (ou <strong>release planning</strong>) affine la roadmap en déterminant quelles fonctionnalités feront partie de chaque version livrée aux utilisateurs. C&#39;est à ce niveau que les dépendances entre équipes sont identifiées, que les risques majeurs sont anticipés et que l’on s’assure que les releases restent cohérentes avec la vision produit.</p><p>Le niveau suivant est celui de l’itération. Avec la méthode Scrum, la <strong>planification d&#39;itération</strong> (ou <strong>sprint planning</strong>) a lieu selon une cadence fixe d&#39;une à quatre semaines : à chaque cycle, l&#39;équipe décide quels éléments de la liste de tâches (backlog) elle s&#39;engage à livrer. Dans GitLab, ce niveau s’exprime à travers les itérations et les jalons, auxquels les tickets sont rattachés.</p><p>Avec la méthode Kanban, ce niveau prend la forme d&#39;un <strong>réapprovisionnement continu du backlog (replenishment)</strong>, déclenché à la demande plutôt qu&#39;à intervalles fixes. L’enjeu reste le même : rendre explicite ce qui est en cours, ce qui vient ensuite et ce qui peut attendre.</p><p>Enfin, la <strong>réunion quotidienne de synchronisation</strong> (également appelée <strong>Daily Scrum</strong> ou <strong>Daily Standup</strong>), bien qu&#39;issue de l’approche Scrum, est aujourd&#39;hui largement adoptée par les équipes Agile, quelle que soit la méthode suivie. Elle permet chaque jour d&#39;aligner l&#39;équipe, de visualiser le travail en cours et d&#39;identifier rapidement les obstacles.</p><p>Cette structure en couches évite de tout planifier dans le détail dès le départ tout en gardant le cap sur les objectifs, et elle se prête particulièrement bien aux outils qui relient vision, epics, tickets et code dans un même espace.</p><h2 id="scrum-kanban-et-autres-méthodes-agiles">Scrum, Kanban et autres méthodes Agiles</h2><p>L&#39;agilité n&#39;est pas une méthode unique, mais un ensemble de principes qui se déclinent en plusieurs frameworks. Chacun propose une façon différente d&#39;organiser le travail, avec ses forces et ses contextes d&#39;application privilégiés.</p><p><strong>Scrum</strong> est un framework itératif structuré autour de <strong>sprints</strong> de durée fixe, avec des rôles définis et des événements récurrents. Il convient particulièrement aux projets complexes où les exigences évoluent.</p><p><strong>Kanban</strong> repose sur le <strong>flux continu</strong>, sans sprints. Le travail progresse sur un tableau visuel avec des limites sur le travail en cours. Cette approche s&#39;adapte aux équipes de support, de maintenance ou aux contextes où les priorités changent fréquemment.</p><p><strong>Extreme Programming (XP)</strong> est une méthode Agile à part entière qui met l&#39;accent sur les pratiques techniques comme le <a href="https://about.gitlab.com/fr-fr/blog/agile-pairing-sessions/" rel="" title="Qu&#39;est-ce que le pair programming ?">pair programming</a>, les tests automatisés et l&#39;<a href="https://about.gitlab.com/fr-fr/topics/ci-cd/benefits-continuous-integration/" rel="" title="Qu&#39;est-ce que l&#39;intégration continue ?">intégration continue</a>. Certaines équipes choisissent de combiner XP avec Scrum pour renforcer la qualité du code tout en conservant la structure itérative de Scrum.</p><p>Les frameworks d&#39;agilité à l&#39;échelle comme le <strong><a href="https://about.gitlab.com/fr-fr/blog/safe-without-silos-in-gitlab/" rel="" title="Qu&#39;est-ce que SAFe ?">Scaled Agile Framework (SAFe)</a></strong>, <strong>Large-Scale Scrum (LeSS)</strong> ou la boîte à outils <strong>Disciplined Agile (DA)</strong> permettent de déployer l&#39;agilité dans les grandes organisations, en coordonnant plusieurs équipes autour d&#39;objectifs communs.</p><p>Le choix d&#39;un framework dépend du contexte : taille de l&#39;équipe, nature du produit, maturité Agile, contraintes organisationnelles. Certaines équipes commencent avec une approche Scrum pour sa structure claire, puis évoluent vers des approches hybrides au fil de leur montée en compétence.</p><h3 id="scrum-en-détail">Scrum en détail</h3><p>Scrum est le framework Agile le plus répandu. Son succès tient à sa structure claire qui donne des repères aux équipes tout en préservant leur autonomie. Le travail s&#39;organise en <strong>sprints</strong> d’une à quatre semaines, chacun produisant un incrément potentiellement livrable du produit. Consultez <a href="https://docs.gitlab.com/tutorials/scrum_events/" rel="">ce tutoriel</a> pour en savoir plus sur l’utilisation des fonctionnalités de planification et de suivi Agile dans GitLab, afin de faciliter les événements et les workflows Scrum.</p><p>Trois rôles structurent l&#39;équipe Scrum. Le <strong>Product Owner</strong> (ou responsable produit) porte la vision du produit et priorise la liste de tâches. Le <strong>Scrum Master</strong> veille au respect du cadre Scrum et aide l&#39;équipe à s&#39;améliorer. Les développeurs s&#39;autogèrent pour transformer les éléments de la liste de tâches en fonctionnalités.</p><p>Cinq événements rythment le sprint :</p><ul><li>Le <strong>Sprint</strong> lui-même constitue l&#39;événement conteneur dans lequel tous les autres événements se déroulent.</li><li>Le <strong>Sprint Planning</strong> définit le travail à accomplir.</li><li>Le <strong>Daily Scrum</strong> (ou <strong>Daily Standup</strong>) synchronise l&#39;équipe chaque jour.</li><li>La <strong>Sprint Review</strong> présente ce qui a été réalisé aux parties prenantes.</li><li>La <strong>Sprint Retrospective</strong> identifie les améliorations à apporter au processus.</li></ul><p>Cette cadence régulière crée un rythme prévisible qui facilite la coordination.</p><p>Scrum fonctionne particulièrement bien pour les projets où les exigences sont susceptibles d&#39;évoluer, où les retours utilisateurs sont disponibles régulièrement et où l&#39;équipe peut se consacrer au projet sans interruptions constantes.</p><h3 id="kanban-pour-le-flux-continu">Kanban pour le flux continu</h3><p>Kanban propose une approche différente, fondée sur la visualisation du travail et l&#39;optimisation du flux, sans sprints ni rôles formalisés. Les tâches à réaliser sont collectées dans un <strong>backlog</strong>, depuis lequel l&#39;équipe les fait progresser d&#39;une colonne à l&#39;autre sur un <strong>tableau Kanban</strong>, au rythme permis par les limites de travail en cours.</p><p>Le principe central de Kanban est la limite du travail en cours, ou <strong>WIP limit</strong>. En restreignant le nombre de tâches que l&#39;équipe peut traiter simultanément, celle-ci évite la dispersion et fait émerger les goulots d&#39;étranglement. Si une colonne atteint sa limite, l&#39;équipe doit terminer les tâches en cours avant d&#39;en commencer de nouvelles.</p><p>Cette approche convient particulièrement aux équipes où les demandes arrivent en continu et où il est difficile de planifier à l&#39;avance. Elle permet aussi une transition en douceur vers l&#39;agilité pour les organisations qui ne souhaitent pas bouleverser leur fonctionnement du jour au lendemain.</p><h3 id="passer-à-léchelle-avec-safe-less-et-disciplined-agile">Passer à l&#39;échelle avec SAFe, LeSS et Disciplined Agile</h3><p>Quand plusieurs équipes travaillent sur un même produit ou portefeuille, la coordination devient un défi. Les frameworks d&#39;agilité à l&#39;échelle proposent des mécanismes pour aligner les efforts sans perdre les bénéfices de l&#39;autonomie des équipes.</p><p><strong>Scaled Agile Framework (SAFe)</strong> est le framework le plus structuré. Il organise les équipes en <strong>Agile Release Trains</strong> qui livrent ensemble à intervalles réguliers. Il définit des rôles additionnels et des événements de synchronisation inter-équipes. Cette structure convient aux grandes organisations qui ont besoin de gouvernance et de prévisibilité.</p><p><strong>Large-Scale Scrum (LeSS)</strong> prend le parti inverse. Il conserve le framework Scrum aussi simple que possible, même avec plusieurs équipes. Toutes les équipes partagent la même liste de tâches et travaillent sur un produit commun, avec un seul <strong>Product Owner</strong>.</p><p><strong>Disciplined Agile (DA)</strong> propose une approche modulaire où chaque organisation compose son propre framework en fonction de son contexte.</p><p>Quel que soit le framework choisi, le passage à l&#39;échelle fonctionne mieux quand les équipes disposent d&#39;une plateforme unifiée pour visualiser le travail à effectuer, gérer les dépendances et suivre l&#39;avancement des tâches. Les outils fragmentés multiplient les frictions et les risques de désalignement.</p><p>Pour en savoir plus sur la planification et le suivi de vos projets au sein de GitLab, <a href="https://docs.gitlab.com/topics/plan_and_track/" rel="">consultez notre documentation</a>.</p><h2 id="avantages-et-limites-de-la-planification-agile">Avantages et limites de la planification Agile</h2><p>L&#39;agilité n&#39;est pas une solution miracle, mais elle apporte des bénéfices mesurables quand elle est bien mise en œuvre. Elle présente aussi des défis qu&#39;il vaut mieux anticiper.</p><h3 id="ce-que-lagilité-apporte-aux-équipes">Ce que l&#39;agilité apporte aux équipes</h3><p>Les organisations qui adoptent la planification Agile constatent généralement une <strong>livraison plus rapide de valeur</strong>. Le travail étant découpé en incréments, les utilisateurs bénéficient de nouvelles fonctionnalités plus tôt, sans attendre la fin du projet.</p><p>L&#39;agilité améliore aussi la <strong>capacité d&#39;adaptation</strong>. Les équipes peuvent réorienter leurs efforts à chaque itération en fonction des retours du terrain ou des évolutions du marché. Cette flexibilité réduit le risque de livrer un produit qui ne correspond plus aux attentes des utilisateurs.</p><p>La <strong>visibilité</strong> constitue un autre avantage significatif. Les parties prenantes voient l&#39;avancement réel à chaque fin d&#39;itération, sous forme de fonctionnalités démontrables, et non de simples indicateurs chiffrés.</p><p>Enfin, les cycles courts et les événements réguliers créent des occasions d&#39;échange qui <strong>renforcent la collaboration</strong> entre les équipes métiers, les utilisateurs et les équipes de développement.</p><h3 id="les-défis-à-anticiper">Les défis à anticiper</h3><p>La planification Agile n&#39;est pas sans difficultés. Le premier obstacle est souvent la <strong>résistance au changement</strong>. L&#39;agilité remet en question les habitudes établies, les structures de pouvoir et les modes de reporting traditionnels. Sans accompagnement, les équipes peuvent rejeter le nouveau cadre ou ne pas l’appliquer correctement.</p><p>L&#39;estimation du <strong>budget total</strong> soulève également des questions. Quand on ne sait pas exactement ce qu&#39;on va livrer à la fin, comment s&#39;engager sur un montant fixe ? La réponse passe généralement par un budget par capacité, c&#39;est-à-dire le financement d&#39;une équipe pendant une durée donnée, plutôt que par un budget projet figé.</p><p>Sans discipline, l&#39;agilité peut aussi conduire à accumuler de la <strong>dette technique</strong>. La pression pour livrer à chaque itération peut pousser à négliger la qualité du code, les tests ou la documentation. Les équipes expérimentées intègrent explicitement le traitement de la dette technique dans leur planification.</p><p>Enfin, l&#39;agilité demande une <strong>implication forte des parties prenantes</strong>. Si les retours arrivent avec des semaines de retard ou si les priorités ne sont pas claires, l&#39;équipe perd en efficacité et en alignement. La solution passe par des points de feedback courts et fréquents, et un responsable produit disponible et décisionnaire.</p><h2 id="mettre-en-place-la-planification-agile-au-sein-de-votre-organisation">Mettre en place la planification Agile au sein de votre organisation</h2><p>Adopter une approche Agile ne se fait pas en un jour. Une transition réussie commence généralement par un <strong>projet pilote</strong> ou une équipe volontaire, plutôt que par une transformation globale de l&#39;organisation. Cette approche permet d&#39;apprendre, d&#39;ajuster et de démontrer des résultats avant d&#39;étendre les pratiques.</p><p>La <strong>formation de l&#39;équipe</strong> est un prérequis souvent sous-estimé. Chaque membre doit comprendre les principes sous-jacents, pas seulement les événements à suivre. Sans cette compréhension, ces événements deviennent des formalités vides de sens.</p><p>La <strong>clarification des rôles</strong> évite beaucoup de conflits. Qui priorise la liste de tâches ? Qui peut ajouter des tâches en cours d’itération ? Qui décide si une fonctionnalité est terminée ? Ces questions doivent trouver des réponses claires dès le départ.</p><p>Enfin, les <strong>outils de visualisation et de suivi</strong> permettent à l&#39;équipe de travailler efficacement. Un tableau Kanban, même physique, vaut mieux qu&#39;un tableur partagé que personne ne met à jour.</p><h3 id="définir-les-rôles-et-les-responsabilités">Définir les rôles et les responsabilités</h3><p>La clarté des rôles évite bien des malentendus une fois le projet lancé.</p><p>Dans le cadre d’une approche Scrum, le <strong>Product Owner</strong> est le garant de la valeur. Il comprend les besoins des utilisateurs, définit la vision du produit, priorise le backlog et prend les décisions sur ce qui doit être fait.</p><p>Le <strong>Scrum Master</strong> n&#39;est pas un chef de projet. Son rôle est de faciliter : aider l&#39;équipe à respecter le cadre Scrum, lever les obstacles, protéger l&#39;équipe des interruptions et favoriser l&#39;amélioration continue. Un bon Scrum Master rend l&#39;équipe autonome et non dépendante de lui.</p><p>Les <strong>développeurs</strong> forment une équipe pluridisciplinaire et autogérée. Elle regroupe toutes les compétences nécessaires pour transformer un élément de la liste de tâches en fonctionnalité livrée, qu&#39;il s&#39;agisse de développement, de test, de design ou d&#39;ops.</p><p>Selon le Scrum Guide 2020, l&#39;équipe Scrum compte généralement 10 personnes ou moins, Product Owner et Scrum Master inclus.</p><h3 id="structurer-et-prioriser-les-tâches">Structurer et prioriser les tâches</h3><p>Une liste de tâches bien tenue est la colonne vertébrale de la planification Agile. Chaque élément doit être formulé de façon à ce que l&#39;équipe puisse l&#39;estimer et le développer.</p><p>Dans les équipes Scrum, le format le plus courant est celui de la <strong>user story</strong>, qui suit la structure suivante : « En tant que [type d&#39;utilisateur], je veux [action], afin de [bénéfice] ». Ce guide de <a href="https://docs.gitlab.com/tutorials/scrum_events/" rel="">planification et de suivi</a> détaille les bonnes pratiques pour utiliser GitLab afin de faciliter les événements et les workflows Scrum.</p><p>Les <strong>user stories</strong> sont regroupées en <strong>epics</strong> pour les initiatives importantes et découpées en <strong>tâches</strong> pour le travail quotidien. Cette hiérarchie permet de naviguer entre la vision d&#39;ensemble et le détail opérationnel.</p><p>Pour prioriser, plusieurs techniques existent. La méthode <strong>MoSCoW</strong> classe les éléments en Must have, Should have, Could have et Won&#39;t have. L&#39;approche par <strong>valeur métier</strong> pondère chaque élément en fonction de son impact attendu. Quelle que soit la méthode, l&#39;essentiel est que le haut de la liste de tâches soit clair, détaillé et prêt à être développé.</p><h2 id="les-outils-pour-une-planification-agile-efficace">Les outils pour une planification Agile efficace</h2><p>Un outil de planification Agile ne fait pas l&#39;agilité, mais il peut la faciliter ou la freiner. Les équipes ont besoin de <strong>tableaux visuels</strong> pour représenter le workflow et suivre l&#39;avancement des tâches : colonnes par étape (à faire, en cours, en revue, terminé), limites de travail en cours, regroupement par équipe ou par epic.</p><p>Elles ont besoin d&#39;une <strong>gestion des tâches</strong> qui permette de prioriser, d&#39;estimer et de découper les éléments : user stories, bogues, tâches techniques, dette technique. Le <strong>suivi des itérations</strong>, à l&#39;aide de graphiques d&#39;avancement (burndown ou burnup charts) et de rapports réguliers, aide à piloter le processus d&#39;itération et à ajuster la charge en fonction de la vélocité de l’équipe.</p><p>Dès que plusieurs équipes travaillent ensemble, la <strong>gestion des dépendances</strong> devient critique : savoir quelles tâches en bloquent d’autres, quelles fonctionnalités doivent être livrées ensemble, et où se situent les goulots d’étranglement. Enfin, les <strong>roadmaps</strong> permettent de communiquer la vision et les jalons clés aux parties prenantes, dans un langage compréhensible au-delà de l’IT.</p><p>Un critère souvent négligé est l&#39;<strong>intégration avec l&#39;environnement de développement</strong>. De nombreuses organisations utilisent un outil de planification déconnecté de leur code, ce qui oblige les équipes de développement à mettre à jour deux systèmes en parallèle. Les informations divergent, et personne n&#39;a de vision fiable de l&#39;état réel du projet.</p><p>GitLab adresse précisément ce point en regroupant, dans une seule plateforme, les tableaux Scrum ou Kanban, les epics, les roadmaps, les jalons, les itérations, les graphiques d’avancement et les analyses de flux de valeur (Value Stream Analytics). La planification, le suivi et l’exécution vivent au même endroit que le code, les revues de merge requests, les <a href="https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/" rel="" title="Qu&#39;est-ce qu&#39;un pipeline CI/CD ?">pipelines CI/CD</a> et les contrôles de sécurité, ce qui réduit les frictions et améliore la fiabilité des données utilisées pour décider.</p><h3 id="connecter-la-planification-au-cycle-de-développement-logiciel">Connecter la planification au cycle de développement logiciel</h3><p>La planification Agile prend tout son sens quand elle est connectée au code. Quand un élément de la liste de tâches est lié aux commits qui l&#39;implémentent, aux pipelines qui le testent et aux déploiements qui le mettent en production, la traçabilité devient automatique. Le responsable produit voit exactement où en est chaque fonctionnalité, sans avoir à demander de reporting supplémentaire.</p><p>Cette intégration permet aussi d&#39;alimenter des métriques fiables. Les graphiques d&#39;avancement se mettent à jour en temps réel en fonction des tâches réellement terminées. La vélocité de l&#39;équipe se calcule à partir des tickets clôturés, pas de projections théoriques. Les analyses du flux de valeur révèlent où le temps est perdu dans le cycle de développement : spécification, revue de code, tests, déploiement, etc.</p><p>GitLab illustre cette approche avec ses capacités de <a href="https://about.gitlab.com/fr-fr/solutions/agile-delivery/" rel="" title="Qu&#39;est-ce que la livraison Agile ?">livraison Agile</a>. Les tableaux des tickets permettent de visualiser le travail en Scrum ou Kanban. Les epics gèrent les initiatives de grande envergure, les jalons marquent les étapes clés, et les itérations structurent le rythme de travail des équipes.</p><p>Le cas d&#39;<a href="https://about.gitlab.com/fr-fr/customers/iron-mountain/" rel="" title="Cas client Iron Mountain">Iron Mountain</a> montre les gains possibles : l&#39;entreprise a économisé 20 heures par projet sur le temps d’onboarding en utilisant une plateforme unifiée pour son framework SAFe, tout en améliorant la collaboration entre les équipes informatiques et les principales parties prenantes.</p><blockquote><p>« GitLab nous a fourni les bases et la plateforme nécessaires à la mise en place de notre Scaled Agile Framework. Nous sommes désormais en mesure de collaborer au sein de nos équipes informatiques et avec nos principales parties prenantes. » —  Hayelom Tadesse, Vice President of Enterprise Technology, Iron Mountain</p></blockquote><p>Dans ce modèle, la planification n’est plus une couche séparée que l’on alimente manuellement. Elle devient une vue cohérente et en temps réel de tout le cycle de développement logiciel (<a href="https://about.gitlab.com/fr-fr/blog/what-is-sdlc/" rel="" title="Qu&#39;est-ce que le SDLC ?">SDLC</a>), de l’idée jusqu’au déploiement.</p><h3 id="lagent-planner-de-gitlab">L’agent Planner de GitLab</h3><p>L&#39;IA vient également enrichir cette planification Agile. Avec GitLab Duo Agent Platform et l&#39;<a href="https://docs.gitlab.com/user/duo_agent_platform/agents/foundational_agents/planner/" rel="">agent Planner</a>, les équipes peuvent générer et structurer plus rapidement leurs tickets, préparer leurs listes de tâches et leurs itérations, et mieux visualiser les dépendances.</p><p>À partir d’une simple description de fonctionnalité, l’agent peut proposer une arborescence d’epics et de tickets, des estimations et une répartition dans les sprints, que l’équipe ajuste ensuite. Résultat : moins de temps passé sur les tâches administratives et de coordination, et plus de temps consacré à la conception et à la livraison de valeur. Pour en savoir plus, parcourez la catégorie du blog de GitLab dédiée à la <a href="https://about.gitlab.com/fr-fr/blog/categories/agile-planning/" rel="">Planification Agile</a>.</p><blockquote><p><strong><a href="https://about.gitlab.com/fr-fr/free-trial/devsecops/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">→ Vous souhaitez en savoir plus sur la planification Agile au sein de GitLab ? Commencez un essai gratuit de GitLab Ultimate.</a></strong></p></blockquote><h2 id="conclusion">Conclusion</h2><p>La planification Agile n&#39;est pas une recette magique, mais un cadre qui aide les équipes à livrer de la valeur de façon plus prévisible. Ses fondamentaux restent simples : découper le travail en cycles courts, prioriser ce qui compte vraiment, s&#39;adapter aux retours et s&#39;améliorer continuellement.</p><p>Le choix du framework, qu&#39;il s&#39;agisse de Scrum, de Kanban ou d&#39;une approche hybride, importe moins que la qualité de son implémentation. Une équipe qui comprend les principes sous-jacents et qui dispose des bons outils progressera, quel que soit le cadre choisi, à condition de rester ouverte à une amélioration continue.</p><p>Si vous souhaitez passer à l&#39;échelle, GitLab propose une plateforme où la planification, le développement et le déploiement cohabitent, permettant aux équipes de se concentrer sur ce qui compte : livrer des logiciels qui répondent aux besoins des utilisateurs.</p><h2 id="faq-sur-la-planification-agile">FAQ sur la planification Agile</h2><h3 id="quelle-est-la-différence-entre-scrum-et-agile">Quelle est la différence entre Scrum et Agile ?</h3><p>Agile est une philosophie de gestion de projet basée sur l&#39;adaptation et la collaboration, formalisée par le Manifeste Agile de 2001. Scrum est l&#39;un des frameworks qui implémentent cette philosophie, avec des rôles définis (Product Owner, Scrum Master), des sprints de durée fixe et des événements spécifiques.</p><h3 id="comment-organiser-un-sprint-planning-efficace">Comment organiser un sprint planning efficace ?</h3><p>Un sprint planning réussi commence par un backlog préparé. Les user stories prioritaires doivent être claires et estimables avant la réunion. Limitez la durée à environ quatre heures pour un sprint de deux semaines et assurez-vous que le Product Owner est présent pour répondre aux questions. Terminez avec un objectif de sprint (Sprint Goal) partagé et un engagement réaliste basé sur la vélocité passée de l&#39;équipe.</p><h3 id="combien-de-temps-dure-un-sprint-agile">Combien de temps dure un sprint Agile ?</h3><p>La durée standard d&#39;un sprint est de deux semaines, mais elle peut varier d’une à quatre semaines selon les contextes. Les sprints courts permettent des retours plus fréquents et une meilleure réactivité. Les sprints plus longs conviennent aux équipes qui travaillent sur des fonctionnalités complexes nécessitant plus de temps de développement.</p><h3 id="la-méthode-agile-convient-elle-à-tous-les-projets">La méthode Agile convient-elle à tous les projets ?</h3><p>L&#39;agilité fonctionne mieux pour les projets où les exigences sont susceptibles d&#39;évoluer, où le feedback utilisateur est accessible et où l&#39;équipe peut travailler de façon autonome. Elle est moins adaptée aux projets à périmètre fixe et à budget contraint, ou aux environnements très réglementés où chaque changement nécessite des validations lourdes. Dans ces cas, une approche hybride peut être pertinente.</p><h3 id="comment-mesurer-lefficacité-de-sa-planification-agile">Comment mesurer l&#39;efficacité de sa planification Agile ?</h3><p>Plusieurs indicateurs permettent de suivre la santé d&#39;une équipe Agile. La vélocité mesure le nombre de story points livrés par sprint (l&#39;unité d&#39;estimation utilisée en Scrum). Le délai d&#39;exécution indique le temps entre la création d&#39;une tâche et sa mise en production. Le taux d&#39;achèvement des sprints et la satisfaction de l&#39;équipe sont également révélateurs. Les métriques DORA (fréquence de déploiement, délai de livraison, taux d&#39;échec des changements, temps de restauration) complètent ces indicateurs pour les équipes de développement.</p><h3 id="comment-mettre-en-place-la-planification-agile-avec-gitlab">Comment mettre en place la planification Agile avec GitLab ?</h3><p>GitLab propose un ensemble complet de fonctionnalités pour la planification Agile : epics et roadmaps pour la vision, tableaux de tickets pour Scrum ou Kanban, itérations pour structurer les sprints, jalons pour suivre les releases, et analytics pour mesurer la vélocité et les goulots d’étranglement. En connectant ces éléments au code, aux pipelines CI/CD et aux contrôles de sécurité, les équipes obtiennent une vue de bout en bout du cycle de développement, sans changer constamment d’outil.</p>]]></content>
        <author>
            <name>Charlotte Delbosc</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/charlotte-delbosc/</uri>
        </author>
        <author>
            <name>Maud Leuenberger</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/maud-leuenberger/</uri>
        </author>
        <published>2026-07-24T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Hackathon GitLab Transcend : GitLab Orbit en action]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/gitlab-transcend-hackathon-orbit/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/gitlab-transcend-hackathon-orbit/"/>
        <updated>2026-07-23T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Nous avons mis GitLab Orbit entre les mains de quelques milliers de développeurs et leur avons laissé carte blanche. Le résultat ? Des solutions créatives à de vrais problèmes de production qui ralentissent leurs équipes. <strong>Il s&#39;agit là des mêmes défis que vous rencontrez chaque semaine : qu&#39;est-ce que ce changement va faire échouer, quels tests comptent vraiment et quel sera le vrai coût d&#39;une migration.</strong></p><p><a href="https://about.gitlab.com/fr-fr/gitlab-orbit/" rel="">GitLab Orbit</a> est un graphe vivant et interrogeable de votre code, de vos merge requests, pipelines, déploiements et responsabilités, avec toutes les relations entre ces éléments maintenues à jour en permanence. Les agents écrivent bien du code, mais peinent à comprendre le système qui l&#39;entoure. Répondre aux questions « <em>de quoi dépend cet élément</em> », « <em>quels tests le couvrent</em> », « <em>qui est responsable en cas de retombées</em> » nécessitait autrefois qu&#39;un agent parcoure des fichiers ou qu&#39;un ingénieur explore quatre outils différents. GitLab Orbit transforme ces étapes en une seule requête. Les agents accèdent à GitLab Orbit via le Model Context Protocol (<a href="https://about.gitlab.com/fr-fr/topics/ai/model-context-protocol/" rel="">MCP</a>), les ingénieurs l&#39;interrogent directement, et la réponse est fournie en quelques secondes plutôt qu&#39;en quelques heures. La <a href="https://about.gitlab.com/fr-fr/gitlab-orbit/" rel="">page d&#39;accueil de GitLab Orbit</a> présente les fonctionnalités complètes de cet outil. Nous souhaitions voir ce que les participants construiraient une fois qu&#39;ils en auraient la maîtrise.</p><p>Le hackathon a réuni 1 576 développeurs inscrits, qui ont livré 265 projets éligibles dans la catégorie Showcase Track, construits sur GitLab Orbit : des agents, des flows et des compétences. Par ailleurs, 26 contributrices et contributeurs ont fusionné 61 améliorations directement dans la base de code de GitLab Orbit (nouveaux langages pris en charge, correction de bogues et perfectionnement de la documentation). La communauté n&#39;a pas seulement construit sur GitLab Orbit, elle a amélioré GitLab Orbit.</p><h2 id="les-problèmes-ciblés-par-les-participants">Les problèmes ciblés par les participants</h2><p>Avant même de procéder à l&#39;évaluation, un élément a retenu notre attention : si nous avions trié les projets soumis selon leur fonction, la répartition aurait été très déséquilibrée.</p><p><strong>70 équipes</strong> ont créé une version du même outil : <em>Dis-moi ce que cette modification pourrait faire échouer avant que je la fusionne</em>. Plus de 30 ont développé des outils d&#39;intégration et de compréhension : « <em>Aide-moi à comprendre ce code source</em> ». Venaient ensuite l&#39;analyse des causes profondes d&#39;incidents, la dérive architecturale, le diagnostic de pipelines instables et le suivi d&#39;une vulnérabilité ou exposition commune (CVE) dans plusieurs dépôts.</p><p>Rien de tout cela n&#39;est le fruit du hasard. Les ingénieurs posent constamment ces questions et n&#39;ont pas de réponses satisfaisantes, car celles-ci étaient jusqu&#39;à présent dispersées entre Git, CI, les outils de déploiement et quelques tableaux de bord auxquels personne ne pouvait vraiment se fier. Rassemblez tout cela dans un graphe unique, et les équipes s&#39;y précipitent naturellement.</p><p>Cette approche repose sur une orchestration avec un contexte, et non une orchestration seule, et une vitesse avec un contrôle intégré. Et quand des dizaines d&#39;équipes indépendantes posent la même question sans qu&#39;on le leur demande, c&#39;est un signal clair pour toutes les plateformes : le contexte se situe là où le travail se passe réellement. La barre était haute dans les catégories les plus disputées. Des projets se sont distingués en devançant 68 autres équipes, ou en explorant des territoires inédits.</p><h2 id="implémentation-technologique">Implémentation technologique</h2><p><strong>Lauréat : <a href="https://gitlab-transcend.devpost.com/submissions/1054521-sankofa" rel="">Sankofa</a>.</strong> Trois agents, chacun déclenché par un moment différent de votre journée, tous connectés à GitLab Orbit. Ouvrez une merge request et Radar vous donne le rayon d&#39;impact : les appelants en aval, les pipelines affectés, l&#39;équipe responsable des retombées. Un ticket vous est attribué, et Guide vous prépare un document explicatif avant de commencer. Une vulnérabilité est détectée, et Shield en trace chaque chemin d&#39;accès. Le contexte est fourni là où vous êtes déjà, puis Shield vous laisse travailler.</p><blockquote><p>« Quand une vulnérabilité de sécurité est signalée, les équipes passent des jours à tracer manuellement son étendue, faute d&#39;un outil qui relie automatiquement tous les éléments. »</p><p>Lester K, Sankofa</p></blockquote><p>Shield le fait en un seul passage sur le graphe.</p><p><strong>Finaliste :</strong> <a href="https://gitlab-transcend.devpost.com/submissions/1054106-stayed-shipped" rel="">Stayed Shipped</a>. Il pose une question à laquelle vos tableaux de bord ne peuvent pas répondre : parmi les changements que vos agents d&#39;IA ont fusionnés le mois dernier, combien sont encore en production ? Il vérifie si un changement fusionné est encore en production ou s&#39;il a été discrètement corrigé par un ingénieur senior dans un commit, échappant ainsi à tous les indicateurs standard.</p><h2 id="design-et-convivialité">Design et convivialité</h2><p><strong>Lauréat : <a href="https://gitlab-transcend.devpost.com/submissions/1062163-carver-the-migration-quoting-agent" rel="">Carver</a>.</strong> Carver évalue le coût d&#39;une migration de code legacy avant que vous ne vous y engagiez. Décrivez ce que vous souhaitez migrer, et Carver analyse le graphe de dépendances de GitLab Orbit afin de vous fournir un devis : le nombre d&#39;unités, la durée estimée, l&#39;ordre des opérations, et où sont dissimulés les risques. Ce projet se distingue par le résultat produit. Carver vous présente une ligne par unité, dimensionnée et signalée par niveau de risque, et n&#39;en détaille le contenu que sur demande. La migration d&#39;AngularJS vers Angular représente environ neuf semaines d&#39;effort humain pour un coût de génération de dix dollars, avec le service non testé et structurellement critique mis en évidence en rouge pour que vous sachiez où concentrer votre attention en premier lieu.</p><blockquote><p>« Carver interroge GitLab Orbit et, s&#39;il ne trouve pas le service, il demande où se trouve le vrai code. »</p><p>Anes Mulalic, Carver</p></blockquote><p>C&#39;est la raison pour laquelle l&#39;agent refuse d&#39;inventer un chiffre qu&#39;il ne peut pas justifier.</p><p><strong>Finaliste :</strong> <a href="https://gitlab-transcend.devpost.com/submissions/1062651-marshal-autonomous-migration-assistant" rel="">Marshal</a>. Ce projet s&#39;attaque au même problème, mais propose une approche opposée : une autonomie totale. Fixez un objectif à l&#39;échelle de l&#39;organisation, et Marshal identifie chaque dépôt concerné via GitLab Orbit, séquence le travail et soumet des merge requests vague par vague, en veillant à ce qu&#39;aucune cible ne soit omise.</p><h2 id="impact-potentiel">Impact potentiel</h2><p><strong>Lauréat : <a href="https://gitlab-transcend.devpost.com/submissions/1061837-crosscut" rel="">CrossCut</a>.</strong> CrossCut n&#39;exécute que les tests qu&#39;un changement pourrait effectivement faire échouer. Ouvrez une merge request : il extrait les symboles modifiés, parcourt le graphe d&#39;appels de GitLab Orbit pour identifier le véritable impact transitif, et construit un pipeline qui n&#39;exécute que ces tests-là. Aucun modèle dans la boucle, aucune approximation, uniquement un parcours de graphe. Sur une suite de tests volumineuse ou sur plusieurs dépôts, la charge CI est réduite d&#39;au moins 90 %, ce qui en vaut la peine presque immédiatement.</p><blockquote><p>« Pour savoir quels tests une modification peut atteindre, il faut disposer du graphe d&#39;appels de l&#39;ensemble du code source. C&#39;est exactement ce que construit GitLab Orbit : au lieu de deviner, nous interrogeons le graphe. »</p><p>Pritesh Kumar, CrossCut</p></blockquote><p><strong>Finaliste :</strong> <a href="https://gitlab-transcend.devpost.com/submissions/1061548-orbitweaver" rel="">OrbitWeaver</a>. Il effectue une refactorisation autonome en s&#39;appuyant sur le rayon d&#39;impact exact de GitLab Orbit plutôt que sur la similarité vectorielle. Il cartographie tous les fichiers concernés et les modifie en fonction de l&#39;ordre de leurs dépendances. C&#39;est l&#39;argument le plus convaincant en faveur d&#39;un véritable graphe plutôt qu&#39;une recherche approximative quand une erreur signifie un pipeline en échec.</p><h2 id="qualité-de-lidée">Qualité de l&#39;idée</h2><p><strong>Lauréat : <a href="https://gitlab-transcend.devpost.com/submissions/1056751-transcend" rel="">Transcend</a>.</strong> La plupart des équipes ont interrogé GitLab Orbit directement, ce qui constitue la bonne approche pour la majorité des questions. Transcend a construit un second moteur de raisonnement par-dessus, en utilisant la pile du Web sémantique (OWL, SPARQL et RDF) pour explorer les questions auxquelles l&#39;API native ne peut pas répondre en un seul appel, comme la fermeture transitive ou les jointures qui sortent de votre code source pour s&#39;appuyer sur les connaissances structurées du monde entier. Sa démonstration interroge les méthodes d&#39;embedding de graphes de connaissances qu&#39;implémente un code source, et obtient en retour les noms de classes ainsi que les publications qui les ont inspirées, leurs auteurs et les années, joints en temps réel au code. GitLab Orbit est considéré comme une base sur laquelle construire plutôt que comme une simple API à appeler : l&#39;idée était véritablement novatrice, et c&#39;est précisément ce que récompense cette catégorie.</p><p><strong>Finaliste :</strong> <a href="https://gitlab-transcend.devpost.com/submissions/1053916-universal-agent-os" rel="">Universal Agent OS</a>. Il construit la couche de gouvernance autour des agents plutôt que l&#39;agent lui-même : questionnement préalable, planification avant le code, conservation des preuves et validation obligatoire. À mesure que les agents produisent une part croissante du code, garantir leur responsabilité deviendra le véritable enjeu. C&#39;est le même problème que le contexte de GitLab Orbit met en lumière partout dans les projets de cet article : les agents sont rapides, mais quelqu&#39;un doit toujours assumer la responsabilité de leurs actions.</p><h2 id="contribute-track">Contribute Track</h2><p>La catégorie Contribute Track s&#39;est déroulée en parallèle de la catégorie Showcase Track, et n&#39;a rien à lui envier. Vingt-six contributeurs ont fusionné 61 merge requests directement dans le code source de GitLab Orbit : prise en charge des concepts C++20, déclarations de paquets Go, coroutines Kotlin et lambdas Ruby ; corrections d&#39;ontologie, correction d&#39;un bogue SIGPIPE dans la CI, premier tutoriel de requête GitLab Orbit et améliorations de la documentation pour que personne ne confonde <code>max_depth</code> et <code>max_hops</code>. Dix-neuf contributeurs ont reçu un prix en espèces. Tous les participants ont obtenu des crédits swag.</p><p>Les prix en espèces ont été attribués aux 40 premières contributions fusionnées, ce classement reflète donc autant la rapidité que la qualité. Il s&#39;agit des contributeurs qui ont réussi à faire relire et fusionner un changement fonctionnel en premier. Félicitations aux lauréates et lauréats de cette édition :</p><p><a href="https://gitlab.com/achalbajpai" rel="">achalbajpai</a>, <a href="https://gitlab.com/aishahsofea" rel="">aishahsofea</a>, <a href="https://gitlab.com/AlphaTheGoat27" rel="">AlphaTheGoat27</a>, <a href="https://gitlab.com/anushkrishnav" rel="">anushkrishnav</a>, <a href="https://gitlab.com/bartekp854" rel="">bartekp854</a>, <a href="https://gitlab.com/bhandari.varun04" rel="">bhandari.varun04</a>, <a href="https://gitlab.com/ChaitanyaManik17" rel="">ChaitanyaManik17</a>, <a href="https://gitlab.com/fa220" rel="">fa220</a>, <a href="https://gitlab.com/fongse" rel="">fongse</a>, <a href="https://gitlab.com/gatlavishweshwarreddy26" rel="">gatlavishweshwarreddy26</a>, <a href="https://gitlab.com/gkepas" rel="">gkepas</a>, <a href="https://gitlab.com/JonstonChan" rel="">JonstonChan</a>, <a href="https://gitlab.com/koves" rel="">koves</a>, <a href="https://gitlab.com/MattGaiser" rel="">MattGaiser</a>, <a href="https://gitlab.com/MatthewOscar" rel="">MatthewOscar</a>, <a href="https://gitlab.com/nexpectArpit" rel="">nexpectArpit</a>, <a href="https://gitlab.com/priyansh3133" rel="">priyansh3133</a>, <a href="https://gitlab.com/Vinayreddy765" rel="">Vinayreddy765</a>, <a href="https://gitlab.com/zidanesalim" rel="">zidanesalim</a>.</p><p>Consultez l&#39;ensemble des <a href="https://gitlab.com/gitlab-org/orbit/knowledge-graph/-/merge_requests?scope=all&amp;state=merged&amp;label_name%5B%5D=orbit::hackathon" rel="">contributions fusionnées</a>.</p><h2 id="ce-que-nous-pouvons-retenir-de-ce-hackathon">Ce que nous pouvons retenir de ce hackathon</h2><p>Nous comprenons beaucoup d&#39;un outil en observant ce que les personnes construisent avec lui, avant même que nous leur disions à quoi il sert.</p><p>Personne n&#39;a créé de chatbot. Les meilleurs projets ont tous creusé sous la surface. Ils se sont attaqués à une question qui nécessitait autrefois un après-midi de recherche à travers quatre outils. Et ils y ont répondu en une seule requête.</p><ul><li>Qu&#39;est-ce qui échoue si je fusionne ce changement ?</li><li>Quels tests comptent vraiment ?</li><li>Quel est le coût réel de cette migration ?</li><li>Le changement du mois dernier est-il encore actif ?</li></ul><p><strong>Nous n&#39;avons pas livré ces réponses comme fonctionnalités.</strong> La communauté les a trouvées dès lors qu&#39;elle pouvait utiliser le graphe, ce qui nous en dit plus sur GitLab Orbit qu&#39;aucun benchmark ne pourrait le faire.</p><p>L&#39;ensemble des projets est disponible dans une <a href="https://gitlab-transcend.devpost.com/project-gallery" rel="">galerie</a> si vous souhaitez en savoir plus. Nombre de bons projets n&#39;ont pas pu être mentionnés dans cet article.</p><h2 id="ce-que-vous-pouvez-construire-sur-gitlab-orbit">Ce que vous pouvez construire sur GitLab Orbit</h2><p>Chacun des lauréats ci-dessus apporte une réponse à la même question : que peut faire un agent lorsqu&#39;il raisonne à partir d&#39;un contexte propriétaire sur l&#39;ensemble de votre système, au lieu de deviner à partir de fragments ? GitLab Orbit cartographie en continu votre code, vos éléments de travail, merge requests, pipelines, déploiements et responsabilités dans un graphe unique, afin que les agents et les ingénieurs s&#39;appuient sur une source de vérité commune. Vous n&#39;avez pas besoin d&#39;un hackathon pour vous lancer. Voici les approches que la communauté a validées, chacune ancrée dans un cas d&#39;utilisation pour lequel GitLab Orbit a été conçu.</p><ul><li><strong>Livraison consciente des modifications : identifiez ce qu&#39;une modification fait échouer avant d&#39;effectuer un push.</strong> Interrogez GitLab Orbit pour obtenir chaque appelant downstream d&#39;une fonction, les pipelines qu&#39;elle alimente et l&#39;équipe qui en est responsable, en une seule requête. Le Radar de Sankofa effectue cette opération sur une merge request ; CrossCut exploite le même graphe d&#39;appels pour n&#39;exécuter que les tests qu&#39;une modification peut atteindre, réduisant une exécution CI de 90 %. Détectez les dépendances cachées en amont plutôt qu&#39;à la fin du pipeline CI.</li><li><strong>Des migrations plus sûres avec un contexte système complet.</strong> Identifiez quels services dépendent de celui que vous souhaitez déplacer, dans quel ordre, et où se situe le risque. Carver traduit ces données en devis chiffré ; Marshal le pilote dépôt par dépôt. Tous deux délimitent le rayon d&#39;impact à partir du véritable graphe de dépendances, ce qui permet aux équipes plateforme de s&#39;engager sur une date de migration sans découvrir des dépendances cachées trois semaines après le lancement du projet.</li><li><strong>Analyse rapide du rayon d&#39;impact pour identifier les vulnérabilités.</strong> À partir d&#39;une fonction vulnérable, suivez le graphe jusqu&#39;à tous les points de terminaison accessibles, les pipelines qui les construisent et les équipes qui en sont responsables. Le Shield de Sankofa accomplit en un seul passage ce qui nécessitait autrefois un exercice de corrélation projet par projet sur plusieurs jours.</li></ul><p>Le fil conducteur de ces projets : la réponse n&#39;a jamais été dans le code seul. Elle réside dans la façon dont le code se connecte aux pipelines, déploiements, vulnérabilités et responsabilités. GitLab Orbit maintient ces connexions à jour pour que vous puissiez tout interroger en une seule requête. Les agents sur <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> l&#39;interrogent nativement, les agents externes se connectent via MCP, et les ingénieurs interrogent le même graphe directement via le Data Explorer. Un graphe, une source de vérité, pour chaque agent et chaque membre de l&#39;équipe.</p><h2 id="essayez-gitlab-orbit">Essayez GitLab Orbit</h2><p>Un grand merci à toutes les personnes ayant participé. Pour construire votre propre solution, essayez <a href="https://about.gitlab.com/fr-fr/gitlab-orbit/" rel="">GitLab Orbit</a> sur <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> : le même contexte qu&#39;ont utilisé ces équipes est déjà actif dans votre cycle de développement logiciel. Ce hackathon n&#39;est pas le dernier : inscrivez-vous sur <a href="https://contributors.gitlab.com" rel="">contributors.gitlab.com</a> pour connaître les prochains en avant-première.</p><p>Vous avez déjà accès à GitLab Duo Agent Platform et à GitLab Orbit et souhaitez explorer jusqu&#39;où vous pouvez aller ? <a href="https://about.gitlab.com/community/co-create/" rel="">Demandez à participer au programme Co-Create</a>.</p>]]></content>
        <author>
            <name>Mattias Michaux</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/mattias-michaux/</uri>
        </author>
        <published>2026-07-23T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Green DevOps : l'importance de mesurer le bilan carbone de vos pipelines CI/CD]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/green-devops-carbon-measurement-cicd-pipeline/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/green-devops-carbon-measurement-cicd-pipeline/"/>
        <updated>2026-07-22T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Une équipe logicielle type exécute des centaines de jobs <a href="https://about.gitlab.com/fr-fr/topics/ci-cd/" rel="" title="Qu&#39;est-ce que le CI/CD ?">CI/CD</a> par jour. Chacun d&#39;entre eux consomme des ressources de calcul et de l&#39;énergie qui n&#39;apparaissent pas dans les logs de vos pipelines, tout comme son empreinte carbone. C’est précisément cette invisibilité qui pose problème.</p><p><strong>Vous ne pouvez pas réduire ce que vous ne mesurez pas.</strong></p><p>Les intégrations tierces Eco CI et Carmen ajoutent des données sur l&#39;impact carbone aux pipelines que vous exécutez déjà dans GitLab. Ces deux outils <a href="https://about.gitlab.com/fr-fr/blog/what-is-open-source/" rel="" title="Qu&#39;est-ce que l&#39;open source ?">open source</a> peuvent être intégrés dès aujourd&#39;hui à n&#39;importe quel pipeline. Découvrez pourquoi leur intégration en vaut la peine et comment vous lancer dans le Green DevOps.</p><h2 id="limportance-du-green-devops">L&#39;importance du Green DevOps</h2><p>L&#39;empreinte de calcul d&#39;un pipeline moderne ne cesse de croître. Les tests assistés par l&#39;IA, la revue de code et l&#39;automatisation des pipelines génèrent tous des jobs qui n&#39;existaient pas il y a quelques années, et impliquent tous un coût énergétique qui n&#39;apparaît jamais dans les métriques de vos pipelines ni dans votre schéma d&#39;architecture. Le Green DevOps vise à changer cette situation : il consiste à mesurer les émissions par exécution de pipeline, par service et par pod, puis à utiliser ces données pour prendre de meilleures décisions d&#39;ingénierie.</p><h2 id="où-lempreinte-carbone-apparaît-elle-dans-votre-pile">Où l&#39;empreinte carbone apparaît-elle dans votre pile ?</h2><p>Les deux couches les plus exploitables pour les équipes d&#39;ingénierie sont les suivantes :</p><h3 id="le-pipeline">Le pipeline</h3><p><a href="https://docs.gitlab.com/ci/sustainability/eco_ci/" rel="">Eco CI</a> mesure la consommation d&#39;énergie et les émissions de carbone de vos jobs CI/CD. Il s&#39;exécute sous forme de scripts Bash légers, sans serveurs ni bases de données distincts. Vous obtenez des données d&#39;émissions par job, identifiez les jobs les plus gourmands en ressources, suivez les tendances dans le temps et affichez un badge carbone dans votre README.</p><p>Pour la plupart des équipes, il s&#39;agit d&#39;un bon point de départ. Votre pipeline est déjà instrumenté ; Eco CI y ajoute simplement des données sur l&#39;empreinte carbone.</p><h3 id="linfrastructure-et-les-applications">L&#39;infrastructure et les applications</h3><p><a href="https://docs.gitlab.com/ci/sustainability/carmen/" rel="">Carmen</a> (Carbon Measurement Engine) va plus loin. Basé sur le <a href="https://if.greensoftware.foundation/" rel="">Green Software Foundation Impact Framework</a>, il mesure les émissions des machines virtuelles, des pods et des charges de travail applicatives individuelles qui s&#39;exécutent dans <a href="https://about.gitlab.com/fr-fr/blog/kubernetes-the-container-orchestration-solution/" rel="" title="Qu&#39;est-ce que Kubernetes ?">Kubernetes</a>. Vous obtenez un rapport CSV par composant, ventilé entre carbone opérationnel (consommation d&#39;énergie) et carbone incorporé (fabrication et mise au rebut du matériel), que vous pouvez injecter dans Grafana, dans vos tableaux de bord <a href="https://about.gitlab.com/fr-fr/blog/what-is-finops/" rel="" title="Qu&#39;est-ce que FinOps ?">FinOps</a> ou dans vos propres outils. Les champs de sortie incluent <code>EnergykWh</code> et <code>TotalCarbonGramsCO2eq</code> par composant : les données s&#39;intègrent donc aux tableaux de bord existants sans avoir besoin d&#39;être transformées.</p><p>Carmen se révèle particulièrement puissant pour répondre aux questions suivantes :</p><ul><li>Quel service de notre pile émet le plus de CO2 ?</li><li>Comment se positionne notre passerelle API face à notre couche de traitement des données ?</li></ul><h2 id="testez-ces-intégrations-dans-votre-pipeline">Testez ces intégrations dans votre pipeline</h2><p>Les deux outils s&#39;intègrent directement dans <code>.gitlab-ci.yml</code>. Voici à quoi ressemble un job Carmen :</p><pre className="language-yaml shiki shiki-themes github-light" code="carbon-report:
  image: python:3.12
  before_script:
    # Install Carmen and the IF toolchain
    - apt-get update &amp;&amp; apt-get install -y nodejs npm git lsb-release
    - git clone https://github.com/Green-Software-Foundation/if-carmen.git
    - npm install -g &quot;@grnsft/if@1.0.0&quot; &quot;@grnsft/if-plugins@0.3.2&quot; &quot;@grnsft/if-unofficial-plugins@0.3.1&quot;
    - pip install --upgrade pip &amp;&amp; pip install -e $CI_PROJECT_DIR/if-carmen
  script:
    - cd $CI_PROJECT_DIR/if-carmen/example-data &amp;&amp; carbon-daemon
  artifacts:
    paths:
      - if-carmen/example-data/output/
    expire_in: 1 week
" language="yaml" meta="" style=""><code><span class="line" line="1"><span class="shJU0">carbon-report</span><span class="sgsFI">:
</span></span><span class="line" line="2"><span class="shJU0">  image</span><span class="sgsFI">: </span><span class="sYBdl">python:3.12
</span></span><span class="line" line="3"><span class="shJU0">  before_script</span><span class="sgsFI">:
</span></span><span class="line" line="4"><span class="sAwPA">    # Install Carmen and the IF toolchain
</span></span><span class="line" line="5"><span class="sgsFI">    - </span><span class="sYBdl">apt-get update &amp;&amp; apt-get install -y nodejs npm git lsb-release
</span></span><span class="line" line="6"><span class="sgsFI">    - </span><span class="sYBdl">git clone https://github.com/Green-Software-Foundation/if-carmen.git
</span></span><span class="line" line="7"><span class="sgsFI">    - </span><span class="sYBdl">npm install -g &quot;@grnsft/if@1.0.0&quot; &quot;@grnsft/if-plugins@0.3.2&quot; &quot;@grnsft/if-unofficial-plugins@0.3.1&quot;
</span></span><span class="line" line="8"><span class="sgsFI">    - </span><span class="sYBdl">pip install --upgrade pip &amp;&amp; pip install -e $CI_PROJECT_DIR/if-carmen
</span></span><span class="line" line="9"><span class="shJU0">  script</span><span class="sgsFI">:
</span></span><span class="line" line="10"><span class="sgsFI">    - </span><span class="sYBdl">cd $CI_PROJECT_DIR/if-carmen/example-data &amp;&amp; carbon-daemon
</span></span><span class="line" line="11"><span class="shJU0">  artifacts</span><span class="sgsFI">:
</span></span><span class="line" line="12"><span class="shJU0">    paths</span><span class="sgsFI">:
</span></span><span class="line" line="13"><span class="sgsFI">      - </span><span class="sYBdl">if-carmen/example-data/output/
</span></span><span class="line" line="14"><span class="shJU0">    expire_in</span><span class="sgsFI">: </span><span class="sYBdl">1 week
</span></span></code></pre><p>Exécutez-le et téléchargez l&#39;artefact pour obtenir votre premier rapport carbone.</p><h2 id="en-pratique">En pratique</h2><p>Imaginez une équipe qui exécute des centaines de jobs de pipeline chaque jour. Elle ajoute Eco CI en un après-midi, avec quelques lignes dans <code>.gitlab-ci.yml</code> et un badge dans le README. Son premier rapport hebdomadaire fait apparaître un constat inattendu : sa suite de tests d&#39;intégration représente une part disproportionnée des émissions totales du pipeline, plus que tout autre type de job.</p><p>Le coupable n&#39;est pas les tests eux-mêmes, mais leur configuration : chaque exécution réinstalle l&#39;intégralité de ses dépendances à partir de zéro. Mettre en cache la couche des dépendances peut réduire à la fois la durée d&#39;exécution des jobs de test et leur empreinte carbone. Aucune nouvelle infrastructure est nécessaire, ni aucune décision d&#39;architecture. Il suffit d&#39;ajouter une simple ligne de configuration du cache.</p><p>Six semaines plus tard, l&#39;équipe exécute Carmen sur son cluster de préproduction et découvre un problème d&#39;un autre ordre : un service de traitement de données hérité d&#39;une fonctionnalité obsolète tourne toujours, à vide, et consomme du carbone incorporé et opérationnel pour des tâches qui n&#39;ont plus lieu d&#39;être. L&#39;équipe n&#39;a alors qu&#39;à ouvrir un ticket pour terminer le service.</p><p>Aucun de ces correctifs n&#39;a exigé d&#39;initiative dédiée au développement durable, il suffisait juste de les rendre visibles. La plupart des pertes carbone ne sont pas intentionnelles : elles sont invisibles, et c&#39;est précisément ce qu&#39;Eco CI et Carmen visent à corriger.</p><h2 id="peu-defforts-un-vrai-retour-sur-investissement">Peu d&#39;efforts, un vrai retour sur investissement</h2><p>Cette stratégie Green DevOps demande peu d&#39;efforts, car elle s&#39;intègre à des pipelines que vous exécutez déjà. Elle offre également un vrai retour sur investissement : les données s&#39;accumulent, que ce soit sous forme de socle de conformité ou de facture CI réduite.</p><p><strong>Les petits chiffres permettent d’établir une base de référence</strong><br />
Au niveau d&#39;une entreprise, les émissions des pipelines représentent probablement un chiffre négligeable. Mais la mesure ne concerne pas uniquement une part dans le total. Il s&#39;agit de construire les données, les outils et la culture dont vous aurez besoin à mesure que les exigences en matière de rapports sur les émissions évoluent. Les équipes qui mesurent dès aujourd&#39;hui leur empreinte carbone disposeront déjà de bases de référence et d&#39;habitudes internes le jour venu, au lieu de partir de zéro sous la pression.</p><p><strong>Le processus s&#39;intègre aux pipelines dont vous disposez déjà</strong><br />
Eco CI se résume à quelques lignes et un script Bash. Il ne déclenche pas d&#39;infrastructure supplémentaire et n&#39;ajoute pas de latence significative. Carmen s&#39;exécute comme un job distinct et non bloquant. Aucun des deux n&#39;est situé sur votre chemin critique. Si votre pipeline peut exécuter une vérification de linting, il peut exécuter une mesure de l&#39;empreinte carbone.</p><p><strong>Le retour sur investissement se reflète aussi dans vos indicateurs FinOps</strong><br />
Un code économe en carbone est souvent aussi un code plus rapide et moins coûteux. Les pipelines surdimensionnés consomment du temps de développement et du budget cloud avant de consommer du carbone. Le cache qui réduit les émissions peut également contribuer à réduire votre facture CI. Le dimensionnement optimal des runners représente un atout tant pour le FinOps que pour le développement durable, et vous n&#39;avez pas besoin de le présenter comme une initiative environnementale pour en tirer profit.</p><h2 id="une-perspective-plus-large">Une perspective plus large</h2><p>La conscience de son empreinte carbone devient une exigence professionnelle pour l&#39;ingénierie, et non plus un simple atout. Des réglementations comme la <a href="https://finance.ec.europa.eu/financial-markets/company-reporting-and-auditing/company-reporting/corporate-sustainability-reporting_en" rel="">directive concernant la publication d&#39;informations en matière de durabilité par les entreprises</a> obligent les grandes entreprises à publier les émissions générées tout au long de leur chaîne de valeur, y compris celles liées à l&#39;usage du cloud. Les entreprises interrogent de plus en plus leurs fournisseurs sur leurs pratiques en matière de développement durable lors des processus d&#39;achat.</p><p>Vous n&#39;avez pas besoin d&#39;attendre une obligation réglementaire pour vous lancer : ajoutez Eco CI à un pipeline, puis introduisez Carmen pour obtenir une vision au niveau de l&#39;infrastructure.</p><h2 id="pour-aller-plus-loin">Pour aller plus loin</h2><ul><li><a href="https://docs.gitlab.com/ci/sustainability/" rel="">Vue d&#39;ensemble du développement durable CI/CD</a></li><li><a href="https://docs.gitlab.com/ci/sustainability/eco_ci/" rel="">Intégration d&#39;Eco CI</a></li><li><a href="https://docs.gitlab.com/ci/sustainability/carmen/" rel="">Intégration de Carmen</a></li></ul><style>html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}</style>]]></content>
        <author>
            <name>Lysanne Pinto</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/lysanne-pinto/</uri>
        </author>
        <published>2026-07-22T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Transformez la livraison logicielle multi-étapes en flows agentiques fiables]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/multi-step-software-delivery-with-agentic-flows/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/multi-step-software-delivery-with-agentic-flows/"/>
        <updated>2026-07-17T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Dans le développement logiciel, savoir quoi faire ensuite n&#39;est que rarement le véritable défi. C&#39;est la répétition des mêmes étapes (implémenter un ticket, corriger un pipeline, réviser une merge request) qui pose problème. Un chat qui se contente de fournir des réponses vous laisse gérer chaque transition manuellement. Les scripts maison n&#39;intègrent pas les modifications des contrôles d&#39;accès, les nouveaux déclencheurs ou les règles de revue mises à jour. Dans les deux cas, les séquences en plusieurs étapes sur lesquelles les équipes s&#39;appuient restent enfermées dans des runbooks que seules quelques personnes maîtrisent.</p><p><a href="https://docs.gitlab.com/releases/19/gitlab-19-2-released/" rel="">GitLab 19.2</a> comble cette lacune avec la disponibilité générale des <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">flows personnalisés</a> : des workflows alimentés par l&#39;IA que vous définissez une seule fois, déclenchés par des événements GitLab natifs et exécutés dans un <a href="https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/" rel="" title="Qu&#39;est-ce qu&#39;un pipeline CI/CD ?">pipeline CI/CD</a>. Un schéma de pipeline auto-correctif tel que <em>analyser un test échoué → générer un correctif → effectuer un commit → notifier l&#39;équipe</em> devient ainsi un workflow que la plateforme peut exécuter de bout en bout.</p><p>Par ailleurs, les <a href="https://docs.gitlab.com/releases/19/gitlab-19-2-released/#start-foundational-flows-from-agentic-chat" rel="">flows par défaut</a> ne se déclenchent plus uniquement depuis un bouton, une mention ou une attribution. Désormais, lorsque votre requête dans GitLab Duo Agentic Chat correspond à une tâche spécifique (implémenter une modification, réviser une merge request, corriger un pipeline défaillant), GitLab Duo recommande le flow approprié, vous approuvez le transfert et suivez son avancement directement depuis la conversation.</p><p>La livraison logicielle agentique va au-delà du simple échange de messages. Les équipes encodent les séquences en lesquelles elles ont déjà confiance, les déclenchent depuis des événements ou le chat, et conservent la main sur les approbations plutôt que sur chaque étape intermédiaire.</p><h2 id="pourquoi-la-livraison-logicielle-multi-étapes-reste-manuelle">Pourquoi la livraison logicielle multi-étapes reste manuelle</h2><p>Les démonstrations agentiques privilégient les étapes isolées. Le travail de livraison réel est une chaîne : rassembler le contexte, modifier le code, ouvrir une merge request, attendre la CI, puis répondre aux retours de revue. Sans flows, chaque maillon de cette chaîne implique qu&#39;une personne clique, copie-colle ou mémorise des étapes spécifiques.</p><p>Construire ces chaînes semblait provisoire tant que les flows personnalisés au sein de GitLab Duo Agent Platform étaient encore en phase de maturation. Les équipes différaient l&#39;encodage des séquences en lesquelles elles avaient déjà confiance, tels que les pipelines auto-correctifs, « implémenter ce ticket » et les suivis pilotés par des événements, car la disponibilité en production et la couverture des événements n&#39;étaient pas encore au rendez-vous.</p><h2 id="ce-que-les-flows-agentiques-changent-pour-les-équipes-dingénierie">Ce que les flows agentiques changent pour les équipes d&#39;ingénierie</h2><ul><li><strong>Automatisez les séquences en lesquelles vous avez déjà confiance.</strong> Les flows personnalisés exécutent des tâches en plusieurs étapes sur plusieurs projets, déclenchés par des événements GitLab avec lesquels vous travaillez déjà : mentions, attributions, pipelines, cycle de vie des merge requests, modifications d&#39;éléments de travail, et bien plus encore. Ils s&#39;exécutent sous une identité composite, de sorte que les accès restent délimités et les actions traçables.</li><li><strong>Lancez des tâches spécialisées depuis le chat.</strong> Demandez à Agentic Chat d&#39;utiliser le flow Developer pour implémenter une tâche, le flow Code Review pour réviser une merge request, ou le flow Fix CI/CD Pipeline pour diagnostiquer et corriger un pipeline en échec. Approuvez le transfert, puis continuez à travailler pendant que la progression s&#39;affiche en ligne.</li><li><strong>Gardez le contrôle sur la revue automatique.</strong> Dans GitLab 19.2, les règles d&#39;exclusion vous permettent d&#39;ignorer la revue automatique pour les merge requests créées par des bots ou correspondant à des schémas de branches pour lesquelles vous ne souhaitez pas consommer de crédits. Les <a href="https://docs.gitlab.com/user/duo_agent_platform/customize/review_instructions/" rel="">instructions de revue personnalisées</a> définissent les critères de la revue, de sorte que vous choisissez non seulement <em>quelles</em> merge requests sont révisées, mais aussi <em>comment</em>.</li></ul><p><strong>Découvrez les flows agentiques GitLab Duo en action :</strong></p><iframe src="https://player.vimeo.com/video/1210303097?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="19.2 Custom Flows Reach GA Status"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="comment-fonctionnent-les-flows">Comment fonctionnent les flows ?</h2><p><strong>Flows personnalisés.</strong> Créez-en un depuis un projet ou le <a href="https://docs.gitlab.com/user/duo_agent_platform/ai_catalog/" rel="">catalogue d&#39;IA</a>, choisissez la visibilité, activez-le là où vous en avez besoin et associez un <a href="https://docs.gitlab.com/user/duo_agent_platform/triggers/" rel="">déclencheur</a> afin que les événements GitLab appropriés le lancent. Vous pouvez ajouter des points de contrôle nécessitant une intervention humaine aux étapes sensibles. Dans la version 19.2, les flows personnalisés intègrent également un déclencheur « changement de statut d&#39;un élément de travail » et une activation groupée pour les flows publics sur jusqu&#39;à 100 projets. À l&#39;avenir, un flow Creation Agent est prévu dans la roadmap, afin que les équipes puissent décrire un flow en langage naturel et obtenir une définition exécutable, sans avoir à rédiger manuellement le schéma complet au préalable.</p><p><strong>Flows par défaut dans Agentic Chat.</strong> Lorsque votre requête correspond à une tâche spécialisée, elle peut être transmise à un flow par défaut. Vous donnez votre accord avant toute exécution, et restez dans la conversation pendant que le flow s&#39;exécute. C&#39;est là toute la différence avec un chat qui se contente uniquement de répondre : les étapes multiples sont prises en charge sans que vous ayez à quitter GitLab.</p><p><strong>Automatisation mise à jour pour le flow Code Review.</strong> Les règles d&#39;exclusion empêchent les merge requests pilotées par des bots ou hors périmètre de consommer des cycles de revue de code non souhaités. De plus, les <a href="https://docs.gitlab.com/user/duo_agent_platform/customize/review_instructions/" rel="">instructions de revue personnalisées</a> définissent ce que la qualité signifie pour votre équipe, de sorte que l&#39;extension de l&#39;automatisation ne revient pas à réviser tout de la même façon.</p><h2 id="commencez-à-encoder-les-séquences-que-vous-exécutez-déjà">Commencez à encoder les séquences que vous exécutez déjà</h2><p>Les flows personnalisés sont désormais en disponibilité générale, et les flows par défaut peuvent désormais être lancés depuis Agentic Chat, qui achemine votre requête vers le flow spécialisé approprié au fil de votre description, traduisant les séquences de livraison logicielle agentique en lesquelles votre équipe a déjà confiance en une automatisation prévisible.</p><p>Vous souhaitez en savoir plus ? Consultez notre documentation sur les <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">flows personnalisés</a> et les <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/" rel="">flows par défaut</a>. Un point à anticiper : les flows pilotés par des événements consomment des crédits en fonction des tâches effectuées. Testez-les sur quelques projets avant de les déployer à grande échelle.</p><p>À l&#39;instar des autres fonctionnalités de GitLab Duo Agent Platform, vous pouvez accéder aux flows agentiques grâce à un <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">essai gratuit de GitLab Duo Agent Platform</a>. Sur l&#39;édition Gratuite, vous pouvez <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">vous inscrire en quelques étapes simples</a>.</p><p>Vous utilisez déjà GitLab Premium ou GitLab Ultimate ? Commencez par <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">activer GitLab Duo Agent Platform</a> et utilisez les <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits/" rel="">GitLab Credits inclus dans votre abonnement</a>.</p>]]></content>
        <author>
            <name>Ozer Dondurmacioglu</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/ozer-dondurmacioglu/</uri>
        </author>
        <published>2026-07-17T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Le flow GitLab Duo Security Review détecte les failles logiques que les scanners n'identifient pas]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/gitlab-duo-security-review-flow/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/gitlab-duo-security-review-flow/"/>
        <updated>2026-07-17T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Les scanners statiques excellent dans la détection des vulnérabilités qui correspondent à un modèle connu : entrées de requête non validées, secrets codés en dur, désérialisation non sécurisée. En revanche, ils peinent à détecter les failles dans la logique de votre application, où il n&#39;existe aucun modèle à faire correspondre, seulement du code valide qui fonctionne de manière inappropriée pour votre domaine. Si elles ne sont pas détectées, ces failles apparaissent tardivement et sont plus coûteuses à corriger.</p><p>Le flow Security Review, désormais disponible en version bêta publique, examine les modifications de code comme le ferait un ingénieur en sécurité. Il analyse l&#39;intention au lieu de comparer des signatures, afin de détecter les failles logiques avant qu&#39;elles n&#39;atteignent l&#39;environnement de production. Il s&#39;agit d&#39;une avancée majeure pour identifier les failles dangereuses que les scanners manquent habituellement.</p><h2 id="les-limites-des-scanners-basés-sur-des-modèles">Les limites des scanners basés sur des modèles</h2><p>Les vulnérabilités applicatives les plus préjudiciables semblent souvent correctes ligne par ligne, mais enfreignent un contexte que le code ne contient pas, comme votre modèle d&#39;autorisation, vos règles de sensibilité des données et vos workflows prévus. Voici trois des catégories de vulnérabilités les plus courantes :</p><p><strong>Accès et autorisation :</strong> la possibilité pour un utilisateur de lire ou de modifier une ressource est définie par votre modèle d&#39;autorisation, et non par une construction du langage. La Broken Object Level Authorization (faille d&#39;autorisation donnant accès aux données d&#39;un autre utilisateur en modifiant un identifiant) figure en tête du classement <a href="https://owasp.org/API-Security/editions/2023/fr/0x11-t10/" rel="">OWASP API Security Top 10</a> depuis 2019.</p><p><strong>Exposition des données :</strong> sérialiser un objet et le renvoyer est un code courant, d&#39;apparence correcte. La question de savoir s&#39;il divulgue des informations dépend des champs sensibles et de leurs destinataires, des éléments propres à votre domaine, et non à votre syntaxe.</p><p><strong>Flux de contrôle et workflow :</strong> les failles de logique métier et les conditions de concurrence surviennent lorsque des opérations valides s&#39;exécutent dans le mauvais ordre, se répètent de façon inattendue ou sont manipulées. Exemples : processus de paiement contournable, état réactivé en raison d&#39;une condition de concurrence ou paramètre modifié pour changer un prix.</p><p>Jusqu&#39;à présent, la détection de ces failles nécessitait une revue de sécurité manuelle (coûteuse à mettre à l&#39;échelle pour chaque merge request) ou des tests de pénétration et des programmes de bug bounty, qui interviennent trop tard. Il en résulte un écart croissant entre le rythme de développement et la rapidité avec laquelle l&#39;expertise en sécurité peut être mise à profit.</p><h2 id="intégrer-une-évaluation-de-sécurité-à-chaque-merge-request">Intégrer une évaluation de sécurité à chaque merge request</h2><p>Le flow Security Review, disponible par défaut sur GitLab Duo Agent Platform, comble cet écart en analysant la finalité de votre code. Il détecte précisément les catégories de failles décrites ci-dessus : Broken Object Level Authorization et Broken Function Level Authorization (faille d&#39;autorisation donnant à un utilisateur un accès à des fonctionnalités qui devraient lui être interdites), absence d&#39;autorisation sur les opérations modifiant l&#39;état, divulgation d&#39;informations, attributions en masse, erreurs de logique métier et conditions de concurrence dans les workflows avec état.</p><p>Il complète les scanners traditionnels et l&#39;analyse humaine sans les remplacer, et examine le code au moment même où une modification est apportée, lorsque la correction est la moins coûteuse. L&#39;équipe de sécurité applicative de GitLab a utilisé le flow Security Review sur l&#39;ensemble de ses merge requests internes tout au long de son développement.</p><p><strong>Découvrez le flow Security Review en action :</strong></p><iframe src="https://player.vimeo.com/video/1209923383?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="19.2 Security Review Flow"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="fonctionnement">Fonctionnement</h2><p>Lorsque votre merge request est prête, demandez une revue à <code>Duo Security Review</code>, comme vous le feriez auprès d&#39;une personne. Le flow Security Review analyse le diff en contexte : les fichiers d&#39;origine, les lignes modifiées, la discussion de la merge request et le code associé. Son raisonnement est optimisé pour la précision, et une passe de validation indépendante examine chaque résultat afin de filtrer les faux positifs probables.</p><p>Les résultats apparaissent sous forme de fils de discussion sur les lignes concernées, accompagnés d&#39;un résumé dans une note interne. Sur les projets publics, ils sont limités à la note interne afin que les détails de sécurité ne soient pas exposés.</p><p>Chaque résultat est accompagné du contexte dont les relecteurs ont besoin :</p><ul><li><strong>Type de vulnérabilité</strong>, avec une référence CWE</li><li><strong>Sévérité</strong> : critique, élevée, modérée ou faible</li><li><strong>Niveau</strong> : Niveau 1 (Exploitable), Niveau 2 (Faille logique) ou Niveau 3 (Problème de conception)</li><li><strong>Une explication en langage clair</strong> du problème</li><li><strong>Une correction suggérée</strong>, lorsqu&#39;elle est disponible</li></ul><p>La sévérité détermine l&#39;état du relecteur : un résultat critique ou élevé définit l&#39;état sur <em>Demander des modifications</em>, tandis que les résultats modérés ou faibles donnent lieu à un <em>Commentaire</em>. Le flow n&#39;approuve jamais, même lorsqu&#39;il ne trouve rien, la décision finale revient toujours à un humain.</p><p>À partir de là, mentionnez le compte de service GitLab Duo Security Review de votre organisation dans un fil de discussion pour poser une question, discuter d&#39;une correction ou contester un résultat. Résolvez chaque résultat en appliquant la correction sous forme de suggestion de merge request standard, en le rejetant comme faux positif ou en acceptant le risque. Après avoir effectué un commit de vos corrections, demandez une nouvelle revue pour vérifier ce qui a changé.</p><h2 id="lancez-votre-premier-flow-security-review">Lancez votre premier flow Security Review</h2><p>Le flow Security Review est en version bêta publique pour les clients GitLab Ultimate. Il est disponible sur GitLab.com, GitLab Self-Managed et GitLab Dedicated.</p><p>Découvrez comment démarrer en consultant notre <a href="https://docs.gitlab.com/ee/user/duo_agent_platform/flows/foundational_flows/security_review/" rel="">documentation dédiée au flow Security Review</a>.</p><p>Vous pouvez accéder au flow Security Review grâce à un <a href="https://gitlab.com/-/trials/new?glm_content=default-saas-trial&amp;glm_source=about.gitlab.com/gitlab-duo-agent-platform/" rel="">essai gratuit de GitLab Duo Agent Platform</a>. Vous êtes déjà abonné à GitLab Ultimate ? <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">Activez GitLab Duo Agent Platform</a> et utilisez les <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">GitLab Credits inclus dans votre abonnement</a>.</p><p>Le coût varie en fonction de la complexité du diff et du modèle sélectionné ; testez-le sur quelques merge requests avant de le déployer à grande échelle. La tarification pourra être mise à jour lors de la disponibilité générale.</p><p>Partagez vos retours dans notre <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/600304" rel="">ticket dédié à cette fonctionnalité</a>, afin que vos contributions orientent nos développements.</p>]]></content>
        <author>
            <name>Mark Settle</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/mark-settle/</uri>
        </author>
        <published>2026-07-17T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Intégrez GitLab Duo Agent Platform à votre terminal]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/gitlab-duo-cli-generally-available/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/gitlab-duo-cli-generally-available/"/>
        <updated>2026-07-17T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>La livraison logicielle ne se passe pas uniquement dans l&#39;éditeur. Les pipelines échouent. Les tests échouent. Des vulnérabilités apparaissent. Et une grande partie de ce travail commence et se termine en ligne de commande.</p><p>Une IA agentique dans le terminal qui ne comprend que le code ne peut pas vous aider dans ces situations. Un assistant autonome ne connaît pas vos agents sur l&#39;ensemble du cycle de vie logiciel, vos autorisations sur les nombreux projets de votre organisation, ni le contexte spécifique d&#39;un projet que vous avez déjà configuré dans GitLab.</p><p>C&#39;est ce qui change avec <a href="https://docs.gitlab.com/releases/19/gitlab-19-2-released/" rel="">GitLab 19.2</a>. <a href="https://docs.gitlab.com/user/gitlab_duo_cli/" rel="">GitLab Duo CLI</a> est désormais en disponibilité générale et intègre <a href="https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/" rel="">GitLab Duo Agentic Chat</a> directement dans votre terminal. Contrairement aux outils externes, il connaît déjà votre projet, vos pipelines et votre configuration d&#39;agents. Vous pouvez l&#39;utiliser de manière interactive lorsque vous explorez et développez, ou en mode headless lorsque vous souhaitez l&#39;exécuter dans un job ou un script.</p><p>Ainsi, les équipes de développement restent dans le shell où l&#39;échec s&#39;est produit, et leur travail se poursuit entre le terminal, l&#39;interface utilisateur et l&#39;éditeur. Les équipes plateforme gèrent le déploiement comme tout le reste sur GitLab, et l&#39;assistance agentique couvre enfin davantage du cycle de livraison que la simple rédaction d&#39;une fonction.</p><h2 id="pourquoi-lia-agentique-dans-le-terminal-sest-limitée-au-code">Pourquoi l&#39;IA agentique dans le terminal s&#39;est limitée au code</h2><p>Les outils agentiques ont d&#39;abord évolué là où les démonstrations sont les plus convaincantes : la modification de fichiers. Le cycle de vie après le commit est plus complexe et plus opérationnel. Lorsque l&#39;échec concerne un pipeline, une dépendance ou une configuration CI, le contexte se trouve dans GitLab, et non dans l&#39;ensemble d&#39;apprentissage d&#39;un agent de codage ou dans son contexte local.</p><p>Les équipes qui ont tenté de combler cet écart avec des assistants CLI génériques ont rencontré d&#39;autres obstacles : aucun contrôle d&#39;administration partagé, aucun diagnostic MCP/configuration aligné sur la plateforme et aucun modèle d&#39;identité unique avec le reste du cycle de vie logiciel agentique. Le travail agentique dans le terminal est resté cantonné au codage, au lieu d&#39;apporter son aide sur l&#39;ensemble du processus de livraison.</p><h2 id="avantages-de-gitlab-duo-cli-en-disponibilité-générale-pour-les-équipes">Avantages de GitLab Duo CLI en disponibilité générale pour les équipes</h2><ul><li><strong>Restez dans le terminal pour les tâches qui s&#39;y trouvent déjà.</strong> Explorez l&#39;architecture du code, construisez et refactorisez, analysez les échecs de pipeline, optimisez votre <a href="https://about.gitlab.com/fr-fr/topics/ci-cd/" rel="" title="Qu&#39;est-ce que le CI/CD ?">CI/CD</a> et accomplissez des tâches multi-étapes sans avoir à ouvrir le navigateur à chaque fois que vous avez besoin d&#39;une réponse.</li><li><strong>Reprenez là où vous vous êtes arrêté, quelle que soit la surface.</strong> Les sessions sont synchronisées entre GitLab Duo CLI, l&#39;interface utilisateur de GitLab et les extensions d&#39;éditeur. Commencez une conversation dans le navigateur et continuez-la simplement dans votre shell.</li><li><strong>Planifiez d&#39;abord, puis construisez.</strong> Le mode interactif fonctionne comme Agentic Chat : le mode Planification explore l&#39;environnement sans rien modifier, tandis que le mode Build applique les modifications. Vous avez besoin d&#39;une exécution sans surveillance ? Le mode headless s&#39;intègre aux jobs CI et aux scripts.</li><li><strong>Activez GitLab Duo CLI quand vous êtes prêt.</strong> GitLab Duo CLI fonctionne sur GitLab.com, GitLab Self-Managed et GitLab Dedicated. Sur GitLab Self-Managed et GitLab Dedicated, les administrateurs peuvent activer ou désactiver l&#39;accès à l&#39;instance. Où que vous l&#39;utilisiez, les équipes de développement peuvent exécuter <code>/doctor</code> pour vérifier leur configuration et <code>/mcp</code> pour consulter leur configuration MCP.</li></ul><p><strong>Découvrez GitLab Duo CLI en action :</strong></p><iframe src="https://player.vimeo.com/video/1210314517?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="Demo - Duo CLI goes GA with 19.2"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="fonctionnement-de-gitlab-duo-cli">Fonctionnement de GitLab Duo CLI</h2><p>La méthode la plus simple consiste à utiliser <a href="https://docs.gitlab.com/cli/duo/cli/" rel="">GitLab CLI</a> : exécutez <code>glab duo cli</code>, et <code>glab</code> se charge de l&#39;authentification à votre place. Vous pouvez également installer et exécuter <code>duo</code> en tant qu&#39;outil autonome à l&#39;aide d&#39;un jeton d&#39;accès personnel. Ces deux configurations prennent en charge les mêmes modes et fonctionnalités.</p><ul><li><strong>Mode interactif</strong> : discutez dans le terminal et approuvez les outils avant toute exécution. Explorez le code source, planifiez un correctif, puis passez en mode Build lorsque vous êtes prêt à effectuer des modifications.</li><li><strong>Mode headless</strong> : exécution non interactive pour les runners, les scripts et l&#39;automatisation. Utilisez <code>glab duo cli run --goal</code> ou <code>duo run --goal</code>.</li></ul><p>Par exemple, lorsqu&#39;un pipeline échoue, posez votre question depuis le même shell :</p><pre className="language-shell shiki shiki-themes github-light" code="$ glab duo cli
&gt; The pipelines in MR 23 are failing. Please help me fix them.
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">$</span><span class="sYBdl"> glab</span><span class="sYBdl"> duo</span><span class="sYBdl"> cli
</span></span><span class="line" line="2"><span class="sD7c4">&gt;</span><span class="sgsFI"> The pipelines in MR 23 are failing. Please help me fix them.
</span></span></code></pre><p>GitLab Duo CLI examine la situation, identifie ce qui s&#39;est mal passé et propose des modifications que vous pouvez examiner avant de les appliquer. Il suit vos instructions personnalisées (<code>chat-rules.md</code>, <code>AGENTS.md</code>, <a href="http://SKILL.md" rel=""><code>SKILL.md</code></a>) à mesure que vous évoluez, et vous pouvez enrichir ses sessions interactives avec des <a href="https://docs.gitlab.com/user/gitlab_duo_cli/#custom-slash-commands" rel="">commandes slash personnalisées</a>.</p><h2 id="commencez-à-utiliser-gitlab-duo-cli-dès-aujourdhui">Commencez à utiliser GitLab Duo CLI dès aujourd&#39;hui</h2><p>Consultez la <a href="https://docs.gitlab.com/user/gitlab_duo_cli/" rel="">documentation sur GitLab Duo CLI</a> pour l&#39;installation et l&#39;authentification. Si vous utilisez déjà GitLab CLI, commencez par <a href="https://docs.gitlab.com/cli/duo/cli/" rel=""><code>glab duo cli</code></a>.</p><p>Vous souhaitez en savoir plus sur GitLab ? <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">Démarrez un essai gratuit de GitLab Duo Agent Platform</a>. Vous utilisez déjà GitLab Premium ou GitLab Ultimate ? <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">Activez GitLab Duo Agent Platform</a> et utilisez les <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits/" rel="">GitLab Credits inclus dans votre abonnement</a>.</p><style>html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}</style>]]></content>
        <author>
            <name>Ozer Dondurmacioglu</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/ozer-dondurmacioglu/</uri>
        </author>
        <published>2026-07-17T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Une mise à jour de version fait échouer votre build ? GitLab le corrige !]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/dependency-scanning-auto-remediation/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/dependency-scanning-auto-remediation/"/>
        <updated>2026-07-17T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>L&#39;IA génère davantage de code et intègre toujours plus de dépendances, ce qui accroît les risques de sécurité applicative. La majeure partie de cette exposition ne provient pas du code que votre équipe a délibérément choisi. Une <a href="https://arxiv.org/abs/2503.22134" rel="">étude de 2025 portant sur l&#39;écosystème Maven</a> a révélé que des vulnérabilités atteignaient environ 63 % des dernières releases via des dépendances transitives, contre 31 % via des dépendances directes.</p><p>La fonctionnalité <a href="https://docs.gitlab.com/user/application_security/remediate/dependency_scanning_auto_remediation/" rel="">Dependency Scanning Auto-Remediation</a>, désormais en version bêta, comble cet écart en matière de sécurité. Lorsque l&#39;<a href="https://about.gitlab.com/fr-fr/blog/sbom-based-dependency-scanning/" rel="">analyse des dépendances</a> détecte un paquet vulnérable, GitLab ouvre une merge request pour le mettre à jour, utilise l&#39;IA pour corriger les changements cassants et itère jusqu&#39;à ce que votre pipeline soit opérationnel, chaque modification étant régie par vos portes logicielles et votre piste d&#39;audit existantes.</p><p>Résultat : les backlogs de sécurité diminuent sans mobiliser les équipes de développement, les vulnérabilités de sévérité élevée sont corrigées dans les délais de conformité, et les mises à niveau cassantes arrivent sous forme de merge requests prêtes à être approuvées.</p><h2 id="pourquoi-le-backlog-de-dépendances-ne-cesse-de-croître">Pourquoi le backlog de dépendances ne cesse de croître</h2><p>Les composants vulnérables et obsolètes constituent un risque de longue date de l&#39;<a href="https://about.gitlab.com/fr-fr/blog/2025-owasp-top-10-whats-changed-and-why-it-matters/" rel="">OWASP TOP 10</a> et une part importante des backlogs de corrections. Le traitement des failles détectées est un travail lent et manuel qui empiète sur la livraison de fonctionnalités, si bien que des vulnérabilités de sévérité élevée restent non résolues au-delà des délais de 30 jours imposés par les normes PCI-DSS et <a href="https://about.gitlab.com/blog/gitlab-dedicated-for-government-now-fedramp-authorized/" rel="">FedRAMP</a>. Par ailleurs, même dans des bibliothèques établies, l&#39;ingénierie d&#39;exploits assistée par l&#39;IA accélère la divulgation et les attaques.</p><p>Près d&#39;une mise à jour de dépendance sur huit <a href="https://link.springer.com/article/10.1007/s10664-024-10563-4" rel="">introduit un changement cassant</a>, et nombre de celles qualifiées de rétrocompatibles font tout de même échouer le build. Les équipes ont tendance à reporter les changements complexes, et plus ces vulnérabilités persistent, plus elles deviennent sérieuses.</p><h2 id="du-backlog-à-la-correction-sans-mobiliser-les-équipes-de-développement">Du backlog à la correction, sans mobiliser les équipes de développement</h2><p>La fonctionnalité Dependency Scanning Auto-Remediation transforme les dépendances vulnérables en corrections examinées et prêtes à être fusionnées, afin que votre équipe puisse traiter les failles détectées plus rapidement et consacrer moins de temps à la résolution des changements cassants. Les équipes profitent ainsi d&#39;améliorations en termes de rapidité, d&#39;effort et de contrôle :</p><ul><li><strong>Réduisez le backlog des dépendances.</strong> Les dépendances vulnérables sont mises à niveau dès leur détection. Ainsi, les failles de sécurité ne s&#39;accumulent pas et les problèmes de sévérité élevée respectent les délais de conformité.</li><li><strong>Récupérez le temps perdu à réécrire les changements cassants.</strong> Lorsqu&#39;une mise à jour fait échouer le build, <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> effectue un commit d&#39;une correction pour que les équipes de développement examinent une modification fonctionnelle au lieu de la créer à partir de zéro.</li><li><strong>Maintenez chaque modification sous contrôle.</strong> La correction automatique prépare la modification, mais rien n&#39;est fusionné tant qu&#39;un relecteur ne l&#39;a pas approuvée, et chaque merge request fournit une piste d&#39;audit avec les changements et les approbateurs.</li></ul><h2 id="corriger-rapidement-les-vulnérabilités-même-lorsquelles-nécessitent-des-modifications-de-code">Corriger rapidement les vulnérabilités, même lorsqu&#39;elles nécessitent des modifications de code</h2><p>La fonctionnalité Dependency Scanning Auto-Remediation met à niveau les dépendances et corrige les changements cassants en deux étapes :</p><p><strong>La mise à niveau automatisée de la version des dépendances</strong> s&#39;exécute automatiquement lorsque le scan détecte une dépendance vulnérable : une merge request est alors ouverte pour la mettre à niveau vers la version corrigée la plus proche. Lorsqu&#39;aucune correction éligible n&#39;existe, la faille détectée reste dans votre rapport de vulnérabilités jusqu&#39;à ce qu&#39;un chemin de mise à niveau sûr soit disponible. Chaque merge request est attribuée à un compte de service dédié pour que chaque modification soit traçable jusqu&#39;à une identité distincte.</p><p><strong>La résolution agentique des changements cassants</strong> prend en charge les cas difficiles lorsqu&#39;une mise à niveau de version introduit des changements cassants. Si le pipeline d&#39;une merge request de correction échoue parce que la nouvelle version fait échouer votre projet, GitLab Duo Agent Platform analyse automatiquement les erreurs du pipeline, le changelog de la dépendance et la façon dont votre code utilise cette dépendance. Ensuite, dans la même merge request, il effectue des commits pour corriger votre code afin que votre projet soit aligné sur la version mise à jour. S&#39;il ne parvient pas à faire passer le pipeline, il s&#39;arrête et publie ses conclusions dans la merge request pour que vous puissiez prendre le relais. Les écosystèmes pris en charge incluent Bundler, Maven, Gradle, ainsi que les principaux gestionnaires de paquets Python et JavaScript/TypeScript, avec <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/604602" rel="">Rust</a> et <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/604601" rel="">Go</a> prévus dans les mois à venir.</p><p>La fonctionnalité Dependency Scanning Auto-Remediation ne fusionne jamais de manière autonome. Pour accélérer la revue, chaque merge request précise la vulnérabilité qu&#39;elle traite, la version vers laquelle elle migre, et le code que GitLab Duo Agent Platform a suggéré pour maintenir le build opérationnel : les approbateurs n&#39;ont ainsi pas à reconstituer la modification par eux-mêmes.</p><h2 id="fonctionnement-de-la-fonctionnalité-dependency-scanning-auto-remediation">Fonctionnement de la fonctionnalité Dependency Scanning Auto-Remediation</h2><p>La fonctionnalité Dependency Scanning Auto-Remediation s&#39;exécute automatiquement lorsque l&#39;analyse des dépendances basée sur les nomenclatures logicielles (SBOM) détecte une dépendance vulnérable disposant d&#39;une correction disponible. Il est également possible de l&#39;utiliser pour une faille individuelle depuis le rapport de vulnérabilités. GitLab ouvre alors une merge request de correction qui suit votre processus habituel de revue et de merge ; lorsque la résolution agentique des changements cassants est activée et que la mise à niveau de version fait échouer le pipeline, GitLab Duo Agent Platform tente de corriger les modifications de code résultantes dans cette même merge request.</p><p>Des garde-fous intégrés empêchent cette fonctionnalité de devenir source de faux positifs. Des périodes de stabilisation évitent que les projets très actifs ne déclenchent une correction à chaque pipeline, et GitLab ne recrée pas une merge request fermée à moins qu&#39;une correction plus récente ne soit disponible.</p><p>Configurez la fonctionnalité selon votre tolérance au risque. Vous pouvez cibler des vulnérabilités de n&#39;importe quelle sévérité, du niveau faible au niveau critique, limiter l&#39;amplitude des mises à niveau autorisées (correctif, mineur ou majeur), et stocker les paramètres dans des profils de configuration au niveau du projet ou du groupe (via l&#39;API pendant la version bêta).</p><p>La fonctionnalité s&#39;exécute via le pipeline de votre organisation et hérite ainsi de vos contrôles d&#39;accès et de vos portes d&#39;approbation existants. Vous disposez également d&#39;un enregistrement complet et auditable des changements, des approbateurs et des motifs.</p><p>Découvrez la fonctionnalité Dependency Scanning Auto-Remediation en action :</p><iframe src="https://player.vimeo.com/video/1210291456?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="Dependency Scanning Auto Remediation"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="commencez-à-réduire-votre-backlog-de-dépendances-dès-aujourdhui">Commencez à réduire votre backlog de dépendances dès aujourd&#39;hui</h2><p>La fonctionnalité Dependency Scanning Auto-Remediation est en version bêta publique. Elle est disponible sur <a href="http://GitLab.com" rel="">GitLab.com</a> et déployée progressivement sur GitLab Self-Managed et GitLab Dedicated.</p><p>Prêt à l&#39;essayer ? Consultez la <a href="https://docs.gitlab.com/user/application_security/remediate/dependency_scanning_auto_remediation/" rel="">documentation relative à la fonctionnalité Dependency Scanning Auto-Remediation</a>.</p><p>La mise à niveau automatisée de la version des dépendances est incluse dans GitLab Ultimate sans coût supplémentaire.</p><p>Vous pouvez accéder à la résolution agentique des changements cassants avec un <a href="https://gitlab.com/-/trials/new?glm_content=default-saas-trial&amp;glm_source=about.gitlab.com/gitlab-duo-agent-platform/" rel="">essai gratuit de GitLab Duo Agent Platform</a>. Vous êtes déjà abonné à GitLab Ultimate ? <a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">Activez GitLab Duo Agent Platform</a> et utilisez les <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">GitLab Credits inclus dans votre abonnement</a>.</p><p>Vous avez des retours à partager ? Communiquez-nous vos commentaires dans cet <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/600511" rel="">epic</a>.</p>]]></content>
        <author>
            <name>Mark Settle</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/mark-settle/</uri>
        </author>
        <published>2026-07-17T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Forrester Consulting : GitLab Duo Agent Platform génère un ROI de 400 %]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Une nouvelle <a href="https://about.gitlab.com/resources/study-forrester-tei-gitlab-dap" rel="">étude Total Economic Impact™ réalisée par Forrester Consulting</a> révèle que les organisations qui utilisent GitLab Duo Agent Platform obtiennent un retour sur investissement (ROI) de 400 % et une valeur actuelle nette de 7,5 millions de dollars sur trois ans, avec un délai de récupération inférieur à six mois.</p><p>Le développement agentique permet aux équipes de développement de gagner en rapidité. Le véritable défi pour les entreprises est de transformer cette rapidité en retour sur investissement concret. Des commits plus rapides ne constituent qu&#39;une partie de l&#39;équation lorsqu&#39;il s&#39;agit de livrer des logiciels prêts pour la mise en production. Un ingénieur système senior dans le secteur des assurances et des services financiers l&#39;a exprimé clairement : la revue de code qui prenait auparavant des heures ne prend désormais qu&#39;une fraction de ce temps, avec 80 à 90 % de la génération de code prise en charge par la plateforme.</p><p>Pour aider les dirigeants à comprendre les retours sur investissement réalisables avec GitLab, Forrester a interrogé quatre décideurs dans les secteurs des services financiers, du développement logiciel, du divertissement et des assurances, qui utilisent GitLab Duo Agent Platform en production. Leurs expériences ont ensuite été regroupées au sein d&#39;une seule et même organisation composite : une entreprise mondiale générant 3 milliards de dollars de chiffre d&#39;affaires annuel et comptant 3 000 employés, dont le nombre d&#39;utilisateurs de GitLab Duo Agent Platform est passé de 150 à 250 en trois ans.</p><h2 id="évaluer-les-coûts-au-regard-du-roi">Évaluer les coûts au regard du ROI</h2><p>L&#39;étude fait preuve de transparence quant à l&#39;investissement requis : sur trois ans, les coûts ajustés au risque s&#39;élèvent à 1,3 million de dollars en crédits de consommation et à 589 000 dollars en frais de mise en œuvre et de gestion courante, y compris la main-d&#39;œuvre interne pour le programme pilote, la formation et l&#39;assistance. Face à 9,4 millions de dollars de bénéfices, ces chiffres constituent la base du ROI de 400 % et de la valeur actuelle nette de 7,5 millions de dollars.</p><p><img alt="Graphique illustrant les bénéfices de GitLab Duo Agent Platform" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1783954053/j8qizamomxpvqcxjabeu.png" /></p><h2 id="avant-tâches-manuelles-interruptions-et-goulots-détranglement-dans-la-revue-de-code">Avant : tâches manuelles, interruptions et goulots d&#39;étranglement dans la revue de code</h2><p>Avant d&#39;adopter GitLab Duo Agent Platform, les personnes interrogées décrivaient des goulots d&#39;étranglement bien connus : les équipes étaient dépendantes de processus manuels, de l&#39;expertise des ingénieurs seniors et d&#39;un partage de connaissances informel pour développer, réviser et sécuriser les logiciels. Les nouvelles recrues ne pouvaient pas débloquer leur travail sans solliciter un ingénieur senior. Les correctifs de sécurité s&#39;accumulaient jusqu&#39;à ce que l&#39;une des rares personnes disposant du contexte adéquat ait le temps de les examiner. La revue de code, plutôt que l&#39;écriture du code elle-même, constituait souvent un frein à la mise en production. Ce sont ces dépendances que l&#39;organisation composite de Forrester a identifiées, résolues et évaluées.</p><h2 id="après-intégration-accélérée-migration-correction-des-vulnérabilités-et-gain-de-temps">Après : intégration accélérée, migration, correction des vulnérabilités et gain de temps</h2><p><a href="https://about.gitlab.com/resources/study-forrester-tei-gitlab-dap" rel="">Forrester a quantifié quatre domaines</a> où l&#39;organisation composite a réalisé des bénéfices, qui ont totalisé 9,4 millions de dollars de bénéfices ajustés au risque pour 1,9 million de dollars de coûts :</p><p><strong>L&#39;intégration des nouveaux développeurs a connu une accélération de 80 %.</strong> Au lieu de mobiliser un collaborateur, les nouveaux membres de l&#39;équipe ont utilisé le chat agentique intégré à leurs <a href="https://about.gitlab.com/fr-fr/blog/what-is-an-ide/" rel="" title="Qu&#39;est-ce qu&#39;un IDE ?">IDE</a> et à leurs dépôts pour obtenir le contexte nécessaire et se familiariser par eux-mêmes avec des codes sources et des conventions qui leur étaient inconnues, soit une économie de 582 000 dollars.</p><p><strong>Une migration prévue sur huit mois s&#39;est achevée en deux mois, soit une réduction de 75 % du calendrier.</strong> L&#39;organisation composite a utilisé GitLab Duo Agent Platform pour diagnostiquer les échecs de pipeline et résoudre les problèmes en temps réel lors d&#39;une migration à grande échelle d&#39;un environnement GitLab sur site vers GitLab SaaS, ce qui a permis d&#39;économiser 157 000 dollars en coûts de main-d&#39;œuvre.</p><p><strong>Les ingénieurs en sécurité et en assurance qualité ont récupéré 40 % de leur temps.</strong> Les ingénieurs en assurance qualité et en sécurité ont réduit leur temps de correction grâce aux explications contextuelles et aux correctifs suggérés par GitLab Duo Agent Platform. Ainsi, leur dépendance vis-à-vis des ingénieurs seniors a diminué, ce qui a permis une économie de main-d&#39;œuvre de 1,3 million de dollars sur trois ans.</p><p><strong>Chaque développeur a pu récupérer 20 % de son temps hebdomadaire pour développer des fonctionnalités.</strong> Le chat agentique et les agents d&#39;IA ont pris en charge la revue de code, les tests et le débogage qui empiétaient auparavant sur le temps de développement. Ce gain cumulé a atteint 7,4 millions de dollars pour l&#39;ensemble des équipes de développement à mesure que l&#39;adoption s&#39;est généralisée au cours de ces trois années.</p><p>Forrester a également identifié des bénéfices qu&#39;il n&#39;a pas quantifiés dans cette étude, notamment les économies réalisées grâce à la consolidation des outils de développement alimentés par l&#39;IA redondants, l&#39;amélioration de la satisfaction des équipes de développement et un meilleur partage des connaissances entre les équipes.</p><blockquote><p><em>« Les releases de fonctionnalités qui prenaient auparavant quelques semaines sont désormais réalisées en quelques jours. Nous observons donc une forte augmentation de la productivité des équipes. » — Responsable de l&#39;automatisation dans une société de services financiers</em></p></blockquote><h2 id="des-retours-cumulés-pour-livrer-des-logiciels-sécurisés-plus-rapidement">Des retours cumulés pour livrer des logiciels sécurisés plus rapidement</h2><p>Les personnes interrogées n&#39;ont pas seulement codé plus vite : elles ont livré des fonctionnalités en quelques jours au lieu de plusieurs semaines, corrigé des vulnérabilités en quelques minutes, intégré de nouvelles recrues en un temps record et réduit une migration de huit à deux mois. Cette étude met en évidence que si le développement agentique accélère la production individuelle, le retour sur investissement ne se démultiplie que lorsque cette rapidité s&#39;appuie sur une infrastructure conçue pour l&#39;ensemble du cycle de vie logiciel.</p><p>Si vous élaborez actuellement une analyse de rentabilité en faveur d&#39;une infrastructure agentique dédiée à l&#39;ingénierie logicielle au sein de votre organisation, cette étude vous offre un framework qui s&#39;appuie sur les actions concrètes menées par quatre entreprises, afin que vous puissiez transformer vos prévisions en réalité.</p><blockquote><p><a href="https://about.gitlab.com/resources/study-forrester-tei-gitlab-dap" rel="">Consultez l&#39;étude Total Economic Impact™ de Forrester consacrée à GitLab Duo Agent Platform</a> pour découvrir la méthodologie complète, le modèle financier et les résultats des entretiens.</p></blockquote><p><em>Cette étude a été commanditée par GitLab et réalisée par Forrester Consulting. Elle n&#39;est pas destinée à être utilisée comme analyse concurrentielle. Forrester ne formule aucune hypothèse quant au ROI potentiel que d&#39;autres organisations pourraient obtenir ; les résultats sont représentatifs des expériences des organisations interrogées et de l&#39;organisation composite qu&#39;elles ont permis de constituer. GitLab a fourni les noms des clients pour les entretiens, mais n&#39;y a pas participé, et Forrester conserve le contrôle éditorial sur les conclusions de l&#39;étude.</em></p>]]></content>
        <author>
            <name>Jessica Taylor</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/jessica-taylor/</uri>
        </author>
        <published>2026-07-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Maîtrisez vos sièges GitLab avec l'accès restreint]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/gitlab-restricted-access-improvements/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/gitlab-restricted-access-improvements/"/>
        <updated>2026-07-15T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>L&#39;accès restreint de GitLab pour les administrateurs d&#39;instance, les propriétaires de groupe et les responsables de facturation, garantit des coûts liés aux sièges prévisibles avec moins de contrôles manuels. Cette fonctionnalité a été considérablement améliorée et offre désormais une couverture plus complète pour les workflows qui influencent habituellement l&#39;utilisation des sièges. Cette mise à jour comble les lacunes liées au provisionnement via les fournisseurs d&#39;identité, à la réactivation des utilisateurs inactifs et aux processus de connexion, afin que les organisations puissent utiliser l&#39;accès restreint plus sereinement dans des environnements réels.</p><h2 id="quest-ce-que-laccès-restreint">Qu&#39;est-ce que l&#39;accès restreint ?</h2><p>L&#39;accès restreint est une fonctionnalité de gestion des sièges disponible sur GitLab.com et GitLab Self-Managed. Lorsqu&#39;elle est activée et que tous les sièges sous licence sont déjà utilisés, GitLab empêche l&#39;ajout de nouveaux utilisateurs facturables.</p><p>Les organisations peuvent ainsi éviter une augmentation imprévue du nombre de sièges avant le renouvellement et maintenir une utilisation des sièges en adéquation avec le nombre de sièges achetés. L&#39;accès restreint est conçu pour prévenir les futurs dépassements, et non pour corriger ceux qui existent déjà.</p><p>Les utilisateurs qui n&#39;ont pas besoin d&#39;accéder aux projets ou aux groupes, comme ceux qui s&#39;authentifient via GitLab en tant que fournisseur OpenID Connect (OIDC), peuvent se voir attribuer le rôle Accès minimal (non facturable). Ces utilisateurs peuvent toujours s&#39;authentifier sans utiliser de siège payant.</p><h2 id="aucun-impact-rétroactif-sur-les-membres-facturables-existants">Aucun impact rétroactif sur les membres facturables existants</h2><p>L&#39;accès restreint s&#39;applique uniquement aux utilisateurs futurs. Si vous l&#39;activez sur un groupe ou une instance qui dépasse déjà la limite de sièges, GitLab ne rétrograde pas, ne supprime pas et ne bloque pas les membres facturables existants. Les abonnements actuels restent inchangés. En cas de dépassement, les administrateurs doivent tout de même restreindre l&#39;utilisation dans les limites de l&#39;abonnement souscrit, en supprimant des membres facturables ou en achetant des sièges supplémentaires.</p><p>Une fois l&#39;utilisation des sièges régularisée, l&#39;accès restreint contribue à empêcher toute nouvelle augmentation supplémentaire des coûts facturables au-delà de cette limite.</p><h2 id="meilleure-intégration-de-laccès-restreint-à-votre-fournisseur-didentité">Meilleure intégration de l&#39;accès restreint à votre fournisseur d&#39;identité</h2><p>Un volet majeur des récentes améliorations a porté sur le comportement de l&#39;accès restreint face au provisionnement basé sur l&#39;identité.</p><p>Lorsque l&#39;accès restreint est activé et qu&#39;aucun siège n&#39;est disponible, les utilisateurs provisionnés via SAML, SCIM ou LDAP ne sont plus ajoutés directement à des rôles facturables. À la place, GitLab leur attribue le rôle Accès minimal (non facturable). La synchronisation peut ainsi se poursuivre sans provoquer immédiatement un dépassement facturable.</p><p>Ce comportement est particulièrement utile pour les organisations qui s&#39;appuient sur le provisionnement automatisé et souhaitent renforcer le contrôle des coûts sans renoncer à une gestion centralisée des identités.</p><p>Si vous utilisez GitLab comme fournisseur OIDC et que certains utilisateurs n&#39;ont besoin que d&#39;une authentification, sans accès aux projets ou aux groupes, leur attribuer le rôle Accès minimal au niveau du groupe principal reste une pratique pertinente. Ces utilisateurs ne consomment pas de siège facturable, et les utilisateurs disposant uniquement du rôle Accès minimal peuvent toujours être réactivés, même quand aucun siège n&#39;est disponible.</p><h2 id="plus-de-dépassements-invisibles-par-les-utilisateurs-inactifs">Plus de dépassements invisibles par les utilisateurs inactifs</h2><p>GitLab peut désactiver automatiquement les utilisateurs restés inactifs pendant une durée configurable pour libérer des sièges. Auparavant, lorsque ces utilisateurs se reconnectaient via OIDC ou l&#39;authentification unique (SSO), ils pouvaient être réactivés de manière invisible en tant qu&#39;utilisateurs facturables. Ils contournaient ainsi les restrictions d’accès et provoquaient des dépassements de licence.</p><p>Désormais, quand l&#39;accès restreint est activé et qu&#39;aucun siège n&#39;est disponible, les utilisateurs inactifs qui se reconnectent sont placés en attente d&#39;approbation. Leurs adhésions aux groupes et aux projets sont conservées, et un administrateur peut les approuver dès qu&#39;un siège se libère.</p><h2 id="des-avertissements-bannières-et-notifications-plus-clairs">Des avertissements, bannières et notifications plus clairs</h2><p>L&#39;accès restreint est également plus simple à gérer au quotidien. Des améliorations récentes ont introduit davantage d&#39;indications directement dans le produit, afin que les administrateurs puissent suivre ce qui se passera avant et après avoir atteint leur limite de sièges. Selon le cas, cela inclut :</p><ul><li>Des avertissements contextuels lors de la configuration de la synchronisation LDAP, des liens de groupe SAML ou du provisionnement SCIM pendant que l&#39;accès restreint est actif</li><li>Des états distincts au sein du produit lorsque la limite de sièges approche et lorsqu&#39;elle est atteinte</li><li>Des notifications par e-mail aux propriétaires de groupe ou aux administrateurs d&#39;instance lorsque des utilisateurs se voient attribuer le rôle Accès minimal faute de sièges payants disponibles</li><li>Une visibilité d&#39;audit pour les événements de repli du rôle Accès minimal</li></ul><p>L&#39;objectif ne se limite pas à bloquer les nouveaux utilisateurs facturables : il s&#39;agit aussi de faciliter la compréhension de ce comportement et sa gestion.</p><h2 id="le-cache-des-paramètres-de-gitlab-self-managed">Le cache des paramètres de GitLab Self-Managed</h2><p>Sur GitLab Self-Managed, les paramètres de l&#39;application sont mis en cache pendant 60 secondes par défaut pour des raisons de performance.</p><p>Par conséquent, si vous basculez entre l&#39;accès restreint et le plafond d&#39;utilisateurs, certains changements d&#39;interface ou comportements de contrôle des sièges peuvent ne pas apparaître immédiatement. Le cache se rafraîchit automatiquement, et les modifications seront visibles à ce moment-là. Si nécessaire, les administrateurs peuvent ajuster la durée de mise en cache.</p><p>Consultez notre <a href="https://docs.gitlab.com/administration/application_settings_cache/" rel="">documentation sur le cache des paramètres de l&#39;application</a>.</p><h2 id="la-différence-entre-laccès-restreint-et-le-plafond-dutilisateurs">La différence entre l&#39;accès restreint et le plafond d&#39;utilisateurs</h2><p>L&#39;accès restreint et le plafond d&#39;utilisateurs sont liés, mais ils répondent à des problèmes différents.</p><p>Le plafond d&#39;utilisateurs place les nouveaux utilisateurs dans un processus d&#39;approbation destiné aux administrateurs ou aux propriétaires de groupe, que des sièges soient encore disponibles ou non. L&#39;accès restreint, lui, est directement lié au nombre de sièges sous licence et bloque les nouveaux ajouts facturables uniquement lorsqu&#39;il ne reste plus de sièges.</p><p>Autrement dit, le plafond d&#39;utilisateurs est un contrôle d&#39;approbation. L&#39;accès restreint est un contrôle de limite de sièges.</p><p>Les deux fonctionnalités ne peuvent pas être activées en même temps. Lorsque vous activez l&#39;accès restreint, le plafond d&#39;utilisateurs est automatiquement désactivé. Sur GitLab.com, passer du plafond d&#39;utilisateurs à l&#39;accès restreint peut également affecter les membres en attente, il est donc recommandé de consulter notre documentation relative à ce comportement avant d&#39;effectuer tout changement.</p><h2 id="premiers-pas">Premiers pas</h2><p>L&#39;accès restreint est disponible sur GitLab.com et GitLab Self-Managed.</p><ul><li>Sur GitLab.com, les propriétaires de groupe peuvent l&#39;activer via <strong>Paramètres &gt; Général &gt; Permissions et fonctionnalités du groupe &gt; Contrôle des sièges &gt; Accès restreint</strong>.</li><li>Sur GitLab Self-Managed, les administrateurs peuvent l&#39;activer via <strong>Admin &gt; Paramètres &gt; Général &gt; Restrictions pour les nouveaux comptes utilisateurs &gt; Contrôle des sièges &gt; Accès restreint</strong>.</li><li>Sur GitLab.com, l&#39;accès restreint n&#39;est pas disponible lorsque le groupe principal est partagé avec un groupe externe.</li></ul><p>Votre équipe souhaite mieux maîtriser la croissance du nombre de sièges, éviter les mauvaises surprises liées à la facturation et disposer d&#39;un modèle opérationnel plus clair pour le provisionnement et la réactivation ? Adoptez l&#39;accès restreint dès maintenant.</p><h2 id="ressources">Ressources</h2><ul><li><a href="https://docs.gitlab.com/subscriptions/manage_seats/#restricted-access" rel="">Documentation sur l&#39;accès restreint</a></li><li><a href="https://docs.gitlab.com/subscriptions/manage_seats/" rel="">Documentation sur la gestion des sièges</a></li><li><a href="https://docs.gitlab.com/administration/application_settings_cache/" rel="">Documentation sur le cache des paramètres de l&#39;application</a></li></ul>]]></content>
        <author>
            <name>Magdalena Frankiewicz</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/magdalena-frankiewicz/</uri>
        </author>
        <author>
            <name>Priyanka Palanikumar</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/priyanka-palanikumar/</uri>
        </author>
        <published>2026-07-15T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Codex et GitLab : du correctif au déploiement en production]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/fix-bugs-with-codex-and-gitlab/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/fix-bugs-with-codex-and-gitlab/"/>
        <updated>2026-07-08T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Codex, un agent de codage, est très agréable à utiliser lorsque vous êtes plongé dans le terminal. Il vous suffit de le diriger vers un dépôt et de lui confier une tâche ciblée pour qu&#39;il se mette au travail rapidement. Il lit le code, propose un correctif, exécute des commandes et vous aide à passer de l&#39;idée au code sans perturber votre concentration. Cette expérience développeur constitue une grande partie de l&#39;attrait des outils de codage agentiques, et c&#39;est aussi ce qui a fait le succès de notre récent <a href="https://about.gitlab.com/fr-fr/blog/claude-code-and-gitlab/" rel="">tutoriel dédié à Claude Code</a>.</p><p>Mais écrire du code n&#39;est que la première étape. Il faut encore le ticket, la merge request, le pipeline CI/CD, la revue de code et la décision humaine finale de déployer la modification. Écrire du code et livrer des logiciels sont deux étapes distinctes, et cet écart devient d&#39;autant plus évident à mesure que les agents de codage gagnent en rapidité.</p><p>C&#39;est là que GitLab entre en jeu. Dans ce tutoriel, nous allons explorer trois cas d&#39;utilisation avec Codex et GitLab Duo Agent Platform :</p><ol><li><a href="#get-started-with-codex-and-gitlab-and-fix-a-rust-backend-bug">Corriger un bogue Rust WebSocket en local pour se lancer avec Codex</a></li><li><a href="#fix-websocket-metric-filter-with-gitlab-mcp-and-development-lifecycle-context">Enrichir le contexte avec le MCP de GitLab pour corriger le bogue Rust en adéquation avec les exigences du ticket</a></li><li><a href="#verify-review-feedback-and-requirements-with-codex-as-external-agent">Utiliser Codex dans GitLab Duo Agent Platform en tant qu&#39;agent externe pour traiter les retours de revue dans la merge request</a></li></ol><p>Nous utilisons le <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform" rel="">projet Tanuki IoT Platform</a> pour les trois cas d&#39;utilisation. Le backend Rust de métriques fournit deux bogues pratiques sur lesquels travailler : un bogue de filtre de métriques WebSocket et un bogue de validation de l&#39;API REST.</p><h2 id="prérequis">Prérequis</h2><ol><li><a href="https://developers.openai.com/codex" rel="">Codex</a> dans le terminal, configuré et opérationnel.</li><li>Un projet GitLab avec des rapports de bogues et des propositions de fonctionnalités sous forme de tickets, par exemple le <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform" rel="">projet Tanuki IoT Platform</a>.</li><li>Pour certains cas d&#39;utilisation : le <a href="https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/" rel="">serveur MCP de GitLab</a> et GitLab Duo Agent Platform avec des <a href="https://docs.gitlab.com/user/duo_agent_platform/agents/external/" rel="">agents externes</a>.</li><li>Pour coder : Cargo et le compilateur Rust, par exemple <a href="https://rustup.rs/" rel="">rustup</a>.</li></ol><h3 id="préparer-le-projet-gitlab">Préparer le projet GitLab</h3><p>Si vous souhaitez reproduire le workflow dans votre propre environnement, commencez par importer et cloner le projet, puis ouvrez Codex à la racine du dépôt :</p><ol><li>Importez le <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform" rel="">projet Tanuki IoT Platform</a> dans votre environnement GitLab, en incluant tous les tickets ouverts.</li><li>Clonez le projet dans votre environnement local et accédez-y.</li><li>Ouvrez un terminal et lancez Codex avec la commande <code>codex</code>.</li></ol><pre className="language-bash shiki shiki-themes github-light" code="git clone https://gitlab.example.com/examplegroup/tanuki-iot-platform.git
cd tanuki-iot-platform

codex
" language="bash" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">git</span><span class="sYBdl"> clone</span><span class="sYBdl"> https://gitlab.example.com/examplegroup/tanuki-iot-platform.git
</span></span><span class="line" line="2"><span class="sYu0t">cd</span><span class="sYBdl"> tanuki-iot-platform
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span class="s7eDp">codex
</span></span></code></pre><p>Posez une question dans le prompt pour en savoir plus sur la finalité du projet.</p><pre className="language-markdown shiki shiki-themes github-light" code="What is this project about?
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">What is this project about?
</span></span></code></pre><p>La partie qui nous intéresse dans ce tutoriel est le stockage de métriques Rust situé dans le répertoire <code>backend/</code>. Les capteurs envoient des relevés via une API REST, et les tableaux de bord consomment les données en temps réel via des flux WebSocket. Le problème et le correctif sont ainsi faciles à identifier.</p><h2 id="premiers-pas-avec-codex-et-gitlab-pour-corriger-un-bogue-du-backend-rust">Premiers pas avec Codex et GitLab pour corriger un bogue du backend Rust</h2><p>Dans ce scénario, un <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/work_items/32" rel="">bogue</a> se trouve dans le flux WebSocket en temps réel. Le backend prend déjà en charge le filtrage des métriques côté API REST, mais le flux WebSocket ne semble pas filtrer correctement par métrique. En guise de test, si nous nous abonnons à un capteur et une métrique spécifiques, nous recevons quand même d&#39;autres métriques. Voici un test rapide dans le terminal pour confirmer le problème.</p><p>Démarrez le backend dans un premier terminal, en écoute sur le port 9090 :</p><pre className="language-bash shiki shiki-themes github-light" code="PORT=9090 cargo run --manifest-path backend/rust-metrics-store/Cargo.toml
" language="bash" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">PORT</span><span class="sD7c4">=</span><span class="sYBdl">9090</span><span class="s7eDp"> cargo</span><span class="sYBdl"> run</span><span class="sYu0t"> --manifest-path</span><span class="sYBdl"> backend/rust-metrics-store/Cargo.toml
</span></span></code></pre><p>Ouvrez un client WebSocket dans un second terminal. Sur macOS, websocat est disponible via Homebrew : <code>brew install websocat</code>.</p><pre className="language-bash shiki shiki-themes github-light" code="websocat &#39;ws://localhost:9090/ws?sensor=arduino-iot-collector&amp;metric=temperature_celsius&#39;
" language="bash" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">websocat</span><span class="sYBdl"> &#39;ws://localhost:9090/ws?sensor=arduino-iot-collector&amp;metric=temperature_celsius&#39;
</span></span></code></pre><p>Envoyez maintenant deux métriques différentes pour le capteur <code>arduino-iot-collector</code>.</p><pre className="language-bash shiki shiki-themes github-light" code="curl -s -X POST http://localhost:9090/api/metrics \
  -H &#39;Content-Type: application/json&#39; \
  -d &#39;{&quot;sensor&quot;:&quot;arduino-iot-collector&quot;,&quot;metric&quot;:&quot;temperature_celsius&quot;,&quot;value&quot;:23.5}&#39;

curl -s -X POST http://localhost:9090/api/metrics \
  -H &#39;Content-Type: application/json&#39; \
  -d &#39;{&quot;sensor&quot;:&quot;arduino-iot-collector&quot;,&quot;metric&quot;:&quot;humidity_percent&quot;,&quot;value&quot;:61.2}&#39;
" language="bash" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">curl</span><span class="sYu0t"> -s</span><span class="sYu0t"> -X</span><span class="sYBdl"> POST</span><span class="sYBdl"> http://localhost:9090/api/metrics</span><span class="sYu0t"> \
</span></span><span class="line" line="2"><span class="sYu0t">  -H</span><span class="sYBdl"> &#39;Content-Type: application/json&#39;</span><span class="sYu0t"> \
</span></span><span class="line" line="3"><span class="sYu0t">  -d</span><span class="sYBdl"> &#39;{&quot;sensor&quot;:&quot;arduino-iot-collector&quot;,&quot;metric&quot;:&quot;temperature_celsius&quot;,&quot;value&quot;:23.5}&#39;
</span></span><span class="line" line="4"><span emptyLinePlaceholder>
</span></span><span class="line" line="5"><span class="s7eDp">curl</span><span class="sYu0t"> -s</span><span class="sYu0t"> -X</span><span class="sYBdl"> POST</span><span class="sYBdl"> http://localhost:9090/api/metrics</span><span class="sYu0t"> \
</span></span><span class="line" line="6"><span class="sYu0t">  -H</span><span class="sYBdl"> &#39;Content-Type: application/json&#39;</span><span class="sYu0t"> \
</span></span><span class="line" line="7"><span class="sYu0t">  -d</span><span class="sYBdl"> &#39;{&quot;sensor&quot;:&quot;arduino-iot-collector&quot;,&quot;metric&quot;:&quot;humidity_percent&quot;,&quot;value&quot;:61.2}&#39;
</span></span></code></pre><p>Vous vous attendez à ne voir que <code>temperature_celsius</code>, mais le flux affiche aussi <code>humidity_percent</code>, ce qui confirme le bogue.</p><p><img alt="Terminal avec trois sessions : exécution du backend de métriques, utilisation de websocat pour lire le flux WebSocket et envoi de métriques de test avec curl" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101134/codexgitlabimage1.png" title="Terminal avec trois sessions : exécution du backend de métriques, utilisation de `websocat` pour lire le flux WebSocket et envoi de métriques de test avec curl" /></p><p>C&#39;est à ce moment-là que nous confions le problème à Codex dans un nouveau prompt :</p><pre className="language-markdown shiki shiki-themes github-light" code="I need help with a backend change to add metric filtering to /ws so live streams can be narrowed to one metric.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">I need help with a backend change to add metric filtering to /ws so live streams can be narrowed to one metric.
</span></span></code></pre><p>Grâce à notre fichier <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/blob/main/backend/rust-metrics-store/AGENTS.md?ref_type=heads#build-commands" rel="">AGENTS.md</a> au sein de notre projet GitLab, Codex sait comment le backend Rust est structuré, quelles commandes exécuter et à quoi ressemblent les exigences de qualité du code.</p><p><img alt="AGENTS.md avec la configuration de la chaîne d&#39;outils Rust et les commandes de build pour les agents" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101171/codexgitlabimage2.png" title="`AGENTS.md` avec la configuration de la chaîne d&#39;outils Rust et les commandes de build pour les agents" /></p><p>Codex inspecte le code source Rust et identifie l&#39;élément manquant. Le point de terminaison <code>/ws</code> comprend déjà un paramètre de requête capteur, mais il lui faut aussi un paramètre métrique optionnel. Codex met à jour la logique du gestionnaire, ajoute des tests et synchronise la documentation avec les modifications du code.</p><p>Après les modifications du code, Codex exécute le formatage, les tests et le build. Codex effectue ensuite une vérification finale avant de toucher à Git. À partir de là, nous pouvons lui demander de créer une branche, d&#39;effectuer un commit et de pousser la modification.</p><p><img alt="Correction du bogue et affichage du diff de la modification par Codex" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101152/codexgitlabimage3.png" title="Correction du bogue et affichage du diff de la modification par Codex" /></p><p>Une fois la <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/merge_requests/88" rel="">merge request</a> créée, GitLab prend le relais pour les étapes suivantes du cycle de vie logiciel. Les pipelines CI/CD démarrent, le scan de sécurité s&#39;exécute et la revue de code de GitLab Duo vérifie les modifications selon les <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/blob/main/.gitlab/duo/mr-review-instructions.yaml?ref_type=heads#L202" rel="">exigences de style de code Rust</a>.</p><p><img alt="Instructions de revue de code de GitLab Duo pour Rust" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101180/codexgitlabimage4.png" title="Instructions de revue de code de GitLab Duo pour Rust" /></p><p>Après le déploiement, nous relançons le test local et confirmons que le flux WebSocket n&#39;émet désormais que la métrique demandée lorsque le capteur et la métrique sont tous deux fournis, puis nous publions les résultats dans la merge request.</p><p><img alt="Commentaires de la merge request avec les retours de revue de code de GitLab Duo et les résultats des tests locaux partagés par le développeur." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101160/codexgitlabimage5.png" title="Commentaires de la merge request avec les retours de revue de code de GitLab Duo et les résultats des tests locaux partagés par le développeur." /></p><p>Ce premier cas d&#39;utilisation sert de référence : Codex reste proche du code et GitLab prend le relais dès que le correctif entre dans le cycle de vie de la merge request.</p><p>Voici un enregistrement détaillé de Codex, GitLab CI/CD et GitLab Duo Agent Platform en action :</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/IQxrwvzLai4" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="corriger-le-filtre-de-métriques-websocket-avec-le-mcp-de-gitlab-et-le-contexte-du-cycle-de-développement">Corriger le filtre de métriques WebSocket avec le MCP de GitLab et le contexte du cycle de développement</h2><p>Dans notre premier cas d&#39;utilisation, Codex pouvait voir le dépôt du projet. Mais il n&#39;avait pas de visibilité sur le ticket GitLab, les exigences convenues, les notes d&#39;implémentation, ni sur l&#39;état de la merge request et du pipeline autour du travail en cours. Ce contexte réside dans GitLab, pas dans les fichiers locaux.</p><p>C&#39;est là que le <a href="https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/" rel="">serveur MCP de GitLab</a> entre en jeu.</p><p>Dans ce cas d&#39;utilisation, le <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/work_items/32" rel="">ticket</a> existe déjà et il est détaillé à dessein. Il décrit le problème, inclut des exigences fonctionnelles et non fonctionnelles, et mentionne explicitement les tests ainsi que les mises à jour de README.md et AGENTS.md. Cela signifie que Codex n&#39;a pas besoin que nous collions toutes ces informations dans le prompt. Il peut récupérer directement le ticket et travailler à partir de la même source de vérité qu&#39;un développeur.</p><p><img alt="Ticket GitLab avec proposition, exigences fonctionnelles, comportement attendu, exigences non fonctionnelles et notes d&#39;implémentation" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101184/codexgitlabimage6.png" title="Ticket GitLab avec proposition, exigences fonctionnelles, comportement attendu, exigences non fonctionnelles et notes d&#39;implémentation" /></p><h3 id="configurer-le-serveur-mcp-de-gitlab">Configurer le serveur MCP de GitLab</h3><p>Ajoutez ensuite le serveur MCP de GitLab à Codex. Assurez-vous qu&#39;il est <a href="https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#prerequisites" rel="">activé</a> sur l&#39;instance ou le groupe principal.</p><p>Ouvrez un nouveau terminal et ajoutez le <a href="https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#connect-openai-codex-to-the-gitlab-mcp-server" rel="">serveur MCP de GitLab</a> à Codex en utilisant le type de transport <code>http</code>.</p><p>Modifiez <code>gitlab.example.com</code> pour correspondre à votre instance GitLab :</p><pre className="language-bash shiki shiki-themes github-light" code="codex mcp add --url &quot;https://&lt;gitlab.example.com&gt;/api/v4/mcp&quot; GitLab
" language="bash" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">codex</span><span class="sYBdl"> mcp</span><span class="sYBdl"> add</span><span class="sYu0t"> --url</span><span class="sYBdl"> &quot;https://&lt;gitlab.example.com&gt;/api/v4/mcp&quot;</span><span class="sYBdl"> GitLab
</span></span></code></pre><p>Le client MCP de Codex peut nécessiter un feature flag pour le <code>rmcp_client</code> en Rust. Ouvrez <code>~/.codex/config.toml</code> et ajoutez la section <code>[features]</code>. Vous pouvez également vérifier que le serveur MCP de GitLab a été ajouté dans la section <code>mcp_servers.</code>.</p><pre className="language-bash shiki shiki-themes github-light" code="vim ~/.codex/config.toml
" language="bash" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">vim</span><span class="sYBdl"> ~/.codex/config.toml
</span></span></code></pre><pre className="language-toml shiki shiki-themes github-light" code="[features]
&quot;rmcp_client&quot; = true

[mcp_servers.GitLab]
url = &quot;https://&lt;gitlab.example.com&gt;/api/v4/mcp&quot;
" language="toml" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">[</span><span class="s7eDp">features</span><span class="sgsFI">]
</span></span><span class="line" line="2"><span class="sgsFI">&quot;rmcp_client&quot; = </span><span class="sYu0t">true
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span class="sgsFI">[</span><span class="s7eDp">mcp_servers</span><span class="sgsFI">.</span><span class="s7eDp">GitLab</span><span class="sgsFI">]
</span></span><span class="line" line="5"><span class="sgsFI">url = </span><span class="sYBdl">&quot;https://&lt;gitlab.example.com&gt;/api/v4/mcp&quot;
</span></span></code></pre><p>Lancez <code>codex</code> dans un nouveau terminal et saisissez <code>/mcp</code> pour vous authentifier auprès du serveur MCP de GitLab si cela ne s&#39;est pas fait automatiquement lors de l&#39;ajout.</p><pre className="language-bash shiki shiki-themes github-light" code="codex

/mcp
" language="bash" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">codex
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="s7eDp">/mcp
</span></span></code></pre><p>Pour vérifier la connexion, demandez à Codex :</p><pre className="language-markdown shiki shiki-themes github-light" code="Which GitLab MCP tools are available to you?

Show the GitLab MCP Server version.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Which GitLab MCP tools are available to you?
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="sgsFI">Show the GitLab MCP Server version.
</span></span></code></pre><h3 id="demander-à-codex-dimplémenter-le-ticket-de-filtre-websocket">Demander à Codex d&#39;implémenter le ticket de filtre WebSocket</h3><p>Ouvrez Codex et posez la question suivante dans le prompt pour traiter le <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/work_items/32" rel="">ticket</a> :</p><pre className="language-markdown shiki shiki-themes github-light" code="Can you help me implement issue 32?
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Can you help me implement issue 32?
</span></span></code></pre><p>C&#39;est ici que le workflow change. Dans ce scénario, Codex utilise l&#39;outil MCP <code>get_issue</code> et récupère les détails du ticket dans la session avant de modifier le code. Il voit désormais les exigences, les labels, les remarques et la portée globale du travail avant de toucher à l&#39;implémentation.</p><p><img alt="Codex appelant l&#39;outil get_issue du serveur MCP de GitLab et affichant les détails du ticket dans le terminal" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101166/codexgitlabimage7.png" title="Codex appelant l&#39;outil `get_issue` du serveur MCP de GitLab et affichant les détails du ticket dans le terminal" /></p><p>Le correctif en lui-même est similaire : ajout du paramètre <code>metric</code> optionnel, mise à jour de la logique de correspondance, ajout de tests et mise à jour de la documentation. La différence réside dans la source de vérité. Dans le premier cas d&#39;utilisation, cette source de vérité était le dépôt plus le prompt. Dans ce cas d&#39;utilisation, ce sont le ticket et le dépôt ensemble.</p><p>Après la validation locale, Codex crée une branche, effectue un commit du travail et crée la <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/merge_requests/89" rel="">merge request</a> via des appels d&#39;outils MCP au lieu de s&#39;appuyer sur les options de push Git ou un basculement vers le navigateur.</p><p><img alt="Création d&#39;une merge request par Codex avec l&#39;outil create_merge_request du serveur MCP de GitLab" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101144/codexgitlabimage8.png" title="Création d&#39;une merge request par Codex avec l&#39;outil `create_merge_request` du serveur MCP de GitLab" /></p><p>Parce qu&#39;il connaît le contexte du ticket, Codex ajoute également <code>closes 32</code> dans la description de la merge request afin que le <a href="https://docs.gitlab.com/user/project/issues/managing_issues/#closing-issues-automatically" rel="">ticket se ferme automatiquement lors du merge</a>.</p><p><img alt="Ajout de Closes #32 par Codex dans la description, soulignant que le ticket sera fermé une fois le merge effectué" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101188/codexgitlabimage9.png" title="Ajout de `Closes #32` par Codex dans la description, soulignant que le ticket sera fermé une fois le merge effectué" /></p><p>Ce workflow est plus significatif qu&#39;il n&#39;y paraît : l&#39;agent ne se contente plus d&#39;écrire du code, il participe également à la livraison logicielle avec le ticket, la merge request et le contexte du pipeline dans la boucle. C&#39;est la valeur ajoutée du MCP de GitLab au workflow de développement de bout en bout.</p><p>À ce stade, une fois que la revue de code de GitLab Duo et les tests donnent le feu vert, nous sommes prêts pour la revue finale et le merge.</p><p><img alt="Commentaires de la merge request avec les retours de revue de code de GitLab Duo et la capture d&#39;écran des tests locaux" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101130/codexgitlabimage10.png" title="Commentaires de la merge request avec les retours de revue de code de GitLab Duo et la capture d&#39;écran des tests locaux" /></p><p>Regardez l&#39;enregistrement pour découvrir comment Codex corrige le problème avec l&#39;aide du serveur MCP de GitLab :</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/okx4cw2p-3I" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="vérifier-les-retours-de-revue-et-les-exigences-avec-codex-en-tant-quagent-externe">Vérifier les retours de revue et les exigences avec Codex en tant qu&#39;agent externe</h2><p>Le troisième cas d&#39;utilisation est encore plus intéressant. Au lieu de nous demander si Codex peut ouvrir une merge request, nous pouvons poser une question plus pratique : peut-il aider après la création de la merge request, et traiter les retours de revue directement dans la merge request ?</p><p>Pour explorer ce cas d&#39;utilisation, nous passons à un <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/work_items/33" rel="">bogue de validation de l&#39;API REST</a> différent. Le problème que nous simulons avec ce bogue est le suivant : <code>POST /api/metrics</code> accepte des entrées invalides et retourne tout de même <code>201 Created</code>, alors qu&#39;il devrait retourner <code>400 Bad Request</code> pour les charges utiles contenant des valeurs invalides telles que des métriques vides.</p><p>Testons ce scénario en ouvrant deux terminaux. Dans le Terminal 1, nous lançons le serveur du stockage de métriques sur le port 9090 :</p><pre className="language-bash shiki shiki-themes github-light" code="PORT=9090 cargo run --manifest-path backend/rust-metrics-store/Cargo.toml
" language="bash" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">PORT</span><span class="sD7c4">=</span><span class="sYBdl">9090</span><span class="s7eDp"> cargo</span><span class="sYBdl"> run</span><span class="sYu0t"> --manifest-path</span><span class="sYBdl"> backend/rust-metrics-store/Cargo.toml
</span></span></code></pre><p>Dans le Terminal 2, utilisons <code>curl</code> pour envoyer une requête API REST spécifiquement conçue avec une valeur de métrique vide afin de provoquer une erreur.</p><pre className="language-bash shiki shiki-themes github-light" code="curl -w &quot;\nHTTP %{http_code}\n&quot; -X POST http://localhost:9090/api/metrics \
  -H &quot;Content-Type: application/json&quot; \
  -d &#39;{&quot;sensor&quot;: &quot;sensor-a&quot;, &quot;metric&quot;: &quot;  &quot;, &quot;value&quot;: 23.5, &quot;labels&quot;: {}}&#39;
" language="bash" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">curl</span><span class="sYu0t"> -w</span><span class="sYBdl"> &quot;\nHTTP %{http_code}\n&quot;</span><span class="sYu0t"> -X</span><span class="sYBdl"> POST</span><span class="sYBdl"> http://localhost:9090/api/metrics</span><span class="sYu0t"> \
</span></span><span class="line" line="2"><span class="sYu0t">  -H</span><span class="sYBdl"> &quot;Content-Type: application/json&quot;</span><span class="sYu0t"> \
</span></span><span class="line" line="3"><span class="sYu0t">  -d</span><span class="sYBdl"> &#39;{&quot;sensor&quot;: &quot;sensor-a&quot;, &quot;metric&quot;: &quot;  &quot;, &quot;value&quot;: 23.5, &quot;labels&quot;: {}}&#39;
</span></span></code></pre><p>Codex a déjà ouvert une première <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/merge_requests/92" rel="">merge request en mode brouillon</a> avec le correctif principal en place. Un rapide nouveau test local montre que le comportement principal s&#39;est amélioré et que les entrées invalides retournent désormais 400.</p><p><img alt="Deux appels curl : l&#39;un avec le comportement du bogue, l&#39;autre avec le correctif en cours d&#39;exécution" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101190/codexgitlabimage11.png" title="Deux appels curl : l&#39;un avec le comportement du bogue, l&#39;autre avec le correctif en cours d&#39;exécution" /></p><p>C&#39;est un progrès, mais ce n&#39;est pas terminé. La revue de code de GitLab Duo signale deux éléments manquants selon les <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/blob/main/.gitlab/duo/mr-review-instructions.yaml?ref_type=heads#L202" rel="">exigences de style de code Rust</a> :</p><ol><li>Les éléments publics ont besoin de commentaires de documentation.</li><li>Les modifications d&#39;API nécessitent des tests de gestionnaire pour les chemins de succès et d&#39;échec, et un test de validation est encore manquant.</li></ol><p><img alt="Retours de revue de code de GitLab Duo sur les modifications du code Rust" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101149/Blog/Imported/sandy-s-test/image12.png" title="Retours de revue de code de GitLab Duo sur les modifications du code Rust" /></p><p>À ce stade, nous passons du terminal local à l&#39;interface GitLab où nous pouvons activer l&#39;agent Codex depuis le <a href="https://docs.gitlab.com/user/duo_agent_platform/ai_catalog/" rel="">catalogue d&#39;IA de GitLab</a> dans le menu <strong>IA &gt; Agents</strong>. Notez l&#39;identifiant du compte de service commençant par <code>@ai-codex-agent</code>, et mentionnez l&#39;agent directement dans la discussion de la merge request afin qu&#39;il puisse traiter les retours de revue.</p><p><img alt="Agent Codex de GitLab activé dans le projet" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101175/codexgitlabimage13.png" title="Agent Codex de GitLab activé dans le projet" /></p><p>La merge request devient désormais la surface de travail de l&#39;agent Codex, avec le diff du code, les commentaires de revue, les pipelines CI/CD, les résultats des scanners de sécurité et les règles d&#39;approbation. Codex peut travailler sur le suivi exactement là où la collaboration se déroule déjà.</p><p>Ajoutons un nouveau commentaire demandant de l&#39;aide, avec des instructions pour ajouter les correctifs directement dans la merge request :</p><pre className="language-markdown shiki shiki-themes github-light" code="Please help address the review feedback, and push a fix.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Please help address the review feedback, and push a fix.
</span></span></code></pre><p><img alt="Mention de l&#39;agent Codex dans un commentaire de retour de la merge request" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101156/codexgitlabimage14.png" title="Mention de l&#39;agent Codex dans un commentaire de retour de la merge request" /></p><p>Codex traite les retours, ajoute et effectue un commit du test de validation manquant, relance les vérifications dans son propre contexte d&#39;exécution dans la <a href="https://docs.gitlab.com/user/duo_agent_platform/sessions/" rel="">session d&#39;agent</a> et publie un commentaire récapitulatif dans la merge request.</p><p><img alt="Déclenchement automatique des pipelines CI/CD par le nouveau commit Git" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101192/codexgitlabimage15.png" title="Déclenchement automatique des pipelines CI/CD par le nouveau commit Git" /></p><p><img alt="Déclenchement d&#39;un nouveau pipeline CI/CD par l&#39;agent Codex de GitLab" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101140/codexgitlabimage16.png" title="Déclenchement d&#39;un nouveau pipeline CI/CD par l&#39;agent Codex de GitLab" /></p><p>Nous pouvons inspecter la fonction de test <code>ingest_rejects_blank_metric</code> qui vient d&#39;être ajoutée dans le <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/jobs/14375432932" rel="">job log</a>.</p><p><img alt="Recherche de ingest_rejects_blank_metric dans le job log CI/CD" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1779101126/codexgitlabmage17.png" title="Recherche de `ingest_rejects_blank_metric` dans le job log CI/CD" /></p><p>C&#39;est là l&#39;utilité du modèle d&#39;agent externe en pratique. Les agents externes ne sont pas utiles parce qu&#39;ils remplacent les revues, ils le sont parce qu&#39;ils aident à combler l&#39;écart entre les retours de revue et l&#39;itération suivante, tout en conservant la merge request, les approbations et la décision humaine finale exactement là où elles doivent être. Et ils peuvent être davantage intégrés à GitLab Duo Agent Platform via les <a href="https://docs.gitlab.com/user/duo_agent_platform/triggers/" rel="">déclencheurs d&#39;événements</a> et les <a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">flows personnalisables</a>.</p><p>Regardez l&#39;enregistrement pour découvrir comment Codex peut aider lors des revues en tant qu&#39;agent externe dans GitLab Duo Agent Platform.</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/BapLAKxeomI" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="conseils-pour-utiliser-codex-avec-gitlab">Conseils pour utiliser Codex avec GitLab</h2><p>Voici quelques conseils pour utiliser Codex et GitLab ensemble.</p><h3 id="instructions-personnalisées-avec-agentsmd">Instructions personnalisées avec AGENTS.md</h3><p>Vous pouvez demander aux agents de compiler et tester le code avant chaque commit, de limiter les modifications au strict nécessaire ou de mieux comprendre l&#39;architecture du projet, en utilisant une entrée dans le fichier <code>AGENTS.md</code>. Le projet Tanuki IoT Platform utilise un fichier au niveau racine, ainsi que des fichiers et des instructions spécifiques pour les sous-répertoires des capteurs et du backend.</p><pre className="language-bash shiki shiki-themes github-light" code="tree -P AGENTS.md --prune
.
├── AGENTS.md
├── backend
│   └── rust-metrics-store
│       └── AGENTS.md
└── sensors
    ├── arduino-iot-collector
    │   └── AGENTS.md
    ├── c-file-monitor
    │   └── AGENTS.md
    ├── cobol-mainframe-bridge
    │   └── AGENTS.md
    └── java-http-metrics-collector
        └── AGENTS.md
" language="bash" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">tree</span><span class="sYu0t"> -P</span><span class="sYBdl"> AGENTS.md</span><span class="sYu0t"> --prune
</span></span><span class="line" line="2"><span class="sYu0t">.
</span></span><span class="line" line="3"><span class="s7eDp">├──</span><span class="sYBdl"> AGENTS.md
</span></span><span class="line" line="4"><span class="s7eDp">├──</span><span class="sYBdl"> backend
</span></span><span class="line" line="5"><span class="s7eDp">│</span><span class="sYBdl">   └──</span><span class="sYBdl"> rust-metrics-store
</span></span><span class="line" line="6"><span class="s7eDp">│</span><span class="sYBdl">       └──</span><span class="sYBdl"> AGENTS.md
</span></span><span class="line" line="7"><span class="s7eDp">└──</span><span class="sYBdl"> sensors
</span></span><span class="line" line="8"><span class="s7eDp">    ├──</span><span class="sYBdl"> arduino-iot-collector
</span></span><span class="line" line="9"><span class="s7eDp">    │</span><span class="sYBdl">   └──</span><span class="sYBdl"> AGENTS.md
</span></span><span class="line" line="10"><span class="s7eDp">    ├──</span><span class="sYBdl"> c-file-monitor
</span></span><span class="line" line="11"><span class="s7eDp">    │</span><span class="sYBdl">   └──</span><span class="sYBdl"> AGENTS.md
</span></span><span class="line" line="12"><span class="s7eDp">    ├──</span><span class="sYBdl"> cobol-mainframe-bridge
</span></span><span class="line" line="13"><span class="s7eDp">    │</span><span class="sYBdl">   └──</span><span class="sYBdl"> AGENTS.md
</span></span><span class="line" line="14"><span class="s7eDp">    └──</span><span class="sYBdl"> java-http-metrics-collector
</span></span><span class="line" line="15"><span class="s7eDp">        └──</span><span class="sYBdl"> AGENTS.md
</span></span></code></pre><p>Pour le backend Rust, un fichier <code>AGENTS.md</code> au niveau du répertoire est maintenu dans <a href="https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/blob/main/backend/rust-metrics-store/AGENTS.md?ref_type=heads" rel=""><code>backend/rust-metrics-store/AGENTS.md</code></a>. Il définit le style et les normes de code pour Rust, la documentation, l&#39;organisation des fichiers, la gestion des erreurs, la programmation asynchrone, la conteneurisation et le CI/CD, ainsi que la manière de compiler et d&#39;exécuter le code avec la chaîne d&#39;outils disponible (Cargo). Ouvrez le fichier lié dans le projet GitLab pour découvrir tous les détails.</p><pre className="language-markdown shiki shiki-themes github-light" code="# rust-metrics-store - Agent Instructions

## Overview

The `rust-metrics-store` is a lightweight, standalone time-series metrics backend for the Tanuki IoT Platform. It accepts metrics from all sensors via a simple REST API and streams live data to frontend clients over WebSocket. No external dependencies — a single binary with in-memory ring buffers.

## Code Style and Standards

### Rust Standards

- Use Rust 2021 edition idioms
- Run `cargo fmt` before committing
- Run `cargo clippy -- -D warnings` and resolve all warnings
- Prefer `Arc&lt;T&gt;` + `RwLock&lt;T&gt;` for shared state; avoid `Mutex` unless write-heavy
- Use `?` for error propagation in fallible functions; only `unwrap()` on truly unrecoverable states (e.g., lock poisoning)
- Derive `Debug`, `Clone`, `Serialize`, `Deserialize` only where needed
- Keep `pub` visibility minimal — expose only what callers need

### Documentation

- Public types and functions must have a doc comment
- Include `# Errors` section in doc comments for fallible functions
- Document env vars and their defaults in `README.md`, not in code

### File Organization

- **`src/main.rs`** — router wiring and `tokio::main`; no business logic
- **`src/store.rs`** — `MetricsStore` and data types; no HTTP concerns
- **`src/handlers.rs`** — Axum extractors and response types; thin layer over the store

### Error Handling

- HTTP handlers should return meaningful status codes (201 for ingest, 404 for unknown sensor)
- Log warnings for recoverable issues (e.g., lagging WebSocket clients) with `tracing::warn!`
- Never silently swallow errors

### Async and Concurrency

- Use `tokio::sync::broadcast` for the live-stream fan-out; `RwLock` for the ring-buffer map
- WebSocket handlers must break cleanly on send errors — do not loop after a closed socket
- Handle `RecvError::Lagged` by logging and continuing, not by disconnecting

### Containerization

- Use a multi-stage Dockerfile: `rust:1.95-slim` builder, `debian:bookworm-slim` runtime
- Always run the container as a non-root user — create `appuser` with `addgroup`/`adduser` and set `USER appuser` before `CMD`
- Include a `.dockerignore` that excludes `target/` and `.git/` to keep build context small
- Use specific image tags — never `latest` in Dockerfile or CI base templates

### CI/CD

- Pin all CI images to specific tags (e.g., `rust:1.95`) — never use `rust:latest` or `debian:latest`
- The `.rust_base` template in `.gitlab-ci.yml` must match the Dockerfile builder image version

## Local Toolchain Setup

// More instructions in the file
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="surfw"># rust-metrics-store - Agent Instructions
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="surfw">## Overview
</span></span><span class="line" line="4"><span emptyLinePlaceholder>
</span></span><span class="line" line="5"><span class="sgsFI">The </span><span class="sYu0t">`rust-metrics-store`</span><span class="sgsFI"> is a lightweight, standalone time-series metrics backend for the Tanuki IoT Platform. It accepts metrics from all sensors via a simple REST API and streams live data to frontend clients over WebSocket. No external dependencies — a single binary with in-memory ring buffers.
</span></span><span class="line" line="6"><span emptyLinePlaceholder>
</span></span><span class="line" line="7"><span class="surfw">## Code Style and Standards
</span></span><span class="line" line="8"><span emptyLinePlaceholder>
</span></span><span class="line" line="9"><span class="surfw">### Rust Standards
</span></span><span class="line" line="10"><span emptyLinePlaceholder>
</span></span><span class="line" line="11"><span class="sqxcx">-</span><span class="sgsFI"> Use Rust 2021 edition idioms
</span></span><span class="line" line="12"><span class="sqxcx">-</span><span class="sgsFI"> Run </span><span class="sYu0t">`cargo fmt`</span><span class="sgsFI"> before committing
</span></span><span class="line" line="13"><span class="sqxcx">-</span><span class="sgsFI"> Run </span><span class="sYu0t">`cargo clippy -- -D warnings`</span><span class="sgsFI"> and resolve all warnings
</span></span><span class="line" line="14"><span class="sqxcx">-</span><span class="sgsFI"> Prefer </span><span class="sYu0t">`Arc&lt;T&gt;`</span><span class="sgsFI"> + </span><span class="sYu0t">`RwLock&lt;T&gt;`</span><span class="sgsFI"> for shared state; avoid </span><span class="sYu0t">`Mutex`</span><span class="sgsFI"> unless write-heavy
</span></span><span class="line" line="15"><span class="sqxcx">-</span><span class="sgsFI"> Use </span><span class="sYu0t">`?`</span><span class="sgsFI"> for error propagation in fallible functions; only </span><span class="sYu0t">`unwrap()`</span><span class="sgsFI"> on truly unrecoverable states (e.g., lock poisoning)
</span></span><span class="line" line="16"><span class="sqxcx">-</span><span class="sgsFI"> Derive </span><span class="sYu0t">`Debug`</span><span class="sgsFI">, </span><span class="sYu0t">`Clone`</span><span class="sgsFI">, </span><span class="sYu0t">`Serialize`</span><span class="sgsFI">, </span><span class="sYu0t">`Deserialize`</span><span class="sgsFI"> only where needed
</span></span><span class="line" line="17"><span class="sqxcx">-</span><span class="sgsFI"> Keep </span><span class="sYu0t">`pub`</span><span class="sgsFI"> visibility minimal — expose only what callers need
</span></span><span class="line" line="18"><span emptyLinePlaceholder>
</span></span><span class="line" line="19"><span class="surfw">### Documentation
</span></span><span class="line" line="20"><span emptyLinePlaceholder>
</span></span><span class="line" line="21"><span class="sqxcx">-</span><span class="sgsFI"> Public types and functions must have a doc comment
</span></span><span class="line" line="22"><span class="sqxcx">-</span><span class="sgsFI"> Include </span><span class="sYu0t">`# Errors`</span><span class="sgsFI"> section in doc comments for fallible functions
</span></span><span class="line" line="23"><span class="sqxcx">-</span><span class="sgsFI"> Document env vars and their defaults in </span><span class="sYu0t">`README.md`</span><span class="sgsFI">, not in code
</span></span><span class="line" line="24"><span emptyLinePlaceholder>
</span></span><span class="line" line="25"><span class="surfw">### File Organization
</span></span><span class="line" line="26"><span emptyLinePlaceholder>
</span></span><span class="line" line="27"><span class="sqxcx">-</span><span class="sbYKK"> **</span><span class="surfw">`src/main.rs`</span><span class="sbYKK">**</span><span class="sgsFI"> — router wiring and </span><span class="sYu0t">`tokio::main`</span><span class="sgsFI">; no business logic
</span></span><span class="line" line="28"><span class="sqxcx">-</span><span class="sbYKK"> **</span><span class="surfw">`src/store.rs`</span><span class="sbYKK">**</span><span class="sgsFI"> — </span><span class="sYu0t">`MetricsStore`</span><span class="sgsFI"> and data types; no HTTP concerns
</span></span><span class="line" line="29"><span class="sqxcx">-</span><span class="sbYKK"> **</span><span class="surfw">`src/handlers.rs`</span><span class="sbYKK">**</span><span class="sgsFI"> — Axum extractors and response types; thin layer over the store
</span></span><span class="line" line="30"><span emptyLinePlaceholder>
</span></span><span class="line" line="31"><span class="surfw">### Error Handling
</span></span><span class="line" line="32"><span emptyLinePlaceholder>
</span></span><span class="line" line="33"><span class="sqxcx">-</span><span class="sgsFI"> HTTP handlers should return meaningful status codes (201 for ingest, 404 for unknown sensor)
</span></span><span class="line" line="34"><span class="sqxcx">-</span><span class="sgsFI"> Log warnings for recoverable issues (e.g., lagging WebSocket clients) with </span><span class="sYu0t">`tracing::warn!`
</span></span><span class="line" line="35"><span class="sqxcx">-</span><span class="sgsFI"> Never silently swallow errors
</span></span><span class="line" line="36"><span emptyLinePlaceholder>
</span></span><span class="line" line="37"><span class="surfw">### Async and Concurrency
</span></span><span class="line" line="38"><span emptyLinePlaceholder>
</span></span><span class="line" line="39"><span class="sqxcx">-</span><span class="sgsFI"> Use </span><span class="sYu0t">`tokio::sync::broadcast`</span><span class="sgsFI"> for the live-stream fan-out; </span><span class="sYu0t">`RwLock`</span><span class="sgsFI"> for the ring-buffer map
</span></span><span class="line" line="40"><span class="sqxcx">-</span><span class="sgsFI"> WebSocket handlers must break cleanly on send errors — do not loop after a closed socket
</span></span><span class="line" line="41"><span class="sqxcx">-</span><span class="sgsFI"> Handle </span><span class="sYu0t">`RecvError::Lagged`</span><span class="sgsFI"> by logging and continuing, not by disconnecting
</span></span><span class="line" line="42"><span emptyLinePlaceholder>
</span></span><span class="line" line="43"><span class="surfw">### Containerization
</span></span><span class="line" line="44"><span emptyLinePlaceholder>
</span></span><span class="line" line="45"><span class="sqxcx">-</span><span class="sgsFI"> Use a multi-stage Dockerfile: </span><span class="sYu0t">`rust:1.95-slim`</span><span class="sgsFI"> builder, </span><span class="sYu0t">`debian:bookworm-slim`</span><span class="sgsFI"> runtime
</span></span><span class="line" line="46"><span class="sqxcx">-</span><span class="sgsFI"> Always run the container as a non-root user — create </span><span class="sYu0t">`appuser`</span><span class="sgsFI"> with </span><span class="sYu0t">`addgroup`</span><span class="sgsFI">/</span><span class="sYu0t">`adduser`</span><span class="sgsFI"> and set </span><span class="sYu0t">`USER appuser`</span><span class="sgsFI"> before </span><span class="sYu0t">`CMD`
</span></span><span class="line" line="47"><span class="sqxcx">-</span><span class="sgsFI"> Include a </span><span class="sYu0t">`.dockerignore`</span><span class="sgsFI"> that excludes </span><span class="sYu0t">`target/`</span><span class="sgsFI"> and </span><span class="sYu0t">`.git/`</span><span class="sgsFI"> to keep build context small
</span></span><span class="line" line="48"><span class="sqxcx">-</span><span class="sgsFI"> Use specific image tags — never </span><span class="sYu0t">`latest`</span><span class="sgsFI"> in Dockerfile or CI base templates
</span></span><span class="line" line="49"><span emptyLinePlaceholder>
</span></span><span class="line" line="50"><span class="surfw">### CI/CD
</span></span><span class="line" line="51"><span emptyLinePlaceholder>
</span></span><span class="line" line="52"><span class="sqxcx">-</span><span class="sgsFI"> Pin all CI images to specific tags (e.g., </span><span class="sYu0t">`rust:1.95`</span><span class="sgsFI">) — never use </span><span class="sYu0t">`rust:latest`</span><span class="sgsFI"> or </span><span class="sYu0t">`debian:latest`
</span></span><span class="line" line="53"><span class="sqxcx">-</span><span class="sgsFI"> The </span><span class="sYu0t">`.rust_base`</span><span class="sgsFI"> template in </span><span class="sYu0t">`.gitlab-ci.yml`</span><span class="sgsFI"> must match the Dockerfile builder image version
</span></span><span class="line" line="54"><span emptyLinePlaceholder>
</span></span><span class="line" line="55"><span class="surfw">## Local Toolchain Setup
</span></span><span class="line" line="56"><span emptyLinePlaceholder>
</span></span><span class="line" line="57"><span class="sgsFI">// More instructions in the file
</span></span></code></pre><p>Ces <a href="https://docs.gitlab.com/user/duo_agent_platform/customize/agents_md/" rel="">instructions personnalisées</a> sont également prises en compte par les agents et les flows sur GitLab Duo Agent Platform.</p><p>Si vous souhaitez obtenir de meilleurs résultats des agents de codage, commencez par là. Documentez le fonctionnement du dépôt, les commandes importantes, ce qu&#39;il ne faut pas toucher, et à quoi ressemble une bonne modification. Cet investissement unique est rentable aussi bien pour les outils de codage locaux que pour le MCP de GitLab et les agents externes.</p><h2 id="résumé">Résumé</h2><p>Les trois cas d&#39;utilisation de ce tutoriel s&#39;appuient les uns sur les autres, mais ils illustrent aussi un point plus large.</p><p>Codex excelle pour nous aider à passer rapidement d&#39;un énoncé de problème au code. GitLab ajoute le contexte de livraison logicielle qui nous aide à transformer ce code en une modification que nous pouvons comprendre, vérifier, revoir et déployer en toute confiance.</p><p>Dans le premier cas d&#39;utilisation, nous sommes restés proches du code et avons laissé Codex travailler à partir du dépôt et des instructions d&#39;agent locales. Dans le deuxième cas d&#39;utilisation, le MCP de GitLab a fourni le ticket, les exigences et le workflow de la merge request directement dans la session du terminal. Dans le troisième cas d&#39;utilisation, Codex s&#39;est déplacé dans la merge request elle-même et a aidé à combler l&#39;écart entre les retours de revue et l&#39;itération suivante.</p><p>Cette progression souligne l&#39;attrait de la combinaison. Nous ne choisissons pas entre un outil de codage et une plateforme DevSecOps. Nous étendons la rapidité du codage agentique à l&#39;ensemble du cycle de vie logiciel à grande échelle dans de nombreux projets avec de multiples jalons de release, et dans de nombreuses équipes.</p><p>Si vous utilisez déjà Codex, GitLab vous offre un moyen concret d&#39;associer cette rapidité de codage avec le contexte et la collaboration nécessaires une fois le correctif créé. Et si vous utilisez déjà GitLab Duo Agent Platform, les agents externes vous offrent une nouvelle façon d&#39;intégrer des outils de codage tiers dans GitLab sans perdre la merge request, sa piste d&#39;audit ou la prise de décision humaine qui reste essentielle.</p><p>Si vous souhaitez essayer par vous-même, commencez modestement. Choisissez un bogue visible, définissez le comportement attendu dans un ticket, puis suivez la même progression que celle utilisée ici : codage local, implémentation avec contexte du ticket et collaboration dans la merge request. C&#39;est là que la combinaison devient bien plus qu&#39;un simple correctif rapide.</p><blockquote><p>Si vous n&#39;utilisez pas encore GitLab Duo Agent Platform, vous pouvez le découvrir dans <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="">un essai gratuit</a>.</p><p>Si vous utilisez déjà GitLab dans l&#39;offre gratuite, vous pouvez souscrire à GitLab Duo Agent Platform en <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">suivant quelques étapes simples</a>.</p><p>Et si vous êtes déjà abonné à GitLab Premium ou GitLab Ultimate, il vous suffit d&#39;<a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">activer GitLab Duo Agent Platform</a> et de commencer à utiliser les GitLab Credits <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">inclus</a> dans votre abonnement.</p></blockquote><style>html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .surfw, html code.shiki .surfw{--shiki-default:#005CC5;--shiki-default-font-weight:bold}html pre.shiki code .sqxcx, html code.shiki .sqxcx{--shiki-default:#E36209}html pre.shiki code .sbYKK, html code.shiki .sbYKK{--shiki-default:#24292E;--shiki-default-font-weight:bold}</style>]]></content>
        <author>
            <name>Michael Friedrich</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/michael-friedrich/</uri>
        </author>
        <published>2026-07-08T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab : 5 façons de corriger les niveaux de gravité trompeurs des vulnérabilités]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/severity-override-vulnerability-management-policy/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/severity-override-vulnerability-management-policy/"/>
        <updated>2026-07-07T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Un rapport de vulnérabilités d&#39;entreprise typique fait remonter des centaines de résultats à chaque cycle d&#39;analyse, tous classés selon le Common Vulnerability Scoring System (CVSS). Le problème : le CVSS décrit les caractéristiques théoriques d&#39;une vulnérabilité et exposition communes (CVE), et non sa pertinence dans votre environnement. Une vulnérabilité critique dans une bibliothèque utilitaire à usage interne ne représente pas le même risque qu&#39;une vulnérabilité modérée dans un service d&#39;authentification exposé au public. Pourtant, ces deux cas sont traités de manière identique jusqu&#39;à ce que quelqu&#39;un les analyse manuellement. Il est également impossible de mettre à l&#39;échelle ce travail de classement.</p><p>Les politiques de gestion des vulnérabilités de GitLab peuvent désormais remplacer automatiquement ces niveaux de gravité CVSS par défaut, selon des conditions que vous définissez : votre rapport de vulnérabilités reflète ainsi votre modèle de risque réel plutôt qu&#39;un modèle générique.</p><h2 id="fonctionnement-des-politiques-de-remplacement-de-la-gravité">Fonctionnement des politiques de remplacement de la gravité</h2><p>Une politique de remplacement de la gravité est un type de <a href="https://docs.gitlab.com/user/application_security/policies/vulnerability_management_policy/" rel="">politique de gestion des vulnérabilités</a> qui ajuste automatiquement les niveaux de gravité des vulnérabilités de chaque pipeline de la branche par défaut. Vous définissez des règles avec des critères de correspondance (identifiant CVE, identifiant CWE, chemin de fichier ou répertoire) et une action de remplacement. Lorsqu&#39;une vulnérabilité correspond, le Security Policy Bot de GitLab met immédiatement à jour sa gravité.</p><p>Trois opérations de remplacement sont disponibles :</p><ul><li><strong>Définir la gravité</strong> : force la gravité à un niveau précis (information, faible, modéré, élevé ou critique).</li><li><strong>Augmenter la gravité</strong> : fait monter la gravité d&#39;un niveau.</li><li><strong>Diminuer la gravité</strong> : fait descendre la gravité d&#39;un niveau.</li></ul><p>Les remplacements manuels effectués par des utilisateurs autorisés ont toujours la priorité sur les remplacements définis par politique. Chaque modification automatisée est consignée dans l&#39;historique de la vulnérabilité et dans les événements d&#39;audit, ce qui vous garantit une traçabilité complète de ce qui a été modifié et pourquoi.</p><h2 id="cas-dutilisation-avec-configurations-prêtes-à-lemploi">Cas d&#39;utilisation avec configurations prêtes à l&#39;emploi</h2><p>Chaque exemple ci-dessous inclut une configuration de politique que vous pouvez copier, personnaliser et appliquer immédiatement.</p><h3 id="_1-rétrograder-les-cve-à-faible-risque-dans-les-services-internes">1. Rétrograder les CVE à faible risque dans les services internes</h3><p>Les scanners de sécurité ne savent pas quels projets sont des outils internes, des utilitaires de test ou des services en production. Ils évaluent chaque CVE de la même façon, quel que soit le contexte de déploiement. Pour les équipes qui gèrent des tableaux de bord d&#39;administration internes, des outils de développement ou des traitements par lots sans exposition au trafic externe, une vulnérabilité de dépendance classée comme critique ne justifie souvent pas la même réponse que si elle se trouvait dans une API exposée aux clients.</p><p>Cette politique diminue la gravité de CVE spécifiques détectées dans les répertoires de services internes :</p><pre className="language-yaml shiki shiki-themes github-light" code="vulnerability_management_policy:
  - name: &quot;Downgrade CVEs in internal services&quot;
    description: &quot;Internal-only services have lower exposure risk&quot;
    enabled: true
    rules:
      - type: detected
        criteria:
          - type: identifier
            identifier_type: cve
            values:
              - &quot;CVE-2023-44487&quot;
              - &quot;CVE-2024-29041&quot;
          - type: directory
            value: &quot;internal/**/*&quot;
    actions:
      - type: severity_override
        severity_override_operation: decrease
" language="yaml" meta="" style=""><code><span class="line" line="1"><span class="shJU0">vulnerability_management_policy</span><span class="sgsFI">:
</span></span><span class="line" line="2"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">&quot;Downgrade CVEs in internal services&quot;
</span></span><span class="line" line="3"><span class="shJU0">    description</span><span class="sgsFI">: </span><span class="sYBdl">&quot;Internal-only services have lower exposure risk&quot;
</span></span><span class="line" line="4"><span class="shJU0">    enabled</span><span class="sgsFI">: </span><span class="sYu0t">true
</span></span><span class="line" line="5"><span class="shJU0">    rules</span><span class="sgsFI">:
</span></span><span class="line" line="6"><span class="sgsFI">      - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">detected
</span></span><span class="line" line="7"><span class="shJU0">        criteria</span><span class="sgsFI">:
</span></span><span class="line" line="8"><span class="sgsFI">          - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">identifier
</span></span><span class="line" line="9"><span class="shJU0">            identifier_type</span><span class="sgsFI">: </span><span class="sYBdl">cve
</span></span><span class="line" line="10"><span class="shJU0">            values</span><span class="sgsFI">:
</span></span><span class="line" line="11"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CVE-2023-44487&quot;
</span></span><span class="line" line="12"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CVE-2024-29041&quot;
</span></span><span class="line" line="13"><span class="sgsFI">          - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">directory
</span></span><span class="line" line="14"><span class="shJU0">            value</span><span class="sgsFI">: </span><span class="sYBdl">&quot;internal/**/*&quot;
</span></span><span class="line" line="15"><span class="shJU0">    actions</span><span class="sgsFI">:
</span></span><span class="line" line="16"><span class="sgsFI">      - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">severity_override
</span></span><span class="line" line="17"><span class="shJU0">        severity_override_operation</span><span class="sgsFI">: </span><span class="sYBdl">decrease
</span></span></code></pre><p>Remplacez les valeurs CVE par les identifiants que votre équipe a évalués comme présentant un risque moindre pour les déploiements internes. L&#39;opération <code>decrease</code> fait baisser la gravité d&#39;un niveau (critique devient élevée, élevée devient modérée), ce qui préserve la priorité relative sans surréagir à des scores inadaptés au contexte.</p><h3 id="_2-augmenter-la-gravité-des-vulnérabilités-dinjection-dans-le-code-en-production">2. Augmenter la gravité des vulnérabilités d&#39;injection dans le code en production</h3><p>Certaines catégories de vulnérabilités nécessitent une réponse plus forte lorsqu&#39;elles sont détectées dans le code source en production. Le cross-site scripting, ou XSS (CWE-79), et l&#39;injection SQL (CWE-89) figurent régulièrement parmi les types de vulnérabilités les plus exploités, selon l&#39;<a href="https://about.gitlab.com/blog/2025-owasp-top-10-whats-changed-and-why-it-matters/" rel="">Open Web Application Security Project (OWASP)</a> et la <a href="https://www.cisa.gov/known-exploited-vulnerabilities-catalog" rel="">base de données des vulnérabilités exploitées connues (Known Exploited Vulnerabilities ou KEV)</a> de l&#39;Agence de cybersécurité et de sécurité des infrastructures (CISA). Si votre scanner signale ces vulnérabilités comme modérées ou élevées dans votre répertoire <code>src/</code>, votre processus de classement doit les traiter comme critiques.</p><p>Cette politique définit la gravité à critique pour les résultats XSS et SQLi dans le code en production :</p><pre className="language-yaml shiki shiki-themes github-light" code="vulnerability_management_policy:
  - name: &quot;Upgrade XSS and SQLi in production code&quot;
    description: &quot;Injection vulnerabilities in src/ are always Critical&quot;
    enabled: true
    rules:
      - type: detected
        criteria:
          - type: identifier
            identifier_type: cwe
            values:
              - &quot;CWE-79&quot;
              - &quot;CWE-89&quot;
          - type: directory
            value: &quot;src/**/*&quot;
    actions:
      - type: severity_override
        severity_override_operation: set
        severity_override_value: critical
" language="yaml" meta="" style=""><code><span class="line" line="1"><span class="shJU0">vulnerability_management_policy</span><span class="sgsFI">:
</span></span><span class="line" line="2"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">&quot;Upgrade XSS and SQLi in production code&quot;
</span></span><span class="line" line="3"><span class="shJU0">    description</span><span class="sgsFI">: </span><span class="sYBdl">&quot;Injection vulnerabilities in src/ are always Critical&quot;
</span></span><span class="line" line="4"><span class="shJU0">    enabled</span><span class="sgsFI">: </span><span class="sYu0t">true
</span></span><span class="line" line="5"><span class="shJU0">    rules</span><span class="sgsFI">:
</span></span><span class="line" line="6"><span class="sgsFI">      - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">detected
</span></span><span class="line" line="7"><span class="shJU0">        criteria</span><span class="sgsFI">:
</span></span><span class="line" line="8"><span class="sgsFI">          - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">identifier
</span></span><span class="line" line="9"><span class="shJU0">            identifier_type</span><span class="sgsFI">: </span><span class="sYBdl">cwe
</span></span><span class="line" line="10"><span class="shJU0">            values</span><span class="sgsFI">:
</span></span><span class="line" line="11"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CWE-79&quot;
</span></span><span class="line" line="12"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CWE-89&quot;
</span></span><span class="line" line="13"><span class="sgsFI">          - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">directory
</span></span><span class="line" line="14"><span class="shJU0">            value</span><span class="sgsFI">: </span><span class="sYBdl">&quot;src/**/*&quot;
</span></span><span class="line" line="15"><span class="shJU0">    actions</span><span class="sgsFI">:
</span></span><span class="line" line="16"><span class="sgsFI">      - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">severity_override
</span></span><span class="line" line="17"><span class="shJU0">        severity_override_operation</span><span class="sgsFI">: </span><span class="sYBdl">set
</span></span><span class="line" line="18"><span class="shJU0">        severity_override_value</span><span class="sgsFI">: </span><span class="sYBdl">critical
</span></span></code></pre><p>Associez cette politique à une <a href="https://docs.gitlab.com/user/application_security/policies/merge_request_approval_policies/" rel="">politique d&#39;approbation des merge requests</a> qui exige l&#39;approbation de l&#39;équipe de sécurité pour les résultats critiques. La politique de remplacement de la gravité garantit que les bons résultats sont signalés et priorisés dans le rapport de vulnérabilités, tandis que la politique d&#39;approbation s&#39;assure que les nouvelles vulnérabilités détectées ne peuvent pas atteindre la production sans révision.</p><h3 id="_3-normaliser-la-gravité-entre-les-différents-scanners">3. Normaliser la gravité entre les différents scanners</h3><p>Il arrive que des scanners différents attribuent des niveaux de gravité différents à la même CVE. Votre scanner d&#39;analyse statique de sécurité des applications (SAST) peut évaluer un résultat comme élevé, tandis que l&#39;analyse des dépendances le qualifiera de modéré. Ces incohérences créent de la confusion lors du classement et compliquent la définition de seuils d&#39;approbation cohérents entre les types d&#39;analyse.</p><p>Utilisez une politique de remplacement de la gravité pour imposer un niveau de référence cohérent. Si votre équipe de sécurité a évalué une famille de CVE spécifique et déterminé qu&#39;elle doit toujours être élevée quel que soit le scanner, définissez ce paramètre explicitement :</p><pre className="language-yaml shiki shiki-themes github-light" code="vulnerability_management_policy:
  - name: &quot;Normalize log4j severity to High&quot;
    description: &quot;Consistent severity for log4j CVEs across all scanners&quot;
    enabled: true
    rules:
      - type: detected
        criteria:
          - type: identifier
            identifier_type: cve
            values:
              - &quot;CVE-2021-44228&quot;
              - &quot;CVE-2021-45046&quot;
              - &quot;CVE-2021-45105&quot;
    actions:
      - type: severity_override
        severity_override_operation: set
        severity_override_value: high
" language="yaml" meta="" style=""><code><span class="line" line="1"><span class="shJU0">vulnerability_management_policy</span><span class="sgsFI">:
</span></span><span class="line" line="2"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">&quot;Normalize log4j severity to High&quot;
</span></span><span class="line" line="3"><span class="shJU0">    description</span><span class="sgsFI">: </span><span class="sYBdl">&quot;Consistent severity for log4j CVEs across all scanners&quot;
</span></span><span class="line" line="4"><span class="shJU0">    enabled</span><span class="sgsFI">: </span><span class="sYu0t">true
</span></span><span class="line" line="5"><span class="shJU0">    rules</span><span class="sgsFI">:
</span></span><span class="line" line="6"><span class="sgsFI">      - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">detected
</span></span><span class="line" line="7"><span class="shJU0">        criteria</span><span class="sgsFI">:
</span></span><span class="line" line="8"><span class="sgsFI">          - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">identifier
</span></span><span class="line" line="9"><span class="shJU0">            identifier_type</span><span class="sgsFI">: </span><span class="sYBdl">cve
</span></span><span class="line" line="10"><span class="shJU0">            values</span><span class="sgsFI">:
</span></span><span class="line" line="11"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CVE-2021-44228&quot;
</span></span><span class="line" line="12"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CVE-2021-45046&quot;
</span></span><span class="line" line="13"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CVE-2021-45105&quot;
</span></span><span class="line" line="14"><span class="shJU0">    actions</span><span class="sgsFI">:
</span></span><span class="line" line="15"><span class="sgsFI">      - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">severity_override
</span></span><span class="line" line="16"><span class="shJU0">        severity_override_operation</span><span class="sgsFI">: </span><span class="sYBdl">set
</span></span><span class="line" line="17"><span class="shJU0">        severity_override_value</span><span class="sgsFI">: </span><span class="sYBdl">high
</span></span></code></pre><p>Cette approche est particulièrement utile pour les organisations qui utilisent plusieurs types d&#39;analyse (SAST, analyse des dépendances, analyse des conteneurs) et pour lesquelles la même vulnérabilité sous-jacente apparaît avec des évaluations différentes selon la méthode de détection.</p><h3 id="_4-aligner-la-gravité-sur-les-renseignements-dexploitation">4. Aligner la gravité sur les renseignements d&#39;exploitation</h3><p>Les scores CVSS sont statiques. Ils n&#39;évoluent pas lorsqu&#39;une vulnérabilité commence à être activement exploitée, et ils ne tiennent pas compte de la probabilité d&#39;exploitation réelle. Le <a href="https://www.first.org/epss/" rel="">score EPSS (Exploit Prediction Scoring System)</a> de FIRST et le catalogue KEV de la CISA fournissent les informations manquantes.</p><p>Lorsque vos renseignements sur les menaces indiquent qu&#39;une CVE de gravité modérée est désormais activement exploitée (KEV) ou présente une forte probabilité d&#39;exploitation (score EPSS supérieur à 0,5), utilisez un remplacement de la gravité pour l&#39;augmenter :</p><pre className="language-yaml shiki shiki-themes github-light" code="vulnerability_management_policy:
  - name: &quot;Upgrade actively exploited CVEs&quot;
    description: &quot;CVEs in CISA KEV catalog should be treated as Critical&quot;
    enabled: true
    rules:
      - type: detected
        criteria:
          - type: identifier
            identifier_type: cve
            values:
              - &quot;CVE-2024-3094&quot;
              - &quot;CVE-2023-4966&quot;
              - &quot;CVE-2023-22515&quot;
    actions:
      - type: severity_override
        severity_override_operation: set
        severity_override_value: critical
" language="yaml" meta="" style=""><code><span class="line" line="1"><span class="shJU0">vulnerability_management_policy</span><span class="sgsFI">:
</span></span><span class="line" line="2"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">&quot;Upgrade actively exploited CVEs&quot;
</span></span><span class="line" line="3"><span class="shJU0">    description</span><span class="sgsFI">: </span><span class="sYBdl">&quot;CVEs in CISA KEV catalog should be treated as Critical&quot;
</span></span><span class="line" line="4"><span class="shJU0">    enabled</span><span class="sgsFI">: </span><span class="sYu0t">true
</span></span><span class="line" line="5"><span class="shJU0">    rules</span><span class="sgsFI">:
</span></span><span class="line" line="6"><span class="sgsFI">      - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">detected
</span></span><span class="line" line="7"><span class="shJU0">        criteria</span><span class="sgsFI">:
</span></span><span class="line" line="8"><span class="sgsFI">          - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">identifier
</span></span><span class="line" line="9"><span class="shJU0">            identifier_type</span><span class="sgsFI">: </span><span class="sYBdl">cve
</span></span><span class="line" line="10"><span class="shJU0">            values</span><span class="sgsFI">:
</span></span><span class="line" line="11"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CVE-2024-3094&quot;
</span></span><span class="line" line="12"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CVE-2023-4966&quot;
</span></span><span class="line" line="13"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CVE-2023-22515&quot;
</span></span><span class="line" line="14"><span class="shJU0">    actions</span><span class="sgsFI">:
</span></span><span class="line" line="15"><span class="sgsFI">      - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">severity_override
</span></span><span class="line" line="16"><span class="shJU0">        severity_override_operation</span><span class="sgsFI">: </span><span class="sYBdl">set
</span></span><span class="line" line="17"><span class="shJU0">        severity_override_value</span><span class="sgsFI">: </span><span class="sYBdl">critical
</span></span></code></pre><p>Maintenez une liste évolutive des entrées KEV pertinentes pour votre pile et mettez la politique à jour au fur et à mesure que de nouvelles CVE sont ajoutées au catalogue. Vous créez ainsi une boucle de rétroaction entre les renseignements sur les menaces et la gravité visible par les développeurs, sans que les analystes aient à ajuster manuellement chaque résultat.</p><h3 id="_5-appliquer-des-modèles-de-risque-au-niveau-du-groupe-dans-lorganisation">5. Appliquer des modèles de risque au niveau du groupe dans l&#39;organisation</h3><p>Les politiques des projets individuels ne sont pas évolutives lorsque votre organisation compte des centaines ou des milliers de projets. Les politiques de remplacement de la gravité peuvent être appliquées au niveau du groupe, ce qui affecte tous les projets du groupe. Combinez-les à <code>policy_scope</code> pour cibler des politiques sur les projets correspondant à un label de framework de conformité spécifique.</p><p>Par exemple, une organisation disposant d&#39;un framework de conformité « PCI-DSS » peut imposer un traitement de gravité plus strict pour les vulnérabilités d&#39;injection dans tous les projets à périmètre PCI, tout en appliquant une politique plus légère aux groupes d&#39;outils internes :</p><pre className="language-yaml shiki shiki-themes github-light" code="vulnerability_management_policy:
  - name: &quot;PCI projects: upgrade injection severity&quot;
    description: &quot;All injection vulnerabilities are Critical in PCI scope&quot;
    enabled: true
    policy_scope:
      compliance_frameworks:
        - id: 12345
    rules:
      - type: detected
        criteria:
          - type: identifier
            identifier_type: cwe
            values:
              - &quot;CWE-79&quot;
              - &quot;CWE-89&quot;
              - &quot;CWE-78&quot;
              - &quot;CWE-94&quot;
    actions:
      - type: severity_override
        severity_override_operation: set
        severity_override_value: critical
" language="yaml" meta="" style=""><code><span class="line" line="1"><span class="shJU0">vulnerability_management_policy</span><span class="sgsFI">:
</span></span><span class="line" line="2"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">&quot;PCI projects: upgrade injection severity&quot;
</span></span><span class="line" line="3"><span class="shJU0">    description</span><span class="sgsFI">: </span><span class="sYBdl">&quot;All injection vulnerabilities are Critical in PCI scope&quot;
</span></span><span class="line" line="4"><span class="shJU0">    enabled</span><span class="sgsFI">: </span><span class="sYu0t">true
</span></span><span class="line" line="5"><span class="shJU0">    policy_scope</span><span class="sgsFI">:
</span></span><span class="line" line="6"><span class="shJU0">      compliance_frameworks</span><span class="sgsFI">:
</span></span><span class="line" line="7"><span class="sgsFI">        - </span><span class="shJU0">id</span><span class="sgsFI">: </span><span class="sYu0t">12345
</span></span><span class="line" line="8"><span class="shJU0">    rules</span><span class="sgsFI">:
</span></span><span class="line" line="9"><span class="sgsFI">      - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">detected
</span></span><span class="line" line="10"><span class="shJU0">        criteria</span><span class="sgsFI">:
</span></span><span class="line" line="11"><span class="sgsFI">          - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">identifier
</span></span><span class="line" line="12"><span class="shJU0">            identifier_type</span><span class="sgsFI">: </span><span class="sYBdl">cwe
</span></span><span class="line" line="13"><span class="shJU0">            values</span><span class="sgsFI">:
</span></span><span class="line" line="14"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CWE-79&quot;
</span></span><span class="line" line="15"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CWE-89&quot;
</span></span><span class="line" line="16"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CWE-78&quot;
</span></span><span class="line" line="17"><span class="sgsFI">              - </span><span class="sYBdl">&quot;CWE-94&quot;
</span></span><span class="line" line="18"><span class="shJU0">    actions</span><span class="sgsFI">:
</span></span><span class="line" line="19"><span class="sgsFI">      - </span><span class="shJU0">type</span><span class="sgsFI">: </span><span class="sYBdl">severity_override
</span></span><span class="line" line="20"><span class="shJU0">        severity_override_operation</span><span class="sgsFI">: </span><span class="sYBdl">set
</span></span><span class="line" line="21"><span class="shJU0">        severity_override_value</span><span class="sgsFI">: </span><span class="sYBdl">critical
</span></span></code></pre><p>Avec ce modèle, l&#39;équipe de sécurité définit le modèle de risque une seule fois pour qu&#39;il s&#39;applique de manière cohérente partout. Aucune configuration par projet. Aucune dépendance vis-à-vis du bon vouloir de chaque équipe pour configurer les choses correctement.</p><h2 id="premiers-pas">Premiers pas</h2><p>Suivez ces étapes pour créer des politiques de gestion des vulnérabilités :</p><ol><li><strong>Identifiez le décalage.</strong> Ouvrez votre rapport de vulnérabilités et filtrez par « Nécessite un classement ». Recherchez des schémas : résultats critiques dans du code de test, résultats modérés faisant l&#39;objet d&#39;une exploitation active, évaluations incohérentes entre les types d&#39;analyse.</li><li><strong>Choisissez un cas d&#39;utilisation.</strong> Commencez par le scénario ci-dessus qui couvre le plus grand nombre de résultats incohérents.</li><li><strong>Définissez votre base de référence.</strong> Notez la distribution des gravités avant de créer une politique (nombre de résultats critiques, élevés, modérés dans le périmètre cible).</li><li><strong>Créez et appliquez une politique.</strong> Accédez à <strong>Sécurisation &gt; Politiques &gt; Nouvelle politique &gt; Politique de gestion des vulnérabilités</strong>. Collez la configuration du cas d&#39;utilisation ci-dessus, puis fusionnez la merge request.</li><li><strong>Validez les résultats.</strong> Après le prochain pipeline de la branche par défaut, vérifiez les gravités mises à jour dans le rapport de vulnérabilités. Filtrez le journal d&#39;activité pour identifier les résultats ajustés et confirmer leur exactitude.</li></ol><h3 id="référence-rapide">Référence rapide</h3><table><thead><tr><th>Paramètre</th><th>Détails</th></tr></thead><tbody><tr><td><strong>Types de critères</strong></td><td><code>file_path</code>, <code>directory</code>, <code>identifier</code> (avec <code>identifier_type</code> facultatif : <code>cve</code>, <code>cwe</code>, <code>owasp</code>)</td></tr><tr><td><strong>Opérations de remplacement</strong></td><td><code>set</code> (niveau précis), <code>increase</code> (niveau supérieur), <code>decrease</code> (niveau inférieur)</td></tr><tr><td><strong>Niveaux de gravité</strong></td><td><code>info</code>, <code>low</code>, <code>medium</code>, <code>high</code>, <code>critical</code></td></tr><tr><td><strong>Valeurs</strong></td><td>Valeur unique <code>value</code> ou tableau <code>values</code> (jusqu&#39;à 1 000 éléments, logique OU). Caractères génériques pris en charge (ex. : <code>CVE-2023-*</code>)</td></tr><tr><td><strong>Logique des critères</strong></td><td>Plusieurs critères dans une règle = ET (tous doivent correspondre). Plusieurs règles dans une politique = OU (au moins une doit correspondre)</td></tr><tr><td><strong>Limites</strong></td><td>3 critères par règle, 5 règles par politique, 5 politiques par projet de politique de sécurité</td></tr><tr><td><strong>Portée</strong></td><td>Niveau du projet ou niveau du groupe. <code>policy_scope</code> pour le ciblage par framework de conformité</td></tr><tr><td><strong>Priorité des remplacements manuels</strong></td><td>Les remplacements manuels effectués par des utilisateurs autorisés ont toujours la priorité</td></tr></tbody></table><h2 id="faq">FAQ</h2><p><strong>Quelle est la différence entre le <a href="https://about.gitlab.com/fr-fr/blog/auto-dismiss-vulnerability-management-policy/" rel="">rejet automatique</a> et le remplacement de la gravité ?</strong>
Le rejet automatique supprime les résultats de votre file de classement active. Le remplacement de la gravité les conserve, mais ajuste leur niveau de priorité : ils continuent d&#39;être suivis et examinés avec l&#39;urgence appropriée.</p><p><strong>Peut-on combiner des remplacements de gravité avec d&#39;autres types de politiques ?</strong>
Oui. Les remplacements de gravité s&#39;appliquent aux résultats sur la branche <code>default</code>, ce qui affecte les vulnérabilités apparaissant dans les rapports de vulnérabilités GitLab. Vous pouvez ensuite utiliser des politiques d&#39;approbation des merge requests pour contrôler les nouvelles vulnérabilités détectées.</p><p><strong>Les remplacements de gravité s&#39;appliquent-ils rétroactivement aux vulnérabilités existantes ?</strong>
Oui. Lorsqu&#39;une politique de remplacement de gravité est appliquée, elle traite les vulnérabilités correspondantes dont le statut est « Nécessite un classement » ou « Confirmé » lors du prochain pipeline de la branche par défaut, jusqu&#39;à 1 000 par exécution.</p><p><strong>Que se passe-t-il si deux politiques définissent des gravités contradictoires ?</strong>
Les remplacements manuels ont toujours la priorité. En cas de conflit entre politiques, la politique la plus récente a la priorité. Examinez régulièrement vos politiques pour éviter les critères qui se chevauchent.</p><p><strong>Les équipes de développement peuvent-elles contourner les politiques de remplacement de gravité ?</strong>
Non. Les politiques sont gérées dans un projet de politique de sécurité à accès restreint. Les équipes de développement ne peuvent ni les modifier ni les désactiver. Les utilisateurs autorisés peuvent appliquer des remplacements manuels sur des vulnérabilités individuelles, qui auront la priorité.</p><blockquote><p>Envie de faire en sorte que votre rapport de vulnérabilités reflète les risques réels ? <a href="https://docs.gitlab.com/user/application_security/policies/vulnerability_management_policy/#severity-override-policies" rel="">Consultez la documentation sur les politiques de remplacement de la gravité</a> ou <a href="https://about.gitlab.com/fr-fr/free-trial/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">démarrez un essai gratuit de GitLab Ultimate</a> pour essayer cette fonctionnalité dès aujourd&#39;hui.</p></blockquote><style>html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}</style>]]></content>
        <author>
            <name>Grant Hickman</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/grant-hickman/</uri>
        </author>
        <published>2026-07-07T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Claude Sonnet 5 sur GitLab : plus fiable et plus efficace]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/claude-sonnet-5-on-gitlab/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/claude-sonnet-5-on-gitlab/"/>
        <updated>2026-07-06T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Claude Sonnet 5 d&#39;Anthropic est désormais disponible sur <a href="https://docs.gitlab.com/user/duo_agent_platform/" rel="">GitLab Duo Agent Platform</a>, pour toutes les éditions et tous les modèles de déploiement, via la passerelle d&#39;IA de GitLab. Claude Sonnet 5 est conçu pour le travail que les agents accomplissent au quotidien pour les équipes de développement logiciel : tâches en plusieurs étapes, génération de code prêt pour la revue de code et exécution de workflows à grande échelle et à moindre coût. C&#39;est également le premier modèle de la suite d&#39;évaluation de GitLab à accomplir l&#39;intégralité des tâches de notre benchmark. Son prédécesseur, Sonnet 4.6, en avait accompli 93,8 %. Pour les équipes qui utilisent les agents GitLab Duo en production, les tâches terminées profitent désormais d&#39;un code de meilleure qualité.</p><blockquote><p>« Claude Sonnet 5 a géré l&#39;ensemble des tâches de programmation sur lesquelles nous l&#39;avons testé, tout en résolvant davantage de problèmes. C&#39;est une avancée significative en matière de qualité comme d&#39;efficacité. Il est disponible dès aujourd&#39;hui sur GitLab Duo Agent Platform, pour toutes les éditions et tous les modèles de déploiement. »</p><p>– Manav Khurana, Chief Product and Marketing Officer, GitLab</p></blockquote><h2 id="menez-chaque-exécution-dagent-à-son-terme">Menez chaque exécution d&#39;agent à son terme</h2><p>Un agent qui s&#39;interrompt à mi-parcours représente souvent l&#39;échec le plus coûteux. Lorsqu&#39;une exécution s&#39;arrête au milieu d&#39;une tâche en plusieurs étapes, le coût ne se limite pas au travail perdu : il faut aussi diagnostiquer le problème, reformuler la requête et vérifier le résultat partiel obtenu. C&#39;est la fiabilité qui transforme un agent que l&#39;on supervise en un agent auquel on délègue des tâches.</p><p>C&#39;est précisément le niveau d&#39;exigence qu&#39;atteint Claude Sonnet 5 : il s&#39;agit du premier modèle de notre suite d&#39;évaluation à mener à bien chaque tâche de notre benchmark. Associée à une hausse de 8,8 % du nombre de problèmes résolus, cette fiabilité signifie que les tâches accomplies ont plus de chances d&#39;être exploitables.</p><p>Pour les équipes qui utilisent <a href="https://docs.gitlab.com/user/duo_agent_platform/context/#gitlab-duo-agentic-chat" rel="">GitLab Duo Agentic Chat</a>, cette amélioration transforme la boucle quotidienne (requêtes, attente, évaluation). Une refactorisation multi-fichiers produit un résultat prêt pour une revue plutôt qu&#39;une impasse. La génération de tests fournit une couverture utilisable. Les investigations de sécurité remontent plus loin dans l&#39;historique du dépôt. Les agents par défaut de GitLab Duo traitent davantage de missions sans intervention, ce qui vous permet de consacrer votre temps à la revue des résultats plutôt qu&#39;au redémarrage des exécutions.</p><p><img alt="Requête à Claude Sonnet 5 pour analyser les échecs de pipelines des deux derniers mois à l&#39;aide de GitLab Orbit" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1782852592/cbhnr55e7qfskfldfspe.png" title="Requête à Claude Sonnet 5 pour analyser les échecs de pipelines des deux derniers mois à l&#39;aide de GitLab Orbit" /></p><h2 id="dépensez-moins-pour-de-meilleurs-résultats">Dépensez moins pour de meilleurs résultats</h2><p>Efficacité et fiabilité se renforcent mutuellement. Un agent qui accomplit davantage de tâches <em>et</em> qui consomme moins de ressources pour y parvenir réduit le coût réel de chaque tâche terminée.</p><p>Les différents modèles disponibles sur GitLab Duo Agent Platform consomment des GitLab Credits à des rythmes différents, et le bon choix du modèle dépend de la tâche. Pour maintenir des workflows d&#39;agents économiquement viables à grande échelle, il faut exécuter un large éventail de tâches de développement au quotidien sur un modèle dont le profil de coût correspond au type de tâches.</p><p>Pour la liste complète des modèles et de leur consommation en crédits, consultez la <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#models" rel="">documentation sur les GitLab Credits</a>.</p><h2 id="choisissez-le-bon-modèle-pour-votre-workflow">Choisissez le bon modèle pour votre workflow</h2><p>L&#39;objectif n&#39;est pas d&#39;utiliser un seul modèle. Il s&#39;agit de disposer, pour l&#39;essentiel du travail quotidien des agents, d&#39;une option par défaut fiable et économique, tout en gardant des modèles plus puissants à portée de clic lorsque la tâche le justifie.</p><p>Claude Sonnet 5 rejoint un ensemble en constante évolution de <a href="https://docs.gitlab.com/user/duo_agent_platform/model_selection/#supported-models" rel="">modèles d&#39;IA disponibles sur GitLab Duo Agent Platform</a>. Les modèles de la famille Sonnet allient qualité, rapidité et coût pour le développement quotidien. <a href="https://about.gitlab.com/blog/claude-opus-4-8-on-gitlab/" rel="">Claude Opus 4.8</a> reste disponible pour les tâches agentiques complexes et de longue haleine qui exigent une profondeur de raisonnement maximale. Vous pouvez choisir les modèles en fonction de la tâche via la <a href="https://docs.gitlab.com/user/duo_agent_platform/model_selection/" rel="">sélection de modèle</a> dans votre instance GitLab.</p><h2 id="lancez-vous-dès-aujourdhui">Lancez-vous dès aujourd&#39;hui</h2><p>Claude Sonnet 5 est disponible dès maintenant sur GitLab Duo Agent Platform, via la passerelle d&#39;IA de GitLab. Comme les autres modèles, il fonctionne avec les <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#models" rel="">GitLab Credits</a>.</p><blockquote><p><a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="">Démarrez un essai gratuit de GitLab Duo Agent Platform</a> dès aujourd&#39;hui, ou inscrivez-vous depuis l&#39;édition gratuite de GitLab en suivant <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">quelques étapes simples</a>. Les clients GitLab Premium ou GitLab Ultimate existants peuvent utiliser les GitLab Credits <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">inclus dans leur abonnement</a>.</p></blockquote>]]></content>
        <author>
            <name>Talia Armato-Helle</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/talia-armato-helle/</uri>
        </author>
        <published>2026-07-06T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[[Enquête] La responsabilité en matière d'IA en 2026]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/ai-accountability-report/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/ai-accountability-report/"/>
        <updated>2026-07-02T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab, la plateforme d&#39;orchestration intelligente pour le DevSecOps, vient de publier son <a href="https://about.gitlab.com/fr-fr/resources/ai-accountability-survey-2026/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">Rapport sur la responsabilité en matière d&#39;IA</a>, réalisé par The Harris Poll auprès de 1 528 professionnels DevSecOps dans six pays d&#39;Europe, d&#39;Amérique du Nord et d&#39;Asie-Pacifique.</p><p>Cette enquête révèle qu&#39;à mesure que les outils de codage alimentés par l&#39;IA s&#39;imposent comme une infrastructure standard, la question n&#39;est plus de savoir à quelle vitesse les équipes peuvent générer du code, mais bien si elles sont réellement en mesure de contrôler ce qu&#39;elles livrent en production.</p><p>Des chiffres clés au paradoxe de l&#39;IA, en passant par les quatre piliers de la responsabilité en matière d&#39;IA, voici ce que révèle notre enquête.</p><blockquote><p>Pour accéder à notre rapport complet sur la <strong>Responsabilité en matière d&#39;IA</strong>, <a href="https://about.gitlab.com/fr-fr/resources/ai-accountability-survey-2026/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">cliquez ici</a>. Vous souhaitez en savoir plus sur GitLab Duo Agent Platform ? <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">Commencez par un essai gratuit</a>.</p></blockquote><h2 id="la-responsabilité-en-matière-dia-définition">La responsabilité en matière d&#39;IA : définition</h2><p>La <strong>responsabilité en matière d&#39;IA</strong> est la capacité organisationnelle et technique à répondre à trois questions sur les workflows agentiques dans le cycle de vie logiciel :</p><ul><li>D&#39;où vient le code ?</li><li>Qu&#39;est-il censé faire ?</li><li>Qui en est responsable une fois en production ?</li></ul><p>Bien que les outils de codage alimentés par l&#39;IA aient été largement adoptés et que les gains de productivité soient réels, bon nombre d&#39;organisations sont encore dans l&#39;incapacité de répondre à ces questions. Les entreprises qui se démarquent aujourd&#39;hui sont celles qui ont fait du contexte, de la traçabilité et de la gouvernance les fondations de leur approche.</p><h2 id="lia-tient-ses-promesses-le-cycle-de-développement-logiciel-réinventé">L&#39;IA tient ses promesses : le cycle de développement logiciel réinventé</h2><p>L&#39;adoption de l&#39;IA n&#39;est plus une expérimentation. 91 % des organisations utilisent activement au moins deux outils de codage alimentés par l&#39;IA, et plus de la moitié en cumulent trois ou plus.</p><p>Cet investissement porte ses fruits, puisque 60 % des professionnels DevSecOps estiment que le retour sur investissement (ROI) des outils de codage alimentés par l&#39;IA a dépassé leurs attentes. Les bénéfices se mesurent très concrètement sur le terrain, comme en témoignent les chiffres suivants : 78 % des professionnels font état d&#39;une production de code plus rapide, et 73 % observent même une amélioration globale de la qualité du code livré.</p><p>Cependant, cette montée en puissance révèle un déséquilibre. 79 % des répondants s&#39;accordent à dire que la productivité individuelle s&#39;est améliorée grâce à l&#39;IA, mais que le processus global de livraison logicielle n&#39;a pas progressé au même rythme.</p><p>C&#39;est ce qu&#39;on appelle le paradoxe de l&#39;IA.</p><p>L&#39;IA a accéléré les étapes du développement logiciel les plus directement liées à l&#39;écriture du code, tandis que la conformité, les scans de sécurité, le déploiement et la gestion des incidents n&#39;ont pas bénéficié de cette même dynamique.</p><p>85 % des professionnels constatent eux-mêmes ce glissement, et 84 % estiment que le principal défi n&#39;est plus d&#39;écrire le code généré par l&#39;IA, mais de le maîtriser une fois créé. Le constat s&#39;étend même à la maintenabilité à long terme du code, puisque 82 % redoutent que ce code génère une nouvelle forme de dette technique à laquelle les organisations ne sont pas préparées.</p><h2 id="contexte-et-traçabilité-les-nouveaux-facteurs-de-différenciation">Contexte et traçabilité, les nouveaux facteurs de différenciation</h2><p>87 % des professionnels DevSecOps sont convaincus que leur équipe pourrait déterminer, en moins de 24 heures, si du code généré par l&#39;IA a contribué à un incident en production. Pourtant, 34 % des organisations ayant subi un incident au cours de l&#39;année écoulée n&#39;ont pas été en mesure de le faire.</p><p>Ce décalage ne s&#39;explique pas par un manque de savoir-faire, mais par les outils en place. Pour 43 % des équipes, l&#39;un des principaux obstacles à la traçabilité complète du code est la capacité à distinguer la <a href="https://about.gitlab.com/fr-fr/topics/devops/ai-code-generation-guide/" rel="" title="Génération de code par IA">génération de code par IA</a> du code écrit par un développeur. D&#39;autres composent avec une chaîne d&#39;outils fragmentés (40 %), ou des systèmes qui ne permettent pas de suivre l&#39;origine ou l&#39;intention du code (39 %). Dans les trois cas, le problème est structurel, et non individuel.</p><p>L&#39;intégration demeure le chaînon manquant, puisque seuls 28 % des répondants déclarent disposer d&#39;outils couvrant l&#39;ensemble du cycle de développement avec des données et des workflows partagés.</p><p>Les entreprises capables de déterminer avec certitude l&#39;implication du code généré par l&#39;IA ont toutes un dénominateur commun : une revue de code active par les équipes sécurité ou DevOps (48 %), une journalisation, une surveillance ou des pistes d&#39;audit qui retracent chaque modification du code (42 %), ou encore une expérience dans l&#39;investigation d&#39;incidents impliquant du code généré par l&#39;IA (40 %).</p><h2 id="la-gouvernance-un-impératif">La gouvernance, un impératif</h2><p>La gouvernance reste le grand chantier inachevé de la responsabilité en matière d&#39;IA. 92 % des professionnels DevSecOps font état de problèmes de gouvernance liée au code généré par l&#39;IA, et 80 % reconnaissent que leur organisation a adopté des outils d&#39;IA plus rapidement qu&#39;elle n&#39;a élaboré des politiques pour les encadrer.</p><p>Les organisations avancent, mais à des rythmes très différents : si les trois quarts des entreprises interrogées disposent d&#39;un framework de gouvernance, seules 41 % ont formalisé une politique complète.</p><p>Cet écart a des conséquences directes. Là où la gouvernance est formalisée, 64 % des organisations font relire par des humains la majeure partie de leur code généré par l&#39;IA (70 à 100 %), contre 50 % pour celles qui n&#39;ont pas de gouvernance formelle. À l&#39;inverse, sans règles claires, ce code alourdit la dette technique plus rapidement que les pratiques traditionnelles, comme le reconnaissent 86 % des répondants.</p><p>Le risque est désormais traité comme immédiat. 83 % des organisations voient l&#39;accumulation de code généré par l&#39;IA comme un risque à gérer dès maintenant, 44 % allant jusqu&#39;à le qualifier de risque technologique majeur. Les investissements, eux, sont déjà engagés. 91 % envisagent d&#39;investir dans des outils de gouvernance de code alimentés par l&#39;IA au cours des 12 prochains mois, et 98 % ont déjà alloué un budget à cet effet ou envisagent de le faire.</p><p>La gouvernance du code généré par l&#39;IA s&#39;impose comme une composante à part entière du <a href="https://about.gitlab.com/fr-fr/topics/devsecops/" rel="" title="Qu&#39;est-ce que le DevSecOps ?">DevSecOps</a>, au même titre que la sécurité.</p><h2 id="les-quatre-piliers-de-la-responsabilité-en-matière-dia">Les quatre piliers de la responsabilité en matière d&#39;IA</h2><p>Quatre leviers fondamentaux distinguent les entreprises qui montrent la voie de celles qui cherchent encore à rattraper leur retard :</p><ul><li>Des outils intégrés qui préservent le contexte tout au long du cycle de développement logiciel.</li><li>Une traçabilité qui relie chaque ligne de code, qu&#39;elle soit écrite par un humain ou générée par l&#39;IA, à son intention d&#39;origine.</li><li>Une gouvernance capable d&#39;évoluer au rythme de l&#39;adoption, associée à une revue humaine active.</li><li>Une maintenabilité à long terme du code généré par l&#39;IA, soutenue par la documentation et le contexte, même quand le volume augmente.</li></ul><p>Ces leviers sont devenus des enjeux stratégiques. 85 % des professionnels estiment que la prochaine phase de l&#39;IA dans le développement logiciel portera moins sur la génération de code que sur sa gouvernance.</p><p>Une proportion similaire va plus loin : les organisations incapables de suivre ou de gouverner ce code seront confrontées à des risques opérationnels et de sécurité croissants, à mesure que le <a href="https://about.gitlab.com/fr-fr/topics/agentic-ai/" rel="" title="Développement logiciel agentique">développement logiciel agentique</a> se généralise. Enfin, 86 % constatent qu&#39;il crée déjà de nouveaux défis en matière de responsabilité pour les équipes de développement, de sécurité et d&#39;opérations.</p><h2 id="contexte-et-traçabilité-tout-au-long-du-sdlc-avec-gitlab">Contexte et traçabilité tout au long du SDLC avec GitLab</h2><p>GitLab réunit l&#39;intégralité du cycle de développement logiciel au sein d&#39;un même système, pour que les organisations puissent répondre aux trois questions au cœur de la responsabilité en matière d&#39;IA pour toute ligne de code : d&#39;où vient-elle, quel est son objectif et qui en est responsable en production ?</p><p>La plateforme connecte nativement les tickets, le code, les merge requests, les pipelines, les risques de sécurité détectés et les déploiements au sein d&#39;une plateforme unique, dotée d&#39;un modèle de données commun. En parallèle, <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/" rel="" title="GitLab Duo Agent Platform">GitLab Duo Agent Platform</a> met à disposition des équipes de développement des agents d&#39;IA qui collaborent tout au long du cycle de développement logiciel (SDLC) : planification, build, sécurisation, déploiement, exploitation du code, etc.</p><p>Pour améliorer la performance de ces agents, GitLab vient de lancer <a href="https://about.gitlab.com/fr-fr/blog/introducing-gitlab-orbit/" rel="" title="GitLab Orbit">GitLab Orbit</a> (actuellement disponible en version bêta publique). GitLab Orbit alimente ces agents en indexant en continu l&#39;ensemble du cycle de développement dans un graphe de contexte toujours à jour. Les agents raisonnent à partir de données structurées et complètes, ce qui augmente leur précision et leur efficacité. Plus besoin de jongler entre des outils et des informations fragmentés, le contexte est préservé à chaque étape du cycle.</p><p><em>« Les outils de codage alimentés par l&#39;IA ont tenu leur promesse en matière de vitesse. Mais les événements survenus ces derniers mois (attaques de la chaîne d&#39;approvisionnement logicielle, problèmes de fiabilité et renforcement des exigences réglementaires en matière de traçabilité et de provenance de l&#39;IA) montrent clairement que la vitesse sans contrôle représente un risque, et non un avantage. Les équipes qui souhaitent prendre une longueur d&#39;avance se posent déjà la vraie question : pouvons-nous réellement contrôler tout le code que nous générons ? Les organisations qui livreront des logiciels fiables plus rapidement sont celles qui posent dès maintenant les bases de la responsabilité, avec le contexte, la traçabilité et la gouvernance intégrés à la plateforme, et non ajoutés après coup »</em>, explique Manav Khurana, Chief Product and Marketing Officer chez GitLab.</p><blockquote><p>Pour aller plus loin, <a href="https://about.gitlab.com/fr-fr/resources/ai-accountability-survey-2026/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">téléchargez le <strong>Rapport sur la responsabilité en matière d&#39;IA</strong></a>, ou <a href="https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_emea_x_trial_x_fr_blog_fr" rel="">découvrez dès maintenant GitLab Duo Agent Platform avec un essai gratuit</a>.</p></blockquote>]]></content>
        <author>
            <name>Maud Leuenberger</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/maud-leuenberger/</uri>
        </author>
        <published>2026-07-02T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Nouveautés de Git 2.55.0]]></title>
        <id>https://about.gitlab.com/fr-fr/blog/whats-new-in-git-2-55-0/</id>
        <link href="https://about.gitlab.com/fr-fr/blog/whats-new-in-git-2-55-0/"/>
        <updated>2026-07-01T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Le projet <a href="https://about.gitlab.com/fr-fr/blog/what-is-git/" rel="" title="Qu&#39;est-ce que Git ?">Git</a> a récemment publié <a href="https://lore.kernel.org/git/xmqqv7b1w9vr.fsf@gitster.g/T/#u" rel="">Git 2.55.0</a>. Passons en revue quelques-unes des nouveautés marquantes de cette release, qui comprend des contributions de l&#39;équipe Git chez GitLab.</p><h2 id="git-history1-nouvelle-commande-fixup">git-history(1) : nouvelle commande <code>fixup</code></h2><p>Dans <a href="https://about.gitlab.com/fr-fr/blog/whats-new-in-git-2-54-0/#easier-editing-of-your-commit-history" rel="">les nouveautés marquantes de Git 2.54.0</a>, nous avons présenté l&#39;introduction de <a href="https://git-scm.com/docs/git-history" rel="">git-history(1)</a>. Dans la release 2.55.0, une nouvelle sous-commande a été ajoutée à cet outil : <code>fixup</code>.</p><p>Imaginez que vous avez apporté des modifications et que vous souhaitez les intégrer à un commit existant. L&#39;approche la plus courante consiste à créer un commit fixup, puis à le regrouper automatiquement (« autosquash ») avec <a href="https://git-scm.com/docs/git-rebase" rel="">git-rebase(1)</a> :</p><pre className="language-shell shiki shiki-themes github-light" code="git commit --fixup=&lt;commit-id&gt;
git rebase -i --autosquash &lt;commit-id&gt;^
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">git</span><span class="sYBdl"> commit</span><span class="sYu0t"> --fixup=</span><span class="sD7c4">&lt;</span><span class="sYu0t">commit-id</span><span class="sD7c4">&gt;
</span></span><span class="line" line="2"><span class="s7eDp">git</span><span class="sYBdl"> rebase</span><span class="sYu0t"> -i</span><span class="sYu0t"> --autosquash</span><span class="sD7c4"> &lt;</span><span class="sYBdl">commit-i</span><span class="sgsFI">d</span><span class="sD7c4">&gt;</span><span class="sYBdl">^
</span></span></code></pre><p>Effectuer cette opération en deux étapes est fastidieux, d&#39;autant plus que cela nécessite un rebasage interactif. À la place, utilisez la commande <code>fixup</code> de git-history(1) :</p><pre className="language-shell shiki shiki-themes github-light" code="git history fixup &lt;commit-id&gt;
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">git</span><span class="sYBdl"> history</span><span class="sYBdl"> fixup</span><span class="sD7c4"> &lt;</span><span class="sYBdl">commit-i</span><span class="sgsFI">d</span><span class="sD7c4">&gt;
</span></span></code></pre><p>Celle-ci intègre les modifications indexées au commit indiqué. Avantage supplémentaire : étant donné que vous utilisez git-history(1), toutes les autres branches locales qui contiennent le commit corrigé sont également mises à jour. Ainsi, lorsque vous travaillez avec des branches empilées, corriger un commit de la pile rebase automatiquement toutes les branches associées.</p><p>Cette <a href="https://gitlab.com/git-scm/git/-/commit/ca7d7d642406e608214ee4529a75a6ad2310de35" rel="">fonctionnalité</a> a été <a href="https://lore.kernel.org/git/20260427-b4-pks-history-fixup-v3-0-cb908f06264b@pks.im/" rel="">implémentée</a> par <a href="https://gitlab.com/pks-gitlab" rel="">Patrick Steinhardt</a>.</p><h2 id="daemon-fsmonitor-pour-linux">Daemon fsmonitor pour Linux</h2><p>Lorsque vous travaillez avec de grands monorepos, <a href="https://git-scm.com/docs/git-status" rel="">git-status(1)</a> est parfois lent à déterminer ce qui a changé dans l&#39;arborescence de travail locale, car Git doit en parcourir l&#39;intégralité pour repérer les fichiers modifiés. Pour accélérer ce processus, le paramètre <code>core.fsmonitor</code> a été <a href="https://gitlab.com/git-scm/git/-/commit/e05336bddacb90cf243aacc0f7b7f34f900453d7" rel="">ajouté</a> en janvier 2018 dans Git 2.16. À l&#39;époque, vous deviez fournir votre propre outil (comme <a href="https://facebook.github.io/watchman/" rel="">Watchman</a>). Une fois configuré, cet outil s&#39;exécute en arrière-plan et surveille les modifications du système de fichiers. Il informe Git qu&#39;un fichier est concerné ; Git vérifie alors si le fichier a été modifié et met à jour le statut mis en cache. Ensuite, chaque fois que l&#39;utilisateur appelle git-status(1), la commande peut simplement renvoyer le statut mis en cache.</p><p>En avril 2022, le paramètre <code>core.fsmonitor</code> a été <a href="https://gitlab.com/git-scm/git/-/commit/1e0ea5c4316d2241dd76ef430a2779db9a097dfb" rel="">modifié</a> pour accepter une valeur booléenne. Lorsque ce paramètre est défini sur <code>true</code>, un daemon intégré à Git est utilisé et plus aucun outil tiers n&#39;est nécessaire. Mais ce moniteur de système de fichiers n&#39;était implémenté que pour Windows et macOS ; la prise en charge de GNU/Linux n&#39;existait pas encore.</p><p>C&#39;est désormais chose faite avec Git 2.55, qui prend en charge Linux. Pour y parvenir, nous avons décidé d&#39;utiliser <a href="https://man7.org/linux/man-pages/man7/inotify.7.html" rel="">inotify(7)</a> plutôt que <a href="https://www.man7.org/linux/man-pages/man7/fanotify.7.html" rel="">fanotify(7)</a>, car fanotify(7) nécessite des privilèges élevés. Il y a toutefois un petit <a href="https://git-scm.com/docs/git-fsmonitor--daemon#_linux_caveats" rel="">bémol</a> : fsmonitor doit surveiller chaque répertoire du dépôt. Dans un grand dépôt, vous pourriez atteindre la limite de surveillance inotify (<code>fs.inotify.max_user_watches</code>), que vous devrez peut-être augmenter.</p><p>Ces <a href="https://gitlab.com/git-scm/git/-/commit/4d11b9c21863c1a860fdf61a9066f0d94c0d692a" rel="">modifications</a> ont été <a href="https://lore.kernel.org/git/pull.2147.v15.git.git.1776259657.gitgitgadget@gmail.com/" rel="">soumises</a> par <a href="https://paultarjan.com/" rel="">Paul Tarjan</a> à partir des travaux d&#39;Eric DeCosta et de <a href="https://github.com/maryis" rel="">Marziyeh Esipreh</a>.</p><h2 id="git-push-vers-un-groupe-de-dépôts-distants"><code>git push</code> vers un groupe de dépôts distants</h2><p>Il y a déjà un certain temps, <a href="https://git-scm.com/docs/git-fetch" rel="">git-fetch(1)</a> a appris à gérer la récupération depuis un <a href="https://git-scm.com/docs/git-fetch#Documentation/git-fetch.txt-group" rel="">groupe</a> de dépôts distants.</p><p>La commande suivante configure un groupe de dépôts distants :</p><pre className="language-shell shiki shiki-themes github-light" code="git config set remotes.forks &quot;origin upstream&quot;
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">git</span><span class="sYBdl"> config</span><span class="sYBdl"> set</span><span class="sYBdl"> remotes.forks</span><span class="sYBdl"> &quot;origin upstream&quot;
</span></span></code></pre><p>Une fois cette configuration en place, vous pouvez utiliser git-fetch(1) sur ce groupe nommé « forks » ; les modifications de tous les dépôts distants de ce groupe sont alors récupérées. Cette commande peut s&#39;avérer utile lorsque vous souhaitez obtenir les mises à jour d&#39;un ensemble de dépôts distants en une seule fois.</p><p><a href="https://git-scm.com/docs/git-push" rel="">git-push(1)</a>, en revanche, ne pouvait pas utiliser les groupes de dépôts distants.</p><p>Git 2.55 comble cette lacune : git-push(1) accepte désormais aussi un groupe de dépôts distants. Voici un exemple de push de la branche <code>main</code> vers le groupe mentionné ci-dessus :</p><pre className="language-shell shiki shiki-themes github-light" code="git push forks main
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">git</span><span class="sYBdl"> push</span><span class="sYBdl"> forks</span><span class="sYBdl"> main
</span></span></code></pre><p>Comme avec git-fetch(1), cette commande envoie les références spécifiées vers chaque dépôt distant du groupe. Chaque dépôt distant fait l&#39;objet d&#39;un push indépendant et respecte sa propre correspondance <code>remote.&lt;name&gt;.push</code> ainsi que ses paramètres de miroir.</p><p>Cette <a href="https://gitlab.com/git-scm/git/-/commit/2c677d20b684cdcae669fe508d4cd60fea8cb320" rel="">fonctionnalité</a> a été <a href="https://lore.kernel.org/git/20260503153402.1333220-1-usmanakinyemi202@gmail.com/" rel="">soumise</a> par <a href="https://github.com/Unique-Usman" rel="">Usman Akinyemi</a>, sur la base d&#39;une suggestion de <a href="https://lore.kernel.org/git/xmqqiki0ivgy.fsf@gitster.g/" rel="">Junio C Hamano</a>.</p><h2 id="limiter-la-largeur-de-git-log-graph">Limiter la largeur de <code>git log --graph</code></h2><p>L&#39;option <a href="https://git-scm.com/docs/git-log#Documentation/git-log.txt---graph" rel=""><code>--graph</code></a> de <a href="https://git-scm.com/docs/git-log" rel="">git-log(1)</a> dessine une représentation ASCII de l&#39;historique des commits. Dans un dépôt comptant de nombreux contributeurs actifs, ce graphe peut devenir très large. Par exemple, sur le dépôt <a href="https://gitlab.com/git-scm/git/" rel="">git.git</a>, ce graphe atteint neuf caractères de large après seulement 30 commits :</p><pre className="language-text" code="* 26d8d94e94 A few more topics before -rc2
*   02bb39c5cb Merge branch &#39;js/objects-larger-than-4gb-on-windows-more&#39;
|\
| * c6a4629e32 odb: use size_t for object_info.sizep and the size APIs
| * 7a3a78cc76 packfile,delta: drop the `cast_size_t_to_ulong()` wrappers
| * 188bac14f7 pack-objects: use size_t for in-core object sizes
| * 2d83cc3f84 packfile: widen unpack_entry()&#39;s size out-parameter to size_t
| * 1d43315b31 pack-objects(check_pack_inflate()): use size_t instead of unsigned long
| * 33afe87338 patch-delta: use size_t for sizes
| * 8ea69373a4 compat/msvc: use _chsize_s for ftruncate
* |   8cf57cbec4 Merge branch &#39;kw/gitattributes-typofix&#39;
|\ \
| * | 0bf506efd4 gitattributes: fix eol attribute for Perl scripts
* | |   8d96f09e92 Merge branch &#39;js/objects-larger-than-4gb-on-windows&#39;
|\ \ \
| * | | ab3810eb6f zlib: properly clamp to uLong
* | | | 95e20213fa Hopefully final batch before -rc2
* | | |   8632b5c49d Merge branch &#39;en/commit-graph-timestamp-fix&#39;
|\ \ \ \
| * | | | fbcc5408fc commit-graph: use timestamp_t for max parent generation accumulator
* | | | |   619931f561 Merge branch &#39;dl/posix-unused-warning-clang&#39;
|\ \ \ \ \
| * | | | | cf48887610 compat/posix.h: simplify GIT_GNUC_PREREQ() comparison
| * | | | | ffd45926dc compat/posix.h: clean up GIT_GNUC_PREREQ() and UNUSED
| * | | | | 689dc92e50 compat/posix.h: enable UNUSED warning messages for Clang
* | | | | |   621962aa7a Merge branch &#39;td/ls-files-pathspec-prefilter&#39;
|\ \ \ \ \ \
| * | | | | | 3f5203eeb4 ls-files: filter pathspec before lstat
| | |_|_|_|/
| |/| | | |
* | | | | |   0c706d5092 Merge branch &#39;ta/doc-config-adoc-fixes&#39;
|\ \ \ \ \ \
| * | | | | | 4fa2c6e045 doc: git-config: escape erroneous highlight markup
| * | | | | | 042221cccb doc: config/sideband: fix description list delimiter
| * | | | | | 3eb61fda62 doc: config: terminate runaway lists
* | | | | | |   49cb068fb2 Merge branch &#39;jc/t1400-fifo-cleanup&#39;
|\ \ \ \ \ \ \
| * | | | | | | e8f12e0e95 t1400: have fifo test clean after itself
* | | | | | | |   b4970f8448 Merge branch &#39;td/describe-tag-iteration&#39;
|\ \ \ \ \ \ \ \
| * | | | | | | | 55088ac8a4 describe: limit default ref iteration to tags
" language="text" meta=""><code>* 26d8d94e94 A few more topics before -rc2
*   02bb39c5cb Merge branch &#39;js/objects-larger-than-4gb-on-windows-more&#39;
|\
| * c6a4629e32 odb: use size_t for object_info.sizep and the size APIs
| * 7a3a78cc76 packfile,delta: drop the `cast_size_t_to_ulong()` wrappers
| * 188bac14f7 pack-objects: use size_t for in-core object sizes
| * 2d83cc3f84 packfile: widen unpack_entry()&#39;s size out-parameter to size_t
| * 1d43315b31 pack-objects(check_pack_inflate()): use size_t instead of unsigned long
| * 33afe87338 patch-delta: use size_t for sizes
| * 8ea69373a4 compat/msvc: use _chsize_s for ftruncate
* |   8cf57cbec4 Merge branch &#39;kw/gitattributes-typofix&#39;
|\ \
| * | 0bf506efd4 gitattributes: fix eol attribute for Perl scripts
* | |   8d96f09e92 Merge branch &#39;js/objects-larger-than-4gb-on-windows&#39;
|\ \ \
| * | | ab3810eb6f zlib: properly clamp to uLong
* | | | 95e20213fa Hopefully final batch before -rc2
* | | |   8632b5c49d Merge branch &#39;en/commit-graph-timestamp-fix&#39;
|\ \ \ \
| * | | | fbcc5408fc commit-graph: use timestamp_t for max parent generation accumulator
* | | | |   619931f561 Merge branch &#39;dl/posix-unused-warning-clang&#39;
|\ \ \ \ \
| * | | | | cf48887610 compat/posix.h: simplify GIT_GNUC_PREREQ() comparison
| * | | | | ffd45926dc compat/posix.h: clean up GIT_GNUC_PREREQ() and UNUSED
| * | | | | 689dc92e50 compat/posix.h: enable UNUSED warning messages for Clang
* | | | | |   621962aa7a Merge branch &#39;td/ls-files-pathspec-prefilter&#39;
|\ \ \ \ \ \
| * | | | | | 3f5203eeb4 ls-files: filter pathspec before lstat
| | |_|_|_|/
| |/| | | |
* | | | | |   0c706d5092 Merge branch &#39;ta/doc-config-adoc-fixes&#39;
|\ \ \ \ \ \
| * | | | | | 4fa2c6e045 doc: git-config: escape erroneous highlight markup
| * | | | | | 042221cccb doc: config/sideband: fix description list delimiter
| * | | | | | 3eb61fda62 doc: config: terminate runaway lists
* | | | | | |   49cb068fb2 Merge branch &#39;jc/t1400-fifo-cleanup&#39;
|\ \ \ \ \ \ \
| * | | | | | | e8f12e0e95 t1400: have fifo test clean after itself
* | | | | | | |   b4970f8448 Merge branch &#39;td/describe-tag-iteration&#39;
|\ \ \ \ \ \ \ \
| * | | | | | | | 55088ac8a4 describe: limit default ref iteration to tags
</code></pre><p>Chaque voie de l’historique se prolonge vers le bas jusqu&#39;au commit à partir duquel la branche a été créée. Les messages de commit sont ainsi relégués vers la droite, ce qui complique la lecture. Le problème devient particulièrement ingérable lorsque la largeur de l&#39;écran du terminal est atteinte.</p><p>Git 2.55 ajoute une nouvelle option (<code>--graph-lane-limit=&lt;n&gt;</code>) pour limiter le nombre de voies dessinées. Toutes les voies au-delà de la limite sont remplacées par une marque de troncature <code>~</code> afin d&#39;indiquer clairement que le graphe a été tronqué :</p><pre className="language-shell shiki shiki-themes github-light" code="git log --graph --graph-lane-limit=5
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">git</span><span class="sYBdl"> log</span><span class="sYu0t"> --graph</span><span class="sYu0t"> --graph-lane-limit=5
</span></span></code></pre><p>En utilisant cette option pour les 30 mêmes commits que ci-dessus, nous obtenons le résultat suivant :</p><pre className="language-text" code="* 26d8d94e94 A few more topics before -rc2
*   02bb39c5cb Merge branch &#39;js/objects-larger-than-4gb-on-windows-more&#39;
|\
| * c6a4629e32 odb: use size_t for object_info.sizep and the size APIs
| * 7a3a78cc76 packfile,delta: drop the `cast_size_t_to_ulong()` wrappers
| * 188bac14f7 pack-objects: use size_t for in-core object sizes
| * 2d83cc3f84 packfile: widen unpack_entry()&#39;s size out-parameter to size_t
| * 1d43315b31 pack-objects(check_pack_inflate()): use size_t instead of unsigned long
| * 33afe87338 patch-delta: use size_t for sizes
| * 8ea69373a4 compat/msvc: use _chsize_s for ftruncate
* |   8cf57cbec4 Merge branch &#39;kw/gitattributes-typofix&#39;
|\ \
| * | 0bf506efd4 gitattributes: fix eol attribute for Perl scripts
* | |   8d96f09e92 Merge branch &#39;js/objects-larger-than-4gb-on-windows&#39;
|\ \ \
| * | | ab3810eb6f zlib: properly clamp to uLong
* | | | 95e20213fa Hopefully final batch before -rc2
* | | |   8632b5c49d Merge branch &#39;en/commit-graph-timestamp-fix&#39;
|\ \ \ \
| * | | | fbcc5408fc commit-graph: use timestamp_t for max parent generation accumulator
* | | | |   619931f561 Merge branch &#39;dl/posix-unused-warning-clang&#39;
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: simplify GIT_GNUC_PREREQ() comparison
| * | | | ~ ffd45926dc compat/posix.h: clean up GIT_GNUC_PREREQ() and UNUSED
| * | | | ~ 689dc92e50 compat/posix.h: enable UNUSED warning messages for Clang
* | | | | ~ 621962aa7a Merge branch &#39;td/ls-files-pathspec-prefilter&#39;
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filter pathspec before lstat
| | |_|_|_~
| |/| | | ~
* | | | | ~ 0c706d5092 Merge branch &#39;ta/doc-config-adoc-fixes&#39;
|\ \ \ \ \~
| * | | | ~ 4fa2c6e045 doc: git-config: escape erroneous highlight markup
| * | | | ~ 042221cccb doc: config/sideband: fix description list delimiter
| * | | | ~ 3eb61fda62 doc: config: terminate runaway lists
* | | | | ~ 49cb068fb2 Merge branch &#39;jc/t1400-fifo-cleanup&#39;
|\ \ \ \ \~
| * | | | ~ e8f12e0e95 t1400: have fifo test clean after itself
* | | | | ~ b4970f8448 Merge branch &#39;td/describe-tag-iteration&#39;
|\ \ \ \ \~
| * | | | ~ 55088ac8a4 describe: limit default ref iteration to tags
" language="text" meta=""><code>* 26d8d94e94 A few more topics before -rc2
*   02bb39c5cb Merge branch &#39;js/objects-larger-than-4gb-on-windows-more&#39;
|\
| * c6a4629e32 odb: use size_t for object_info.sizep and the size APIs
| * 7a3a78cc76 packfile,delta: drop the `cast_size_t_to_ulong()` wrappers
| * 188bac14f7 pack-objects: use size_t for in-core object sizes
| * 2d83cc3f84 packfile: widen unpack_entry()&#39;s size out-parameter to size_t
| * 1d43315b31 pack-objects(check_pack_inflate()): use size_t instead of unsigned long
| * 33afe87338 patch-delta: use size_t for sizes
| * 8ea69373a4 compat/msvc: use _chsize_s for ftruncate
* |   8cf57cbec4 Merge branch &#39;kw/gitattributes-typofix&#39;
|\ \
| * | 0bf506efd4 gitattributes: fix eol attribute for Perl scripts
* | |   8d96f09e92 Merge branch &#39;js/objects-larger-than-4gb-on-windows&#39;
|\ \ \
| * | | ab3810eb6f zlib: properly clamp to uLong
* | | | 95e20213fa Hopefully final batch before -rc2
* | | |   8632b5c49d Merge branch &#39;en/commit-graph-timestamp-fix&#39;
|\ \ \ \
| * | | | fbcc5408fc commit-graph: use timestamp_t for max parent generation accumulator
* | | | |   619931f561 Merge branch &#39;dl/posix-unused-warning-clang&#39;
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: simplify GIT_GNUC_PREREQ() comparison
| * | | | ~ ffd45926dc compat/posix.h: clean up GIT_GNUC_PREREQ() and UNUSED
| * | | | ~ 689dc92e50 compat/posix.h: enable UNUSED warning messages for Clang
* | | | | ~ 621962aa7a Merge branch &#39;td/ls-files-pathspec-prefilter&#39;
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filter pathspec before lstat
| | |_|_|_~
| |/| | | ~
* | | | | ~ 0c706d5092 Merge branch &#39;ta/doc-config-adoc-fixes&#39;
|\ \ \ \ \~
| * | | | ~ 4fa2c6e045 doc: git-config: escape erroneous highlight markup
| * | | | ~ 042221cccb doc: config/sideband: fix description list delimiter
| * | | | ~ 3eb61fda62 doc: config: terminate runaway lists
* | | | | ~ 49cb068fb2 Merge branch &#39;jc/t1400-fifo-cleanup&#39;
|\ \ \ \ \~
| * | | | ~ e8f12e0e95 t1400: have fifo test clean after itself
* | | | | ~ b4970f8448 Merge branch &#39;td/describe-tag-iteration&#39;
|\ \ \ \ \~
| * | | | ~ 55088ac8a4 describe: limit default ref iteration to tags
</code></pre><p>Cette option n&#39;a de sens qu&#39;avec <code>--graph</code>. La valeur par défaut est <code>0</code>, ce qui signifie qu&#39;il n&#39;y a aucune limite ; les valeurs nulles ou négatives sont traitées de la même manière, tout comme le fait <code>--max-parents</code>.</p><p>Cette <a href="https://gitlab.com/git-scm/git/-/commit/7af2503365b4bc683c16e667b88c0796d6d9d2ee" rel="">fonctionnalité</a> a été <a href="https://lore.kernel.org/git/20260328001113.1275291-1-pabloosabaterr@gmail.com/" rel="">soumise</a> par <a href="https://pablosabater.dev/" rel="">Pablo Sabater</a>.</p><h2 id="évolution-de-rust-dans-le-code-source-de-git">Évolution de Rust dans le code source de Git</h2><p>En mars 2025, avec la sortie de Git 2.49, le premier code <a href="https://www.rust-lang.org/" rel="">Rust</a> a été ajouté au code source de Git. Des liaisons Rust ont été ajoutées pour permettre au code Rust d&#39;appeler libgit. Mais aucune partie de ce code Rust n&#39;était utilisée par les binaires de Git.</p><p>En novembre 2025, dans Git 2.52, le premier code de production Rust a été introduit dans Git. Une implémentation Rust du sous-système <code>varint</code> a alors été ajoutée. Ce code est compilé de manière facultative si le compilateur Rust est disponible ; dans le cas contraire, c&#39;est l&#39;implémentation C qui est utilisée. Il s&#39;agissait d&#39;un ballon d&#39;essai destiné aux distributeurs, afin qu&#39;ils commencent à préparer leurs outils en vue d&#39;une release de Git qui finirait par exiger Rust.</p><p>Plus tôt cette année, dans la release 2.54, davantage de code Rust a été ajouté au code source avec l&#39;introduction du type <code>ObjectID</code>. Celui-ci a été ajouté dans le cadre des efforts visant à mettre en œuvre une interopérabilité entre SHA-1 et SHA-256.</p><p>Jusqu&#39;à cette release, les deux systèmes de build Make et Meson revenaient gracieusement à l&#39;implémentation C si le compilateur Rust était introuvable. Avec cette release v2.55, le compilateur Rust est requis, sauf si vous le désactivez explicitement dans le système de build.</p><p>Veuillez noter que cela n&#39;affecte pas les utilisateurs de Git. Cela concerne uniquement ceux qui <em>effectuent un build</em> de Git à partir de son code source. Si vous effectuez un build de Git et que vous ne souhaitez pas utiliser Rust, désactivez-le avec l&#39;une de ces commandes :</p><pre className="language-shell shiki shiki-themes github-light" code="# Meson
meson configure -Drust=disabled

# Makefile
make NO_RUST=YesPlease
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="sAwPA"># Meson
</span></span><span class="line" line="2"><span class="s7eDp">meson</span><span class="sYBdl"> configure</span><span class="sYu0t"> -Drust=disabled
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span class="sAwPA"># Makefile
</span></span><span class="line" line="5"><span class="s7eDp">make</span><span class="sYBdl"> NO_RUST=YesPlease
</span></span></code></pre><p>L&#39;intégration de Rust dans Git est un effort continu (et inachevé) porté par la communauté, réparti sur plusieurs releases. Il est impossible de l&#39;attribuer à une seule personne, mais <a href="https://mastodon.social/@bk2204" rel="">brian m. carlson</a>, <a href="https://gitlab.com/pks-gitlab" rel="">Patrick Steinhardt</a>, <a href="https://github.com/ezekielnewren" rel="">Ezekiel Newren</a> et Calvin Wan figurent parmi les contributeurs les plus marquants.</p><h2 id="git-grep1-et-git-cherry1-plus-rapides-dans-les-clones-partiels">git-grep(1) et git-cherry(1) plus rapides dans les clones partiels</h2><p><a href="https://git-scm.com/docs/git-clone" rel="">git-clone(1)</a> dispose d&#39;une fonctionnalité de <a href="https://git-scm.com/docs/partial-clone" rel="">clone partiel</a>. Celle-ci permet à l&#39;utilisateur d&#39;appliquer un filtre aux éléments envoyés depuis le serveur. En pratique, c&#39;est l&#39;option <a href="https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---filterfilter-spec" rel=""><code>--filter</code></a>. Exemple :</p><pre className="language-shell shiki shiki-themes github-light" code="git clone --filter=blob:none &lt;remote&gt;
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">git</span><span class="sYBdl"> clone</span><span class="sYu0t"> --filter=blob:none</span><span class="sD7c4"> &lt;</span><span class="sYBdl">remot</span><span class="sgsFI">e</span><span class="sD7c4">&gt;
</span></span></code></pre><p>Le dépôt est cloné, mais tous les blobs (c&#39;est-à-dire le contenu des fichiers de l&#39;arborescence) sont exclus. Le clonage peut en être considérablement accéléré, mais avec un inconvénient : Git doit télécharger les blobs ultérieurement lorsque d&#39;autres commandes lisant le contenu des fichiers sont utilisées. Et certaines commandes peuvent nécessiter de nombreux blobs manquants.</p><p><a href="https://git-scm.com/docs/git-grep" rel="">git-grep(1)</a> est l&#39;une de ces commandes, car elle recherche dans le contenu des fichiers. Pour ce faire, elle doit évidemment disposer de ces fichiers. Imaginez que vous souhaitez rechercher le mot « TODO » 100 commits en arrière dans l&#39;historique :</p><pre className="language-shell shiki shiki-themes github-light" code="git grep TODO HEAD~100
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">git</span><span class="sYBdl"> grep</span><span class="sYBdl"> TODO</span><span class="sYBdl"> HEAD~100
</span></span></code></pre><p>Cette commande résout le commit <code>HEAD~100</code> ainsi que les arborescences qui lui sont associées. Mais ces arborescences peuvent pointer vers des blobs qui ne sont pas encore téléchargés. Auparavant, chaque blob était téléchargé séparément. Git 2.55 propose une amélioration : les téléchargements de blobs sont regroupés en un seul aller-retour de négociation avec le serveur.</p><p>Ce regroupement est désormais implémenté à la fois pour git-grep(1) et <a href="https://git-scm.com/docs/git-cherry" rel="">git-cherry(1)</a>.</p><p>Cette <a href="https://gitlab.com/git-scm/git/-/commit/6d2ba7ead7ab074bfd88e194bb75d6b384c44d4e" rel="">modification</a> a été <a href="https://lore.kernel.org/git/pull.2089.v3.git.1778775928.gitgitgadget@gmail.com/" rel="">soumise</a> par <a href="https://github.com/newren" rel="">Elijah Newren</a>.</p><h2 id="pour-en-savoir-plus">Pour en savoir plus</h2><p>Cet article n&#39;a mis en évidence que quelques-unes des contributions apportées par GitLab et la communauté Git pour cette dernière release. Vous pouvez en apprendre davantage dans l&#39;<a href="https://lore.kernel.org/git/xmqqv7b1w9vr.fsf@gitster.g/T/#u" rel="">annonce de release officielle</a> du projet Git. Consultez également nos <a href="https://about.gitlab.com/fr-fr/blog/tags/git/" rel="">articles de blog précédents sur les releases de Git</a> pour découvrir d&#39;autres contributions des membres de l&#39;équipe GitLab.</p><style>html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}</style>]]></content>
        <author>
            <name>Toon Claes</name>
            <uri>https://about.gitlab.com/fr-fr/blog/authors/toon-claes/</uri>
        </author>
        <published>2026-07-01T00:00:00.000Z</published>
    </entry>
</feed>