Aller au contenu
DiffwrightBêta

article

La prochaine version 0.16.0 de Diffwright : la PR est lue avant que vous l'ouvriez

Cette version de Diffwright vous indique par où commencer : un ordre de review suggéré, avec un fichier « Commencer ici », des étapes et une estimation du temps. Les PR qui attendent votre review sont préparées en arrière-plan, en lecture seule et sans IA, et « Nouvelle itération » montre quels fichiers revus ont changé. Un nouveau cache SQLite accélère la réouverture et permet de chercher dans les commentaires. Tout reste sur votre machine.

Tous les articles10 min de lecture

En bref

  • Un ordre de review suggéré dans la colonne Fichiers : un fichier « Commencer ici », des étapes et une estimation du temps.
  • Des PR préparées en arrière-plan quand votre review est attendue, en lecture seule et sans IA.
  • « Nouvelle itération » indique combien de fichiers déjà revus ont changé depuis votre passage.
  • Un cache local en SQLite : sur des jeux de test synthétiques, l'écriture est environ trois fois plus rapide et la réouverture passe de 84 ms à 0,8 ms.
  • Tout reste sur votre machine ; la pré-analyse et l'apprentissage se coupent dans Réglages.

Un ordre de review suggéré

Imaginez une PR du projet ATLAS chez Contoso : 40 fichiers modifiés, un nouveau type, trois services qui l'utilisent, des tests. Jusqu'ici, la liste suivait l'arborescence.

Désormais, la colonne Fichiers propose un ordre de review suggéré :

  • un fichier « Commencer ici » : le plus central parmi les fichiers modifiés, d'après les dépendances entre les symboles qu'ils touchent ;
  • des étapes (de 2 à 5 en général) qui regroupent les fichiers par dossier ou par composant, les types et interfaces avant le code qui les utilise ;
  • une estimation du temps par étape (« ≈ 6 min »), calculée d'après la taille du diff, rien de plus ;
  • un badge « Refactor pur » quand un fichier n'est qu'un renommage ou un déplacement à contenu identique, avec la mention « à confirmer » ;
  • un badge « Secret potentiel » quand une ligne ajoutée ressemble à une clé ou à un mot de passe : l'infobulle indique la ligne, jamais la valeur.

En haut, « 32 fichiers sur 40 analysés » indique sur quoi repose cet ordre.

Colonne Fichiers de Diffwright : ordre de review suggéré en quatre étapes, avec le badge Commencer ici, un badge Secret potentiel, un badge Refactor pur et une estimation de durée par étape.

La colonne Fichiers d'une PR de démonstration Contoso, avec l'ordre de review suggéré.

Un ordre qui ne bouge pas sous vos yeux

L'ordre suggéré se fige dès son premier affichage. Si une analyse plus fine arrive ensuite (Diffwright commence par les chemins, puis lit le contenu des fichiers), elle ne remplace rien d'elle-même : un bandeau « Un ordre plus précis est disponible » vous propose « Appliquer », et « Rétablir l'ordre précédent » annule.

La palette ⌘K propose « Étape suivante » et « Étape précédente ».

À retenir

L'ordre suggéré est un signal, pas un verdict : c'est toujours vous qui relisez, et rien ne bouge à l'écran sans votre clic.

Des PR préparées avant ouverture

Diffwright lit en arrière-plan les PR qui vous concernent : celles où vous êtes relecteur demandé, que vous n'avez pas encore votées, hors brouillons, 8 au plus par défaut. Quand vous en ouvrez une, ses fichiers sont déjà sur le disque et l'ordre de review est déjà calculé.

Quelques règles :

  • Lecture seule : aucune écriture sur Azure DevOps, aucune visite marquée, aucun vote, aucun commentaire.
  • Aucune IA : la pré-analyse n'appelle jamais de moteur IA.
  • Incrémentale : après un nouveau push, seuls les fichiers qui ont changé sont téléchargés à nouveau.
  • Bornée : un cache disque local plafonné à 500 Mo par défaut (250 Mo à 2 Go dans Réglages), mis en pause sur batterie faible, après un long moment en arrière-plan, hors ligne ou à l'approche de la limite de requêtes.
  • Azure DevOps uniquement en arrière-plan : sur GitHub et GitLab, la pré-analyse ne se fait qu'à l'ouverture d'une PR.

Dans la liste des PR, une petite jauge indique l'état de chacune : prête, en cours, en pause. La pré-analyse est activée par défaut et se coupe dans Réglages.

Liste des Pull Requests dans Diffwright : une jauge à droite de chaque ligne indique l'état de la pré-analyse.

La jauge de pré-analyse dans la liste des PR (ici, pré-analyse en cours). Le détail s'affiche au survol.

Quand une nouvelle itération arrive

Diffwright tient désormais un historique local de vos gestes de review : fichiers marqués revus, votes et commentaires publiés depuis l'application. Quand l'auteur pousse une nouvelle version après votre passage, la PR affiche « Nouvelle itération », et l'en-tête précise combien de fichiers que vous aviez revus ont changé depuis. Un bouton bascule vers le mode « Depuis ma review » pour ne relire que la différence.

Une limite à connaître : seuls les gestes faits dans Diffwright comptent. Un fichier marqué revu ou un vote donné dans le portail Azure DevOps n'entre pas dans cet historique.

Plus rapide à rouvrir et plus facile à retrouver

Sous la pré-analyse, le cache local passe de fichiers JSON à une base SQLite sur votre disque. Ce que cela change à l'usage :

  • Les lignes ajoutées et supprimées sont gardées : une PR déjà vue affiche toutes ses barres +/− au premier rendu, sans fondu ni nouveau téléchargement.
  • La recherche dans les commentaires : la recherche (⌘K) a un nouveau groupe « Commentaires » qui retrouve un échange dans les PR que vous avez déjà ouvertes. Le filtre « de : moi » limite les résultats à vos propres commentaires, par exemple :
text
de : moi timeout
  • « Qui appelle ça ? » en quelques millisecondes : l'onglet Impact peut s'appuyer sur un index des symboles du dépôt. Il n'est construit que lorsque vous cliquez sur « Analyser l'impact », jamais en arrière-plan ; le résultat reste le même qu'avec l'analyse existante.
  • Un apprentissage local du risque : à partir de vos propres reviews, Diffwright peut relever d'un cran le niveau de risque d'un fichier, jamais l'abaisser. Il ne s'active qu'après 200 fichiers et 20 PR relus et reste un signal, jamais un verdict. Il est activé par défaut et se coupe dans Réglages.

Recherche ⌘K de Diffwright limitée au groupe Commentaires, avec deux résultats dont le terme recherché est surligné.

Le groupe « Commentaires » de la recherche, ici filtré sur un auteur. La puce « de : moi » limite la recherche à vos propres commentaires.


Avant et maintenant

Moment du parcoursAvantMaintenant
Ouvrir une PR de 40 fichiersChaque fichier est téléchargé à l'ouvertureLes fichiers sont déjà sur le disque si la PR a été préparée
Choisir par où commencerListe dans l'ordre de l'arborescenceOrdre suggéré, fichier « Commencer ici », étapes estimées
Rouvrir une PR déjà vueBarres +/− rechargées, avec un fonduToutes les barres au premier rendu
Revenir après un nouveau pushRien n'indique quels fichiers revus ont changé« Nouvelle itération » et le mode « Depuis ma review »
Retrouver un échangeParcourir les PR une à uneGroupe « Commentaires » dans ⌘K, filtre « de : moi »
Savoir qui appelle un symboleAnalyse d'impact existanteMême résultat, via un index de symboles construit à la demande

Performances

Les chiffres ci-dessous viennent de benchs automatisés, compilés en mode release sur une machine de développement, avec des jeux de test synthétiques : aucune PR réelle n'y figure. Les temps que vous observerez varieront selon votre disque, le réseau Azure DevOps et la taille de vos PR.

Cache de fichiers

Jeu de test : 50 000 blobs de 2 Kio.

MesureAvant (JSON)Après (SQLite)Gain
Écriture des 50 000 blobs15,1 s4,7 à 5,0 s≈ 3×
Lecture d'un blob (p99)0,13 ms0,009 à 0,038 ms≈ 3 à 14×
Éviction de la moitié du cache1,35 s0,73 à 0,88 s≈ 1,5 à 1,8×
Réouverture et première lecture84 ms, avec balayage du dossier0,8 ms, sans balayage≈ 100×
Volume écrit≈ 6 Mo d'index JSON réécrit tous les 32 blobs≈ 10 Ko par écritureL'index n'est plus réécrit en entier

Lignes +/− persistantes

Jeu de test : 300 000 entrées.

MesureAvantAprèsGain
Lecture de 500 diffs déjà connus (p99)—0,52 msNouveau
Éviction de 5 000 entrées—13 msNouveau

Index de symboles

Jeu de test : 10 000 petits fichiers, pour l'analyse d'impact « Qui appelle ça ? ».

MesureAvantAprèsGain
Indexation (base de 9,2 Mo)—215 à 300 msNouveau
Interrogation d'un lot de symboles (p50 / p99)—0,09 ms / 0,27 msNouveau
Symbole présent dans les 10 000 fichiers—3,9 msNouveau

Le résultat est identique à celui de l'analyse existante, et un test le vérifie.

Plan de review

MesureAvantAprèsGain
Plan complet d'une PR de 300 fichiers—Moins d'une seconde dans les testsNouveau
Plan grossier, d'après les chemins seuls—InstantanéNouveau

Ces gains tiennent d'abord au stockage : l'ancien cache réécrivait un index JSON entier, le nouveau n'écrit que ce qui change dans une base SQLite indexée, sans parcourir le dossier à la réouverture. Le préchauffage fait le reste : une PR déjà préparée s'ouvre sans attendre le téléchargement de ses fichiers.

À retenir

Ces mesures décrivent le travail local de Diffwright, pas la vitesse d'Azure DevOps.


Tout reste sur votre machine

Rien de tout cela ne quitte votre ordinateur. Le cache, l'historique de review, l'index des commentaires et des symboles et l'apprentissage vivent dans ~/.diffwright, un dossier privé à votre compte utilisateur. Rien n'est envoyé, et cette version n'ajoute aucune statistique d'utilisation.

Vie privée

Le code et les commentaires mis en cache sont stockés en clair dans ~/.diffwright. Vous gardez la main :

  • « Vider le cache de pré-analyse » libère l'espace disque ;
  • « Supprimer l'apprentissage… » efface ce que l'application a appris de vos reviews ;
  • « Supprimer l'historique local… » efface, entre autres, l'historique de vos reviews.

Sous le capot

Le travail lourd (téléchargement, analyse des dépendances, calcul de l'ordre) se fait en arrière-plan, hors de l'interface : la navigation reste instantanée. Chaque changement passe une revue des invariants du produit (aucune écriture sans clic, données de dépôt traitées comme non fiables) et une revue dédiée macOS et Windows. La suite de tests automatisés compte près de 3 000 tests.

Ce qui reste à vérifier

Pas encore vérifié

Diffwright est en bêta, et cette version plus que les autres :

  • L'ordre de review, les seuils de risque et l'apprentissage n'ont pas encore été calibrés sur de vraies organisations. Ce sont des heuristiques raisonnables, pas des valeurs éprouvées.
  • Les chiffres de performance viennent de jeux de test synthétiques, pas de PR réelles.
  • Plusieurs comportements réseau restent à vérifier contre une vraie organisation Azure DevOps : les réponses des API utilisées par la pré-analyse et le respect des limites de requêtes.
  • Tout le comportement de Windows à l'exécution reste à vérifier sur une vraie machine.
  • Sur macOS, la pause « Réseau limité » ne se déclenche pas encore.
  • « Nouvelle itération » ne connaît que les gestes faits dans Diffwright, pas ceux du portail.
  • La recherche dans les commentaires ne couvre pas encore GitHub ni GitLab.
  • Les raccourcis ⇧J / ⇧K pour passer d'une étape à l'autre ne sont pas faits : utilisez ⌘K.

Essayer la bêta

Si vous relisez des PR Azure DevOps au quotidien, une question compte plus que les autres : l'ordre suggéré vous fait-il gagner du temps, ou vous gêne-t-il ? La mise à jour vous sera proposée par l'application, comme d'habitude, et les versions sont publiées sur https://github.com/Jpi-net/diffwright-releases/releases.

N'hésitez pas à signaler ce qui coince : les retours du terrain calibrent ce qu'aucun jeu de test ne peut mesurer. Partagez vos retours via le formulaire de contact du site https://diffwright.app/fr/contact ou par e-mail à contact@diffwright.app.