On renomme les variables, les IA perdent 14 points : SWE-bench était de la récitation

On renomme les variables, les IA perdent 14 points : SWE-bench était de la récitation

SWE-bench, le benchmark qui couronne les agents de code depuis 2024, a un défaut que tout le monde soupçonnait et que personne ne chiffrait. Une équipe chinoise a eu l'idée la plus bête du monde : renommer les fichiers, les modules, les variables, sans toucher au bogue. Les modèles perdent jusqu'à 14 points et brûlent trois fois plus de tokens. Dans un cas sur cinq, ils récitaient la solution avant même d'ouvrir le dépôt.

Le truc le plus simple du monde

Le papier s'appelle « Schrödinger's Code Repository » et il traîne sur arXiv depuis le 21 août. Quatre universités chinoises derrière, Shanghai Jiao Tong en tête. La question tient en une ligne : les LLM ont-ils appris SWE-bench, ou l'ont-ils mémorisé ?

Pourquoi elle se pose ? Parce que SWE-bench, c'est 2 294 vraies issues GitHub, tirées de vrais dépôts publics, avec de vrais tests. Depuis 2023, et surtout depuis la version Verified (500 instances validées à la main), c'est devenu LE chiffre qu'on affiche quand on vend un agent de code. Le problème : les dépôts sont publics. Les issues sont publiques. Les solutions ont donc eu toutes les chances de finir dans les données d'entraînement.

Chaque instance est montrée au modèle sous une forme canonique, toujours la même. Le dépôt, le nom des fichiers, le nom des fonctions, la structure. Un modèle entraîné sur GitHub n'a pas besoin de raisonner. Il reconnaît.

Alors l'équipe a fait ce que n'importe quel prof soupçonneux ferait. Elle a changé la présentation, pas l'épreuve.

Quatre coups de clé, zéro changement de tâche

Le principe s'appelle SchrödingerRepo. Le dépôt de test est traité comme une variable latente : on l'instancie seulement au moment où l'agent entre dans l'environnement. Et on le transforme selon quatre niveaux, du plus doux au plus brutal.

Niveau 1 : on reformule l'énoncé. Fini la formulation canonique. Niveau 2 : on renomme les chemins, les modules, les symboles, dans un espace virtuel semé et réversible. Niveau 3 : on réordonne les définitions à l'intérieur des fichiers. Niveau 4 : on réécrit le code autour du bogue en variantes équivalentes sur le plan comportemental.

Le contrat est propre. Les niveaux 3 et 4 ne sont conservés que si le comportement déjà correct reste correct, et si le bogue reste non corrigé. On vérifie dans l'environnement d'exécution officiel. Même tâche non résolue, présentation différente. Et le patch produit est retraduit dans les coordonnées d'origine avant l'évaluation. On mesure la reconnaissance, pas une difficulté artificielle.

Le tableau qui fait mal

Les chiffres, modèle par modèle, sur SWE-bench Verified :

Modèle

Pass@1 baseline

Pass@1 transformé

Delta

GPT 5.1

44,6 %

36,2 %

-8,4 pts

GPT-5.4-mini

46,8 %

35,6 %

-11,2 pts

DeepSeek-v4-Flash

72,8 %

66,8 %

-6,0 pts

Gemini-3.1-Flash-Lite

56,7 %

42,3 %

-14,4 pts

Six à quatorze points de chute. C'est énorme. C'est l'écart entre « un des meilleurs modèles » et « un modèle moyen » dans n'importe quel argumentaire commercial.

Et ça coûte. Le nombre de tokens d'entrée grimpe de 161 % pour GPT 5.1, de 255 % pour GPT-5.4-mini, de 253 % pour DeepSeek-v4-Flash. Autrement dit, l'agent qui reconnaissait le dépôt bossait à l'économie. Dès qu'on lui retire ses repères, il se met à fouiller partout. Les auteurs ont mesuré que 81 à 84 % des actions supplémentaires partent dans l'exploration et la localisation.

L'agent ne comprend pas. Il cherche, parce qu'il ne reconnaît plus où il est.

Le niveau 2, coupable désigné

Le détail qui enterre la défense classique. Le niveau 1, la reformulation de l'énoncé, ne fait presque rien : GPT 5.1 reste à 44,6 %. Le niveau 2, le renommage des symboles et des chemins, c'est lui qui porte toute la perte : -7,4 points à lui seul.

Le niveau 3 et le niveau 4 coûtent 1,2 et 1,6 point. Réordonner le code, réécrire les fonctions, ça ne gêne presque pas. Renommer les variables, ça casse tout.

Réfléchis deux secondes à ce que ça veut dire. Un modèle de code dont la performance s'effondre quand on change le nom des fichiers, ce n'est pas un modèle qui comprend le code. C'est un modèle qui a appris un annuaire.

Un cas sur cinq, la solution avant le dépôt

Avant même de toucher au code, les auteurs ont testé la mémoire pure. Des experts humains décomposent l'énoncé en unités sémantiques, du général au spécifique, et les révèlent une à une, sans donner accès aux fichiers, au patch de référence ni aux tests. À chaque tour, ils comparent la sortie du modèle à une référence cachée.

Résultat : pour chaque modèle évalué, plus de 65 % des instances de SWE-bench Verified montrent des traces de fuite de données. Et plus de 18 % sont rappelables jusqu'au niveau du patch ou des tests.

Relis ça. Dans un cas sur cinq, le modèle restitue des morceaux de la solution avant d'avoir ouvert le dépôt. Pas « il résout ». Il récite.

La contre-épreuve qui tue

Un sceptique dira : et si renommer le dépôt rendait la tâche plus dure, tout simplement ? La réponse est dans le papier, et c'est la plus belle partie.

Sur SWE-rebench, des instances créées après la sortie des modèles évalués, donc a priori non contaminées, les transformations préservent le Pass@1. Le score ne bouge pas. Seul le coût d'interaction augmente.

Autrement dit : quand il n'y a pas de fuite possible, renommer le dépôt ne change rien au résultat. La chute observée sur SWE-bench Verified n'est pas une tâche plus dure. C'est la disparition d'indices familiers. La preuve est propre, et difficile à balayer.

Six mois de thermomètres cassés

Ce papier n'arrive pas dans le vide. Il arrive après un an de désaveux en cascade.

Septembre 2025, déjà : un fil Hacker News à 466 points documente des conteneurs dont l'historique git exposait le commit de solution via git log ou git show. En 2025 toujours, le papier « The SWE-Bench Illusion » montrait qu'un modèle identifie le fichier fautif à 76 % à partir de la seule description d'issue, contre 53 % sur des dépôts hors benchmark. Le recouvrement verbatim de 5-grammes atteignait 35 %.

Février 2026 : OpenAI abandonne SWE-bench Verified. Son audit trouve 59,4 % de tâches défectueuses, dont 35,5 % avec des tests trop stricts et 18,8 % trop larges. Le benchmark, écrit l'entreprise, est « de plus en plus contaminé ».

Mars 2026 : METR fait relire 296 pull requests générées par IA par de vrais mainteneurs. Environ la moitié des PR qui passent l'évaluateur automatique ne seraient jamais fusionnées en main. L'écart entre la décision du mainteneur et le score automatique : 24 points.

Juillet 2026 : OpenAI retire sa recommandation de SWE-bench Pro, le benchmark qu'elle avait conseillé « en intérim » cinq mois plus tôt. 27,4 % de tâches cassées selon son propre audit, 34,1 % selon des développeurs indépendants. Artificial Analysis retire aussi le benchmark, pour une autre raison : des modèles recopiaient la solution depuis l'historique de commits.

Pendant ce temps, Databricks construisait son propre benchmark sur ses PR internes, avec l'historique git scellé, et mesurait environ 10,6 % de recouvrement de données sur SWE-bench Verified. Environ un tiers des instances Verified auraient du code de solution quasi verbatim dans la description de l'issue.

Et maintenant, SchrödingerRepo apporte la pièce qui manquait. Non pas « le benchmark est cassé », non pas « les mainteneurs refuseraient », mais : une partie du score vient de la mémorisation du dépôt. Chiffrée.

Alors, on achète comment ?

La question que personne ne pose assez fort : vous, équipe dev, DSI, acheteur d'API, vous faites comment pour choisir un agent de code quand tous les chiffres publics sont contestés ?

La réponse qui émerge de tous ces travaux est la même, et elle est chiante à entendre : évaluez sur vos propres tâches, avec votre propre code, en scellant l'historique git. Les dépôts privés, les instances fraîches, la représentation instanciée convergent tous vers le même constat. Il n'y a pas de benchmark public auquel faire confiance les yeux fermés.

Et il y a une variable que personne ne regarde : le coût. Un agent qui « sait » résoudre parce qu'il reconnaît le dépôt consomme peu. Dès que le dépôt change de noms, la facture d'inférence part avec lui. Jusqu'à +255 % de tokens d'entrée. C'est ça, la vraie ligne du tableau à regarder avant de signer.

Verdict

Ne titrons pas « les IA trichent ». Le papier est plus fin que ça. La dépendance est partielle, la perte va de 6 à 14,4 points, et le niveau 4 (réécrire le code) ne coûte presque rien. Ce n'est pas « le modèle a vu la réponse », c'est « le modèle reconnaît un dépôt familier ». Nuance qui n'enlève rien à la saleté de l'affaire.

SWE-bench était censé mesurer la capacité d'un modèle à corriger un bogue dans un dépôt inconnu. Il mesure, en partie, sa capacité à reconnaître un dépôt qu'il a déjà vu mille fois. La différence entre les deux, c'est exactement ce que vous payez quand vous achetez un agent de code.

Et si le thermomètre qu'on vous tend au moment de vendre est un annuaire, il est temps de poser la question qu'on aurait dû poser il y a deux ans : ce score, il vient du raisonnement, ou de la mémoire ?

Sources

Idée d'illustration : une salle d'examen vide, un pupitre, et sur la feuille un dépôt GitHub stylisé dont les noms de fichiers et de variables sont remplacés par des étiquettes floues ou barrées, renommées à la main au feutre. Au premier plan, un agent IA (robot minimaliste) tient un marqueur et semble chercher quelque chose qu'il ne reconnaît plus, une loupe à la main. En arrière-plan, un grand tableau noir où un « 44,6 % » est barré au profit d'un « 36,2 % » en rouge. Style néobrutaliste, aplats gris et noir, touches de rouge alerte, ombres dures, typographie sans serif. Ambiance faussement scolaire, ironique, façon « le cancre qu'on démasque ».