<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Blog Unlockers.ai</title><description>Ce que nous apprenons en rendant des équipes IA-first : retours de terrain, méthodes, chiffres.</description><link>https://unlockers.ai/blog</link><language>fr</language><atom:link href="https://unlockers.ai/blog/rss.xml" rel="self" type="application/rss+xml"/><item><title>Un projet vibe codé de 10 000 lignes, entièrement refactoré en 1 h 45 avec un seul prompt</title><link>https://unlockers.ai/blog/refactorer-9580-lignes-vibe-codees-en-un-prompt</link><guid isPermaLink="true">https://unlockers.ai/blog/refactorer-9580-lignes-vibe-codees-en-un-prompt</guid><description>Comment un prompt de quinze minutes a mis un projet sans tests sous le plus haut contrôle qualité : un objectif que l&apos;agent vérifie lui-même, la couverture d&apos;abord, un cliquet contre les raccourcis.</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;figure&gt;
  &lt;img src=&quot;https://unlockers.ai/blog/refactorer-9580-lignes-vibe-codees-en-un-prompt/avant-apres-fr.png&quot; alt=&quot;À gauche, un seul gros fichier de 2 065 lignes dans un projet de 14 fichiers et 9 580 lignes. À droite, 156 fichiers rangés par responsabilité, le plus gros faisant 379 lignes. En dessous, cinq indicateurs avant et après : 680 tests, 99 % des lignes couvertes, 99 % des mutants tués, 0 violation, Code Health de 6,0 à 9,8.&quot; /&gt;
  &lt;figcaption&gt;Avant et après un prompt de quinze minutes et 1 h 45 de travail autonome de l&apos;agent.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;J’ai un projet Java en ligne de commande, vibe codé : 14 fichiers, 9 580 lignes, aucun test, un fichier de 2 065 lignes et environ 870 violations des règles d’analyse statique. Je lui ai donné un prompt écrit en quinze minutes. L’agent a travaillé seul pendant 1 h 45, de 00 h 42 à 02 h 27. Le projet compte maintenant 156 fichiers, le plus gros faisant 379 lignes, 680 tests, 99 % de lignes couvertes, et il passe une commande unique, &lt;code&gt;./verify&lt;/code&gt;, qui enchaîne huit contrôles automatiques.&lt;/p&gt;
&lt;p&gt;Avant de lancer l’agent, j’étais certain de deux choses : rien ne serait cassé, et le résultat irait là où je voulais. Cet article explique d’où venait cette certitude.&lt;/p&gt;
&lt;aside class=&quot;tldr&quot;&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; J&apos;ai donné à l&apos;agent un objectif qu&apos;il peut vérifier lui-même (une commande qui doit passer au vert) et un processus sûr (les tests d&apos;abord, le refactoring ensuite). Avec ça, il converge sans rien casser et reste libre de choisir son implémentation. La même approche vaut pour n&apos;importe quelle évolution dans du legacy : c&apos;est l&apos;idée de la skill 3P, présentée plus bas.&lt;/aside&gt;
&lt;h2 id=&quot;le-point-de-départ--14-fichiers-9-580-lignes-aucun-test&quot;&gt;Le point de départ : 14 fichiers, 9 580 lignes, aucun test&lt;/h2&gt;
&lt;p&gt;Le projet audite l’activité de dépôts GitLab en s’appuyant sur des données SonarQube. Il fonctionne, mais tout tient dans quelques gros fichiers, dont &lt;code&gt;GitlabActivityAudit&lt;/code&gt; qui fait 2 065 lignes, et rien ne vérifie qu’une modification n’abîme pas autre chose. Les outils d’analyse statique relevaient environ 870 violations.&lt;/p&gt;
&lt;h2 id=&quot;ce-que-jai-demandé--une-commande-qui-doit-passer-au-vert&quot;&gt;Ce que j’ai demandé : une commande qui doit passer au vert&lt;/h2&gt;
&lt;p&gt;Le prompt décrit avant tout un état final : la commande &lt;code&gt;./verify&lt;/code&gt; doit passer entièrement au vert. Elle enchaîne Spotless pour le formatage, Checkstyle, Error Prone avec NullAway, PMD, les tests avec un seuil de couverture de 90 % des lignes et 85 % des branches, et un cliquet que je décris plus bas. L’option &lt;code&gt;--full&lt;/code&gt; ajoute CPD pour le code dupliqué et PIT, un test de mutation, avec un seuil de 85 %.&lt;/p&gt;
&lt;p&gt;Voici le prompt, raccourci pour la lecture (l’original est plus long) :&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Couvre le projet avec des tests qui permettent un gros refactoring.&lt;/li&gt;
&lt;li&gt;Utilise le test de mutation pour vérifier cette couverture.&lt;/li&gt;
&lt;li&gt;Lance &lt;code&gt;./verify&lt;/code&gt; pour faire ressortir toutes les violations.&lt;/li&gt;
&lt;li&gt;Corrige-les dans l’ordre que tu juges le plus pertinent.&lt;/li&gt;
&lt;li&gt;Installe &lt;code&gt;./verify&lt;/code&gt; en hooks git et valide qu’ils fonctionnent.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sauvegarde dans &lt;code&gt;QUALITY_LOG.md&lt;/code&gt; tout choix douteux que tu dois faire pour passer les vérifications. Fournis des preuves : couverture avant, couverture après, diff éventuel sur les règles, rapport de &lt;code&gt;./verify&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;L’ordre compte : la couverture d’abord, la structure ensuite. Le journal &lt;code&gt;QUALITY_LOG.md&lt;/code&gt; permet à l’agent de me signaler ses choix discutables, j’y reviens plus bas. Quant aux preuves demandées en fin de prompt, elles tiennent sur une page et me suffisent pour relire : le diff sur les règles me montre tout de suite si l’agent a desserré un contrôle.&lt;/p&gt;
&lt;h2 id=&quot;ce-qui-est-sorti-de-la-nuit&quot;&gt;Ce qui est sorti de la nuit&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Avant&lt;/th&gt;
&lt;th&gt;Après&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fichiers&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;156 (le plus gros : 379 lignes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tests&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;680&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lignes couvertes&lt;/td&gt;
&lt;td&gt;0 %&lt;/td&gt;
&lt;td&gt;99 % (97 % des branches)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mutants tués (PIT)&lt;/td&gt;
&lt;td&gt;non mesuré&lt;/td&gt;
&lt;td&gt;99 % (3 392 sur 3 433)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Violations d’analyse statique&lt;/td&gt;
&lt;td&gt;environ 870&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Health (CodeScene)&lt;/td&gt;
&lt;td&gt;6,0&lt;/td&gt;
&lt;td&gt;9,8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;L’agent a aussi relevé une vingtaine de comportements qui ressemblent à des bugs. Je ne voulais pas qu’il les corrige pendant un refactoring. Il les a documentés et épinglés par des tests nommés, le comportement reste inchangé, et je décide plus tard.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-jétais-sûr-de-ne-rien-casser&quot;&gt;Pourquoi j’étais sûr de ne rien casser&lt;/h2&gt;
&lt;p&gt;Le refactoring ne commence qu’une fois le comportement protégé. Les tests écrits en premier sont des tests de caractérisation : ils lancent l’outil de bout en bout contre de faux serveurs GitLab et SonarQube, et comparent sa sortie à des instantanés (avec la bibliothèque Selfie). Si le refactoring change une ligne de ce que l’outil produit, un instantané casse.&lt;/p&gt;
&lt;p&gt;Une couverture de 99 % ne prouve pas que ces tests vérifient quelque chose : une ligne exécutée n’est pas une ligne contrôlée. C’est le rôle du test de mutation. PIT modifie le code par petites touches (un &lt;code&gt;&amp;gt;&lt;/code&gt; devient &lt;code&gt;&amp;gt;=&lt;/code&gt;, un &lt;code&gt;return&lt;/code&gt; est supprimé) et vérifie qu’au moins un test échoue. Sur 3 433 mutations, 3 392 ont été détectées. Le filet de sécurité a donc été éprouvé avant le premier refactoring.&lt;/p&gt;
&lt;p&gt;C’est la méthode que j’appelle 3P et que j’ai mise dans une &lt;a href=&quot;https://github.com/unlockers-ai/unlockers-skills-library/tree/main/skills/legacy-3p&quot;&gt;skill&lt;/a&gt; : Protéger le comportement existant avec des tests rapides et sales, vérifier le filet en cassant volontairement quelque chose de petit, Préparer le terrain par un refactoring qui ne change aucun comportement, puis Produire la fonctionnalité en TDD. Ici, je n’ai utilisé que les deux premières étapes. Mais rien n’empêche de s’en servir pour ajouter une fonctionnalité dans n’importe quel code legacy, de la même façon : la protection d’abord, la nouveauté ensuite.&lt;/p&gt;
&lt;h2 id=&quot;pourquoi-lagent-allait-là-où-je-voulais&quot;&gt;Pourquoi l’agent allait là où je voulais&lt;/h2&gt;
&lt;p&gt;L’objectif est évaluable par l’agent lui-même. Il n’a pas besoin de moi pour savoir où il en est : il lance &lt;code&gt;./verify&lt;/code&gt;, lit ce qui échoue, corrige, recommence. Je n’ai décrit aucune structure cible. Le découpage en 156 fichiers, avec des paquets comme &lt;code&gt;matching&lt;/code&gt;, &lt;code&gt;sonar&lt;/code&gt;, &lt;code&gt;gitlab&lt;/code&gt;, &lt;code&gt;csv&lt;/code&gt;, &lt;code&gt;console&lt;/code&gt;, &lt;code&gt;naming&lt;/code&gt;, &lt;code&gt;parallel&lt;/code&gt; ou &lt;code&gt;exclusions&lt;/code&gt;, vient de l’agent. Ce que j’ai fixé, ce sont les seuils : ceux de Checkstyle et de PMD, la couverture, la mutation.&lt;/p&gt;
&lt;p&gt;Chaque itération rapproche de l’état final ou fait échouer un test, et l’agent choisit librement le chemin.&lt;/p&gt;
&lt;h2 id=&quot;le-cliquet--les-problèmes-existants-restent-aucun-nouveau-nentre&quot;&gt;Le cliquet : les problèmes existants restent, aucun nouveau n’entre&lt;/h2&gt;
&lt;p&gt;Un objectif mesurable a une faille : l’agent peut passer au vert en desserrant la mesure, en baissant un seuil de couverture, en ajoutant un &lt;code&gt;@SuppressWarnings&lt;/code&gt; ou en désactivant un test. Le cliquet ferme cette porte. Son nom vient de la clé à cliquet, qui ne tourne que dans un sens. La règle tient en une phrase : les problèmes existants peuvent rester, aucun nouveau n’est admis, et personne ne desserre un contrôle discrètement.&lt;/p&gt;
&lt;p&gt;Concrètement, un petit outil compare l’arbre de travail à une référence git. Un seuil minimum ne peut pas baisser, un seuil maximum ne peut pas monter, un contrôle ne peut pas disparaître. Le nombre de marqueurs de suppression (&lt;code&gt;@SuppressWarnings&lt;/code&gt;, &lt;code&gt;NOPMD&lt;/code&gt;, &lt;code&gt;CHECKSTYLE:OFF&lt;/code&gt;, &lt;code&gt;@Disabled&lt;/code&gt;) ne peut pas augmenter. Une règle Error Prone passée en désactivée ou en simple avertissement est détectée. Un commit qui porte une ligne &lt;code&gt;Ratchet-Override:&lt;/code&gt; transforme l’échec en avertissement : la dérogation reste possible, mais c’est une décision humaine, visible dans l’historique.&lt;/p&gt;
&lt;p&gt;Pendant la nuit, le cliquet a refusé trois nouveaux &lt;code&gt;@SuppressWarnings&lt;/code&gt; que l’agent avait ajoutés.&lt;/p&gt;
&lt;h2 id=&quot;le-journal-de-qualité--lagent-signale-ses-choix-discutables&quot;&gt;Le journal de qualité : l’agent signale ses choix discutables&lt;/h2&gt;
&lt;p&gt;Un agent qui travaille seul pendant 1 h 45 prend beaucoup de décisions que je ne verrai pas. La section du prompt sur &lt;code&gt;QUALITY_LOG.md&lt;/code&gt; lui demande de les consigner quand elles sont discutables : un compromis, un raccourci, un endroit où il n’était pas sûr. Je lis ce journal à la place de 156 fichiers.&lt;/p&gt;
&lt;p&gt;Le journal a servi une deuxième fois. J’ai lancé sur le résultat une revue automatisée (CodeScene, un agent « clean coder », un agent « architecte » et une expérience de changement de comportement) et j’ai confronté ses constats au journal. L’écart entre les deux m’a donné de nouvelles règles de design : un fichier &lt;code&gt;ARCHITECTURE.md&lt;/code&gt; et des tests ArchUnit qui imposent des couches, l’isolation entre les tranches du code, l’absence de cycle entre paquets, et une seule classe publique, celle de la commande. Ce sont des tests, donc ils tournent dans &lt;code&gt;./verify&lt;/code&gt; comme le reste. Cette deuxième vague mérite son propre billet.&lt;/p&gt;
&lt;h2 id=&quot;ce-que-cette-certitude-ne-couvre-pas&quot;&gt;Ce que cette certitude ne couvre pas&lt;/h2&gt;
&lt;p&gt;Les tests figent le comportement tel que mes faux serveurs le simulent. Sur 3 433 mutants, 41 ont survécu. Et la vingtaine de bugs suspects est toujours là, volontairement. Le cadre garantit que le comportement observé par les tests ne change pas. Il ne garantit pas que le programme est juste.&lt;/p&gt;
&lt;h2 id=&quot;ils-appliquent-la-même-recette&quot;&gt;Ils appliquent la même recette&lt;/h2&gt;
&lt;p&gt;Je ne suis pas le seul à observer ça. Ces retours publiés suivent la même recette : un objectif que l’agent vérifie lui-même, et des règles qu’il ne peut pas contourner.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/engineering/building-c-compiler&quot;&gt;Anthropic&lt;/a&gt; : un compilateur C de 100 000 lignes écrit par 16 agents, guidés par des suites de tests existantes. Le vérificateur doit être presque parfait, sinon l’agent résout le mauvais problème.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/index/harness-engineering/&quot;&gt;OpenAI&lt;/a&gt; : un million de lignes en cinq mois par trois ingénieurs, bornées par des règles mécaniques.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://claude.com/customers/rakuten&quot;&gt;Rakuten&lt;/a&gt; : sept heures d’autonomie sur vLLM, 99,9 % de précision numérique face à la référence.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.infoq.com/news/2026/03/stripe-autonomous-coding-agents/&quot;&gt;Stripe&lt;/a&gt; (via InfoQ) : plus de 1 300 pull requests par semaine, avec lint et tests déterministes et deux tours d’intégration continue au plus.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.infoq.com/news/2025/03/airbnb-llm-test-migration/&quot;&gt;Airbnb&lt;/a&gt; (via InfoQ) : 3 500 fichiers de tests migrés en six semaines au lieu de 18 mois.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2501.12862&quot;&gt;Meta&lt;/a&gt; : 49 % des tests générés à partir de mutants n’ajoutent aucune couverture de lignes, d’où l’intérêt du test de mutation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;quel-lot-de-travail-devient-raisonnable-maintenant-&quot;&gt;Quel lot de travail devient raisonnable maintenant ?&lt;/h2&gt;
&lt;p&gt;Transformer 10 000 lignes sans test en code testé, découpé et contrôlé demandait des semaines d’une équipe, et on ne le faisait pas. Ça a pris quinze minutes de prompt et 1 h 45 d’attente. Les lois physiques du développement logiciel ont changé, et notre idée de ce qui vaut la peine d’être tenté n’a pas suivi.&lt;/p&gt;
&lt;p&gt;Dans votre backlog, cherchez les chantiers dont on sait décrire l’état final de façon vérifiable : tous les tests de la nouvelle version au vert, un module couvert à 90 %, plus aucune violation. Les migrations, les montées de version, la couverture d’un module legacy et la mise en conformité d’un code ancien entrent souvent dans cette catégorie. Demain, que pourriez-vous faire de votre backlog avec cette approche ?&lt;/p&gt;
&lt;h2 id=&quot;pour-aller-plus-loin&quot;&gt;Pour aller plus loin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;La skill &lt;a href=&quot;https://github.com/unlockers-ai/unlockers-skills-library/tree/main/skills/legacy-3p&quot;&gt;legacy-3p&lt;/a&gt; : Protéger, Préparer, Produire.&lt;/li&gt;
&lt;li&gt;Dans la même série : &lt;a href=&quot;https://unlockers.ai/blog/relire-des-pr-faites-par-l-ia&quot;&gt;Relire des PR faites par l’IA&lt;/a&gt;, &lt;a href=&quot;https://unlockers.ai/blog/pourquoi-on-ne-delegue-pas-la-revue-de-code&quot;&gt;Pourquoi on ne délègue pas la revue de code&lt;/a&gt; et &lt;a href=&quot;https://unlockers.ai/blog/deleguer-la-revue-de-code-aux-agents&quot;&gt;Comment déléguer la revue de code à des agents&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Johan Martinsson&lt;/p&gt;
</content:encoded><dc:creator>Johan Martinsson</dc:creator></item><item><title>Comment déléguer la revue de code à des agents</title><link>https://unlockers.ai/blog/deleguer-la-revue-de-code-aux-agents</link><guid isPermaLink="true">https://unlockers.ai/blog/deleguer-la-revue-de-code-aux-agents</guid><description>Comment nourrir un reviewer IA, le tester sur des PR passées, et décider quand un humain doit regarder.</description><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;figure&gt;
  &lt;img src=&quot;https://unlockers.ai/blog/deleguer-la-revue-de-code-aux-agents/micromanager-vs-deleguer.png&quot; alt=&quot;À gauche, un humain relit les sorties de huit agents une par une. À droite, il donne tout ce qu&apos;il sait à une équipe de reviewers et de correcteurs, qui produit du code mergé, et il observe la qualité à distance.&quot; /&gt;
  &lt;figcaption&gt;Relire chaque ligne ou déléguer à une équipe de reviewers et de correcteurs, et surveiller la qualité du processus.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Imaginez un CTO dont l’équipe de développeurs grossit chaque jour et qui compte relire lui-même chaque ligne de code pour garder le contrôle. Personne ne croirait que ça tiendra encore demain. C’est pourtant ce que font beaucoup d’équipes avec les agents : ils produisent de plus en plus de code, et les humains relisent tout.&lt;/p&gt;
&lt;p&gt;Je pense que notre rôle ne peut plus être de relire chaque ligne. Dans le &lt;a href=&quot;https://unlockers.ai/blog/relire-des-pr-faites-par-l-ia&quot;&gt;premier article&lt;/a&gt;, je décrivais ce déséquilibre. Dans le &lt;a href=&quot;https://unlockers.ai/blog/pourquoi-on-ne-delegue-pas-la-revue-de-code&quot;&gt;deuxième&lt;/a&gt;, j’ai regardé ce qui nous empêche de déléguer la revue. Celui-ci porte sur la suite : comment s’y prendre concrètement.&lt;/p&gt;
&lt;aside class=&quot;tldr&quot;&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; On peut déléguer la revue à des agents, à condition de les nourrir avec la matière du projet et de les tester sur des PR passées. Une PR sans bug peut être mergée, et le regard humain se déplace vers le design. Pressé ? Allez directement à &lt;a href=&quot;https://unlockers.ai/blog/deleguer-la-revue-de-code-aux-agents#design-plus-tard&quot;&gt;la section sur le design&lt;/a&gt;.&lt;/aside&gt;
&lt;h2 id=&quot;déléguer-cest-donner-le-contexte&quot;&gt;Déléguer, c’est donner le contexte&lt;/h2&gt;
&lt;p&gt;Déléguer la revue est un vrai acte de délégation, comme avec un collègue : il faut donner à l’agent ce dont il a besoin pour réussir.&lt;/p&gt;
&lt;p&gt;L’agent part avec une connaissance générale solide. Il a probablement lu dans son entraînement la plupart des livres sur le bon design, l’architecture, la sécurité, la lisibilité et les code smells. Cette connaissance existe, il faut aller la chercher avec les bonnes questions. Ce qu’il ne peut pas deviner, c’est votre projet, votre contexte, les goûts de votre équipe.&lt;/p&gt;
&lt;h2 id=&quot;où-trouver-la-matière-dun-code-reviewer&quot;&gt;Où trouver la matière d’un code reviewer&lt;/h2&gt;
&lt;p&gt;Trois techniques se complètent :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Les PR du passé.&lt;/strong&gt; On laisse l’agent parcourir toutes les anciennes PR, leurs commentaires et leurs instructions, et en tirer des règles applicables, avec des exemples. Les humains de l’équipe y ont déjà écrit ce qui compte pour eux.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vous-même.&lt;/strong&gt; On s’assoit et on transcrit tout ce qui est important, avec ses priorités. Ce que l’on sait du projet n’est souvent écrit nulle part, et l’agent ne le trouvera pas seul.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les revues en cours.&lt;/strong&gt; À chaque revue, on voit ce que l’agent n’a pas vu, ce qu’il lui manque. On le verse dans sa base de connaissances.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;tester-automatiquement-un-reviewer&quot;&gt;Tester automatiquement un reviewer&lt;/h2&gt;
&lt;p&gt;Tester un prompt, c’est prendre un cas, le faire jouer, et analyser le résultat. Pour un reviewer, le cas existe déjà dans l’historique.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le faire tourner sur des PR du passé.&lt;/strong&gt; On choisit d’anciennes PR qui ont été relues en profondeur et on rejoue le reviewer dessus. Retrouve-t-il au minimum ce qui avait été relevé à l’époque ? Ce score se chiffre, c’est ce qu’on appelle une récompense vérifiable, et c’est ce qui rend l’évaluation simple. On regarde aussi ce qu’il trouve en plus et ce qu’il rate, et on juge la pertinence des constats supplémentaires. On peut aller plus loin et laisser un agent adapter le prompt pour se corriger sur ces cas. Ces PR deviennent une base de test pour améliorer le reviewer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le faire tourner en parallèle de l’humain.&lt;/strong&gt; Pendant un temps, l’humain et l’agent relisent les mêmes PR, et on ajoute au reviewer ce qui lui manque.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Continuer les revues manuelles jusqu’à ce qu’elles n’apportent plus rien.&lt;/strong&gt; C’est une façon de se rassurer qu’on n’a plus grand-chose à dire. La limite : quand le niveau monte, on remarque d’autres détails, et on peut en trouver sans fin.&lt;/p&gt;
&lt;h2 id=&quot;plusieurs-reviewers-spécialisés-qui-saccordent-et-un-correcteur-en-boucle&quot;&gt;Plusieurs reviewers spécialisés qui s’accordent, et un correcteur en boucle&lt;/h2&gt;
&lt;p&gt;Pour une revue plus poussée, j’ai découpé mon reviewer unique en plusieurs reviewers spécialisés, chacun avec son angle (complexité, tests, architecture, sécurité, etc.), coordonnés par un agent principal. Le balayage devient beaucoup plus profond. J’ai également dû l’instruire de regarder au-delà du git diff : le contexte, la méthode, le fichier complet. Il lui faut aussi des instructions assez strictes pour ne pas s’arrêter après quelques trouvailles, mais chercher absolument tout.&lt;/p&gt;
&lt;p&gt;Ensuite, j’ai introduit un correcteur qui tourne en boucle avec les reviewers jusqu’à atteindre un niveau de qualité élevé. Les reviewers voient le travail des autres et s’accordent, par l’intermédiaire de l’agent principal, sur ce qu’il faut corriger. Cette mise en boucle pose quelques problèmes d’implémentation, et je ferai probablement un billet sur cette expérience.&lt;/p&gt;
&lt;p&gt;Dans ma bibliothèque, tout part de &lt;a href=&quot;https://github.com/unlockers-ai/unlockers-skills-library/blob/main/skills/review-all/SKILL.md&quot;&gt;&lt;code&gt;review-all&lt;/code&gt;&lt;/a&gt;, l’orchestrateur. Il ne relit rien lui-même : il fige le commit, lance en parallèle cinq reviewers (complexité, tests, architecture, sécurité, slop), puis publie leur synthèse sur la PR, avec un commentaire et un statut par reviewer. Tous suivent le même protocole : chaque constat est classé Critical, Major ou Minor, avec son fichier et sa ligne. S’il y a des choses à corriger, les mêmes reviewers valident le plan de correction puis vérifient le résultat, sans refaire de revue complète. Ensuite, le merge se fait automatiquement si la CI passe.&lt;/p&gt;
&lt;p&gt;Si vous voulez partir de quelque chose qui fonctionne, vous pouvez vous servir dans l’&lt;a href=&quot;https://github.com/unlockers-ai/unlockers-skills-library/blob/main/skills/review-all/SKILL.md&quot;&gt;Unlockers Skills Library&lt;/a&gt;, en open source. Pour essayer, demandez à votre propre agent de lire ce jeu de skills et de l’appliquer à l’une de vos PR.&lt;/p&gt;
&lt;h2 id=&quot;un-score-de-risque-pour-décider-où-un-humain-doit-regarder&quot;&gt;Un score de risque pour décider où un humain doit regarder&lt;/h2&gt;
&lt;p&gt;Autre technique : faire donner un score de risque à la revue, puis laisser un approbateur décider s’il faut faire appel à un humain. Ce mécanisme de score n’est pas encore publié dans ma bibliothèque.&lt;/p&gt;
&lt;p&gt;Reste à savoir comment scorer. Plutôt qu’une note numérique, je conseille trois ou quatre niveaux, par exemple mineur, majeur, critique. C’est plus fiable avec un LLM, et c’est déjà le vocabulaire que les humains utilisent en réunion pour classer les problèmes. Plusieurs scores peuvent s’agréger pour donner une image d’ensemble.&lt;/p&gt;
&lt;p&gt;Pour détecter les erreurs du scoring lui-même, un humain relit en plus quelques PR tirées au hasard, trois par exemple.&lt;/p&gt;
&lt;p&gt;&lt;a id=&quot;design-plus-tard&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;une-pr-sans-bug-peut-être-mergée-le-design-se-revoit-plus-tard&quot;&gt;Une PR sans bug peut être mergée, le design se revoit plus tard&lt;/h2&gt;
&lt;p&gt;Dans un projet comme le noyau Linux, seuls les mainteneurs qui connaissent le projet peuvent merger. À mon avis, cela répondait à deux besoins : éviter les bugs et les incohérences, et garantir que les détails importants du projet soient connus de celui qui décide.&lt;/p&gt;
&lt;p&gt;Ces deux besoins sont aujourd’hui couverts autrement :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;La correction fonctionnelle&lt;/strong&gt; se règle en amont. Sur certains projets, il est devenu facile d’atteindre une couverture de tests quasi totale, protégée par du mutation testing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La connaissance du projet&lt;/strong&gt; se fournit aux agents. Un reviewer qui la possède dépasse de très loin ce qu’un humain peut tenir en tête.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Une PR qui passe ces deux filtres n’a probablement pas de bug, donc elle peut être mergée. Ce qu’un regard humain apporte encore, c’est le design : l’architecture, les mauvais patterns, un code qui devient sloppy. Le benchmark &lt;a href=&quot;https://arxiv.org/abs/2603.24755&quot;&gt;SlopCodeBench&lt;/a&gt; fait étendre leur propre code à 15 agents, itération après itération : l’érosion structurelle augmente dans 77 % des trajectoires, et leur code est 2,3 fois plus verbeux que celui de 473 dépôts open source. Il n’est pas forcément représentatif, car ces agents n’y disposent d’aucun harnais de qualité. Dans tous les cas, la PR n’est pas toujours le bon endroit pour le traiter. Corriger une dérive détectée peut transformer un petit incrément de fonctionnalité en refactoring global de la base de code.&lt;/p&gt;
&lt;p&gt;Cette revue de design peut donc se faire en décalé, sur plusieurs PR, en regardant les évolutions récentes. J’ai un agent qui fait ce genre de revue à plus long terme : il relève les mauvaises odeurs, les problèmes apparus dernièrement et les refactorings opportunistes à faire au vu du travail réalisé.&lt;/p&gt;
&lt;p&gt;Un ami a tenté l’expérience : la revue ne bloque plus le merge. Les développeurs ont dû se demander comment obtenir la qualité autrement, ce qui a fait appel à leur créativité.&lt;/p&gt;
&lt;p&gt;Mon avis : le rôle des humains reste important, mais il ne se joue plus principalement dans une PR.&lt;/p&gt;
&lt;h2 id=&quot;le-coût-du-refactoring-est-devenu-très-faible&quot;&gt;Le coût du refactoring est devenu très faible&lt;/h2&gt;
&lt;p&gt;Il y a aussi une raison économique. Avant, laisser entrer un code peu propre coûtait cher : sans tests complets, on ne pouvait pas le refactorer en sécurité, donc il fallait le bloquer à l’entrée. Avec les tests en place, changer une implémentation ne coûte presque rien.&lt;/p&gt;
&lt;p&gt;L’autre jour, j’ai pris une base de code de 9 580 lignes, entièrement vibe-codée et sans aucun test. En un seul prompt et 1 h 45 de travail autonome de l’agent, je l’ai fait couvrir par des tests, découper en modules et nettoyer de tous les mauvais patterns que les outils automatiques détectent (&lt;a href=&quot;https://unlockers.ai/blog/refactorer-9580-lignes-vibe-codees-en-un-prompt&quot;&gt;le détail&lt;/a&gt;). S’accrocher par réflexe aux anciennes règles de revue n’a plus de justification.&lt;/p&gt;
&lt;h2 id=&quot;pour-aller-plus-loin&quot;&gt;Pour aller plus loin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/unlockers-ai/unlockers-skills-library&quot;&gt;Unlockers Skills Library&lt;/a&gt; : mes agents et skills de revue, avec leur &lt;a href=&quot;https://github.com/unlockers-ai/unlockers-skills-library/blob/main/docs/review-protocol.md&quot;&gt;protocole commun&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Johan Martinsson&lt;/p&gt;
</content:encoded><dc:creator>Johan Martinsson</dc:creator></item><item><title>Pourquoi on ne délègue pas la revue de code à l&apos;IA</title><link>https://unlockers.ai/blog/pourquoi-on-ne-delegue-pas-la-revue-de-code</link><guid isPermaLink="true">https://unlockers.ai/blog/pourquoi-on-ne-delegue-pas-la-revue-de-code</guid><description>Les agents écrivent le code et les humains relisent tout. Cinq raisons, surtout psychologiques, qui nous empêchent de commencer à déléguer la revue.</description><pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;figure&gt;
  &lt;img src=&quot;https://unlockers.ai/blog/pourquoi-on-ne-delegue-pas-la-revue-de-code/camion-faille-critique.png&quot; alt=&quot;Un développeur, casque sur les oreilles et café à la main, assis au milieu de la route face à un camion « Critical flaw » : « I told my agent to handle the review. »&quot; /&gt;
  &lt;figcaption&gt;Confier la revue à un agent et ne plus regarder la route : la faille critique arrive quand même.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p class=&quot;lead-quote&quot;&gt;« Une revue de code faite par l&apos;IA, ce n&apos;est pas fiable. Du coup, je la fais à la main. »&lt;/p&gt;
&lt;p&gt;Ce raisonnement tient en deux phrases et il paraît solide. Dans le &lt;a href=&quot;https://unlockers.ai/blog/relire-des-pr-faites-par-l-ia&quot;&gt;billet précédent&lt;/a&gt;, j’ai décrit ce qu’il produit : des agents qui écrivent beaucoup de code, des humains qui relisent tout, et beaucoup de monde qui le vit mal. Cette fois, je cherche ce qui nous empêche d’en déléguer ne serait-ce qu’une partie. Je vois cinq freins.&lt;/p&gt;
&lt;aside class=&quot;tldr&quot;&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Cinq freins : la peur de l&apos;erreur qui passe inaperçue, la confusion entre déléguer et réussir à 100 %, une revue qu&apos;on n&apos;a jamais explicitée, des LLM en dents de scie, et une délégation qui doit forcément passer par l&apos;écrit.&lt;/aside&gt;
&lt;h2 id=&quot;1-la-peur-de-lerreur-quon-ne-verra-pas&quot;&gt;1. La peur de l’erreur qu’on ne verra pas&lt;/h2&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://unlockers.ai/blog/pourquoi-on-ne-delegue-pas-la-revue-de-code/agent-approuve-bombe.png&quot; alt=&quot;Un agent de revue approuve une PR « new payment flow », tous les contrôles au vert, alors qu&apos;une bombe à retardement est cachée dans le diff&quot; /&gt;
  &lt;figcaption&gt;La peur n° 1 : tout est au vert, l&apos;agent approuve, et l&apos;erreur grave passe sans bruit.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Ce qui fait peur, ce sont les erreurs graves que l’agent pourrait laisser passer : une faille de sécurité, un bug grave, qui traverse la revue sans bruit et qu’on découvre des semaines plus tard en production. Quand la PR est relue par mes collègues, je connais leurs forces et leurs angles morts. Avec un agent, je ne sais pas quand je m’en rendrai compte, ni combien ça me coûtera à ce moment-là.&lt;/p&gt;
&lt;p&gt;Pour beaucoup, cette peur a une origine précise. On a essayé une fois, l’agent a raté quelque chose d’évident, et on n’a pas recommencé. Une erreur a suffi. Et on se dit que la prochaine, on ne la verra peut-être pas.&lt;/p&gt;
&lt;h2 id=&quot;2-on-confond-déléguer-et-réussir-à-100-&quot;&gt;2. On confond déléguer et réussir à 100 %&lt;/h2&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://unlockers.ai/blog/pourquoi-on-ne-delegue-pas-la-revue-de-code/revue-manuelle-vs-automatisee.png&quot; alt=&quot;Croquis : la qualité de la revue manuelle plafonne, la revue automatisée part plus bas mais continue de progresser et finit par la dépasser&quot; /&gt;
  &lt;figcaption&gt;La revue manuelle plafonne ; une revue automatisée part plus bas mais continue de progresser. Croquis illustratif, pas des mesures.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Si l’agent valide tout, il faut qu’il ait raison tout le temps. Comme il n’y arrivera pas, on ne commence pas. Ce raisonnement saute une étape : déléguer partiellement ne demande pas d’atteindre 100 %. On peut laisser l’agent faire la revue, corrections comprises, et repasser derrière lui jusqu’à avoir assez confiance. On peut aussi essayer plusieurs variantes de revue sur des PR déjà relues, et ne garder que celles qui tiennent la route. J’y reviens dans le prochain billet.&lt;/p&gt;
&lt;p&gt;La recherche DORA sur la performance des équipes de livraison logicielle va dans ce sens. Dans le rapport &lt;a href=&quot;https://services.google.com/fh/files/misc/state-of-devops-2019.pdf&quot;&gt;Accelerate State of DevOps 2019&lt;/a&gt;, les organisations qui imposaient un processus d’approbation formel et lourd avaient 2,6 fois plus de chances d’être parmi les moins performantes. Le rapport ne dit pas pourquoi. Mon interprétation : un contrôle manuel plafonne, alors qu’un contrôle automatisé s’améliore à chaque règle qu’on lui ajoute. C’est pareil pour la revue : commencer à déléguer, même mal, c’est se donner quelque chose à améliorer.&lt;/p&gt;
&lt;h2 id=&quot;3-on-na-jamais-explicité-comment-on-relit&quot;&gt;3. On n’a jamais explicité comment on relit&lt;/h2&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://unlockers.ai/blog/pourquoi-on-ne-delegue-pas-la-revue-de-code/intuition-vers-regles-ecrites.png&quot; alt=&quot;De l&apos;intuition (« gut feeling », « it depends », « smells off ») à une liste de règles de revue écrites, exécutables par un agent&quot; /&gt;
  &lt;figcaption&gt;Expliciter sa revue : passer de l&apos;intuition à des règles écrites, qu&apos;un agent peut exécuter.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Quand on relit une PR, on le fait à l’intuition. Si on se demande ce qui compte vraiment pour nous et ce qu’on regarde en premier, la réponse ne vient pas tout de suite. Et d’une PR à l’autre, on ne relit pas tout à fait de la même façon. C’est souple : on relit une PR critique autrement qu’un renommage. Mais c’est aussi irrégulier, et une machine qui suit des règles écrites ne l’est pas.&lt;/p&gt;
&lt;p&gt;Il y a au moins un indice que ça aide. Dans un &lt;a href=&quot;https://arxiv.org/abs/2607.02389&quot;&gt;papier présenté à un atelier de l’ICML 2026&lt;/a&gt;, un petit modèle relecteur inspecte une base de code Python contenant 11 backdoors insérées. Sans contrainte ni outil, il en retrouve 54,5 %. Avec des contraintes imposées par l’outillage sur le code et un petit outil de documentation, il monte à 90,9 %. C’est un petit jeu de données synthétique, mais le résultat est net : le relecteur trouve mieux quand on lui dit quoi vérifier.&lt;/p&gt;
&lt;h2 id=&quot;4-les-llm-sont-en-dents-de-scie&quot;&gt;4. Les LLM sont en dents de scie&lt;/h2&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://unlockers.ai/blog/pourquoi-on-ne-delegue-pas-la-revue-de-code/agent-content-faille-ignoree.png&quot; alt=&quot;Un agent ravi brandit « naming » et « unused import » en annonçant « Review done! », à côté d&apos;un mur éventré marqué « Critical flaw »&quot; /&gt;
  &lt;figcaption&gt;L&apos;intelligence en dents de scie : l&apos;agent excelle sur les détails et passe à côté de l&apos;essentiel.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Les LLM sont excellents sur certaines tâches et complètement à côté sur d’autres, et on ne sait pas encore sentir à l’avance lequel des deux on va avoir. Andrej Karpathy appelle ça la &lt;em&gt;jagged intelligence&lt;/em&gt;, à partir de modèles qui résolvent des problèmes difficiles mais se trompent pour savoir si 9,11 est plus grand que 9,9 (&lt;a href=&quot;https://x.com/karpathy/status/1816531576228053133&quot;&gt;son message d’origine&lt;/a&gt;). Une étude de Harvard, Wharton et BCG parlait déjà de « frontière technologique en dents de scie », et Ethan Mollick l’a vulgarisée dans &lt;a href=&quot;https://www.oneusefulthing.org/p/centaurs-and-cyborgs-on-the-jagged&quot;&gt;Centaurs and Cyborgs on the Jagged Frontier&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Imaginez confier la revue à un collègue qui, un jour sur deux, fait un travail remarquable et, l’autre jour, passe complètement à côté. Vous ne lui confieriez pas grand-chose.&lt;/p&gt;
&lt;h2 id=&quot;5-déléguer-à-un-agent-passe-par-lécrit&quot;&gt;5. Déléguer à un agent passe par l’écrit&lt;/h2&gt;
&lt;p&gt;Avec un collègue, on peut dire « fais-le avec moi quelques fois, et ensuite tu sauras ». Il observe, il comprend ce qui nous importe, et on lâche prise progressivement. Avec un agent, cette transmission par l’observation n’existe pas : ce qu’on n’a pas écrit, il ne le sait pas.&lt;/p&gt;
&lt;p&gt;On peut contourner en partie. On fait parcourir à un agent tout le contenu du projet ainsi que les commentaires laissés sur les PR passées, et on lui demande d’en tirer un modèle de ce qui nous importe en revue. Ce n’est pas parfait, mais l’agent récupère une partie de ce qu’un collègue apprendrait en nous regardant faire.&lt;/p&gt;
&lt;h2 id=&quot;et-maintenant-&quot;&gt;Et maintenant ?&lt;/h2&gt;
&lt;p&gt;Ces cinq freins sont réels, mais le simple fait de les expliciter permet de les traiter, et l’agent fait alors assez facilement mieux qu’un humain.&lt;/p&gt;
&lt;p&gt;Dans le prochain billet, je vous raconte comment nous faisons aujourd’hui, et ce que j’ai enfin le temps de faire à la place.&lt;/p&gt;
</content:encoded><dc:creator>Johan Martinsson</dc:creator></item><item><title>Relire des PR faites par l&apos;IA, c&apos;est chiant</title><link>https://unlockers.ai/blog/relire-des-pr-faites-par-l-ia</link><guid isPermaLink="true">https://unlockers.ai/blog/relire-des-pr-faites-par-l-ia</guid><description>Les agents écrivent le code, les humains relisent tout. Un fonctionnement inefficace et une souffrance inutile, et quatre questions pour en sortir.</description><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://unlockers.ai/blog/relire-des-pr-faites-par-l-ia/citation-manuscrite.png&quot; alt=&quot;Citation manuscrite : « Relire des PR faites par l’IA, c’est chiant. »&quot;&gt;&lt;/p&gt;
&lt;p&gt;« J’aimais concevoir du code. Relire des PR faites par l’IA, c’est chiant. »&lt;/p&gt;
&lt;p&gt;C’est une développeuse qui m’a dit ça, il y a quelques semaines. Sa passion pour le métier était née de la création d’algorithmes. Elle aimait soigner la façon dont le code était fait et prenait plaisir à façonner cette matière. L’arrivée des agents l’a privée de ce plaisir. À la place, elle relit du code qu’elle n’a pas écrit, et qu’elle n’aurait pas écrit comme ça.&lt;/p&gt;
&lt;aside class=&quot;tldr&quot;&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Les agents écrivent le code, les humains relisent tout, et beaucoup le vivent mal. Pressé ? Allez directement aux &lt;a href=&quot;https://unlockers.ai/blog/relire-des-pr-faites-par-l-ia#prendre-du-recul&quot;&gt;quatre questions pour prendre du recul&lt;/a&gt;.&lt;/aside&gt;
&lt;p&gt;J’accompagnais son équipe et j’essayais de les convaincre d’utiliser davantage l’IA. &lt;strong&gt;Ma conviction : bien utilisée, elle permet de produire du code de meilleure qualité, plus facilement.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On n’était pas en phase. Ce qu’ils connaissaient de l’IA, c’étaient des PR générées par des agents sans vrai guidage. Plus on utiliserait l’IA, plus ils devraient avaler de PR médiocres. Avec un tel volume, ils seraient tentés de merger en l’état, parce que corriger soi-même, personne n’en a envie. Le code deviendrait plus verbeux et moins bien conçu, et on finirait par accepter un niveau inférieur à celui d’avant. Alors ils résistaient.&lt;/p&gt;
&lt;p&gt;Dans d’autres équipes, j’ai vu la réaction inverse. On génère tout et on subit. « On passe quatre fois plus de temps à relire des PR. C’est chiant, mais bon, qu’est-ce qu’on peut y faire ? » Ils ont accepté. Leurs journées sont faites de diffs, et ils ne vont pas beaucoup plus vite pour autant.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://unlockers.ai/blog/relire-des-pr-faites-par-l-ia/liste-pr-floutee.png&quot; alt=&quot;Une liste de 91 pull requests fermées en quelques jours, titres floutés&quot;&gt;&lt;/p&gt;
&lt;p&gt;Ces deux équipes ne sont pas des exceptions. Dans les discussions de couloir et à la machine à café, j’entends les mêmes questions revenir. Des développeurs se demandent ce que devient leur métier. Des managers se demandent où est passé le gain de productivité promis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Moi, je vois une situation qui me dérange : un fonctionnement inefficace, agrémenté d’une souffrance inutile.&lt;/strong&gt; Inutile, car je pense que rien ne nous oblige à en rester là. On y reste parce qu’on n’a tout simplement pas pensé à en sortir, comme la grenouille dans l’eau qui chauffe doucement et qui ne saute pas hors de la casserole.&lt;/p&gt;
&lt;h2 id=&quot;un-déséquilibre&quot;&gt;Un déséquilibre&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://unlockers.ai/blog/relire-des-pr-faites-par-l-ia/agent-bombarde-humain.png&quot; alt=&quot;Un robot tire des PR en rafale sur un développeur qui se protège, une pile de PR à ses pieds&quot;&gt;&lt;/p&gt;
&lt;p&gt;Pour écrire du code, on a reçu des outils puissants et faciles à prendre en main. Pour la relecture et la décision de merger, on n’a rien reçu.&lt;/p&gt;
&lt;p&gt;Résultat : l’agent écrit une grande partie du code, mais il ne relit rien et ne décide de rien. Dans les équipes que je croise, aucune PR n’est acceptée par un agent. Toute la relecture est restée humaine, alors que le volume à relire a explosé.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://unlockers.ai/blog/relire-des-pr-faites-par-l-ia/beaucoup-zero.png&quot; alt=&quot;Code écrit par un agent : beaucoup. PR acceptées par un agent : 0&quot;&gt;&lt;/p&gt;
&lt;p&gt;Les bots de revue n’y changent pas grand-chose. Ils commentent les PR, mais tant que l’humain relit tout et décide de tout, ils ajoutent surtout des commentaires à lire.&lt;/p&gt;
&lt;h2 id=&quot;le-nez-dans-le-guidon&quot;&gt;Le nez dans le guidon&lt;/h2&gt;
&lt;p&gt;Ce déséquilibre a un coût qu’on voit moins. Les meilleurs relecteurs sont souvent les développeurs qui connaissent le mieux le code. Pendant qu’ils enchaînent les diffs, ils ne construisent pas les tests et l’outillage qui permettraient de relire moins.&lt;/p&gt;
&lt;p&gt;Et personne ne lève la tête. C’est, à mon avis, la première raison pour laquelle rien ne change. Il y a aussi de vraies difficultés, que j’aborde dans le prochain article.&lt;/p&gt;
&lt;h2 id=&quot;prendre-du-recul&quot;&gt;Prendre du recul&lt;/h2&gt;
&lt;p&gt;Voici quatre questions avec lesquelles partir pour ouvrir la réflexion.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;La situation actuelle est-elle le résultat d’une décision, ou d’une absence de décision ?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dans quelle situation les développeurs, et le reste de l’équipe, s’épanouiraient-ils le plus ?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintenant qu’on a des agents, quelle valeur seul un humain peut-il apporter ?&lt;/strong&gt; Faites la liste, puis comparez-la à votre agenda.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Si la revue, les corrections et la décision de merger devaient être entièrement déléguées aux agents, comment feriez-vous ?&lt;/strong&gt; Ce qu’il faudrait mettre en place vous manque probablement déjà aujourd’hui.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Le prochain article portera sur ce qui nous empêche de déléguer la revue, et le suivant sur des dispositifs concrets pour le faire sans sacrifier la qualité.&lt;/p&gt;
</content:encoded><dc:creator>Johan Martinsson</dc:creator></item></channel></rss>