
Votre messagerie Microsoft 365 tient dans un seul écran, et vous n’avez ni PowerShell à ouvrir ni module à installer. Exchange Online Toolbox se connecte à votre tenant, lit son état, vous dit ce qui cloche et vous laisse corriger, étape par étape, avec un filet de sécurité à chaque geste.
Administrer Exchange Online à la main suppose d’ouvrir une console, de retrouver la bonne cmdlet, de la taper sans se tromper, puis de relire une sortie brute. Exchange Online Toolbox fait ce travail à votre place. C’est une application de bureau Windows qui parle directement à Microsoft 365, en lecture d’abord, et qui met chaque opération derrière un formulaire clair. Les captures ci-dessous montrent l’application telle qu’elle se présente au lancement. Ce guide en fait le tour.
Tout voir d’un coup d’œil, sans rien casser

À la connexion, l’écran d’accueil « Votre messagerie en un écran » rassemble l’essentiel. Une zone « À regarder » remonte les alertes rouges, une zone « Par où commencer » propose des étapes dans l’ordre où elles comptent, et des tuiles « En un coup d’œil » donnent les chiffres clés, chacune menant à l’opération qui va plus loin. Une section « Domaines » montre, pour chaque domaine, sa part de boîtes et l’état de son authentification de courrier.
Cette page ne lance aucune requête d’elle-même. Elle lit un relevé daté, gardé en cache sur votre poste. Vous voyez donc toujours de quand datent les chiffres, et vous décidez quand les rafraîchir avec le bouton « Actualiser » ou « Relancer l’audit complet ». Rien ne part vers Microsoft tant que vous ne le demandez pas.
Quatre couleurs pour savoir ce qu’une action va faire

Toutes les opérations vivent dans un catalogue, rangé en treize rubriques, de « Bilan » à « Annuler ». Avant même de cliquer, une couleur vous dit ce qui va se passer. Le bleu est de la lecture pure, un diagnostic qui ne touche à rien. Le vert est un durcissement réversible. L’orange reste réversible, mais se verra des utilisateurs. Le rouge supprime ou abaisse une protection. Vous savez donc, d’un coup d’œil, si une opération est un simple relevé ou un geste à peser.
Le catalogue a deux affichages, une grille pour découvrir et une liste pour retrouver. La recherche porte aussi sur les colonnes produites, si bien qu’en tapant le nom d’une donnée vue dans un compte-rendu, vous retombez sur l’opération qui la sort. Une opération indisponible, faute de licence ou parce que l’annuaire est fermé, apparaît grisée, avec la raison.
Renseigner, vérifier, puis lancer

Choisir une opération ouvre une fiche « Renseigner et vérifier ». Chaque paramètre a son champ, son libellé, son aide et, quand c’est utile, un aperçu de ce qui existe déjà sous le champ. Un bouton « Récupérer » va chercher les valeurs réelles dans votre tenant, par exemple la liste des boîtes ou des connecteurs, pour que vous choisissiez dans une liste plutôt que de taper au hasard.
La plupart des opérations qui écrivent proposent une « Simulation seulement », cochée par défaut. Vous voyez alors ce qui changerait, sans que rien ne change. Les gestes les plus sensibles demandent de recopier un mot avant de lancer, pour qu’une suppression ne parte jamais d’un clic distrait. Une fois l’opération lancée, une console affiche en direct ce qu’elle fait, et un bouton « Arrêter » reste à portée.
Le résultat arrive sous forme de tableaux lisibles, avec un résumé, des points d’attention, et un bloc « Et maintenant ? » qui suggère la suite. Vous pouvez tout enregistrer en compte-rendu, au choix un document à lire (HTML) ou un tableur (CSV), ou les deux.
Savoir par où le courrier entre et sort

Un tenant mal réglé laisse parfois un inconnu écrire au nom de votre société, ou laisse un vieux connecteur ouvrir une porte que personne ne surveille plus. La rubrique « Circuits de courrier » montre les connecteurs d’entrée et de sortie, permet d’en couper un sans le supprimer, et garde une copie complète d’un circuit avant toute suppression définitive. Elle sait aussi bloquer le « Direct Send », cet envoi depuis l’extérieur avec une adresse de votre domaine que l’on oublie souvent d’encadrer.
Côté réputation, l’opération « Vos messages arrivent-ils à destination » vérifie en une fois vos enregistrements SPF, DKIM et DMARC, et confronte vos domaines aux listes publiques de blocage. Vous apprenez tout de suite si un domaine risque de voir ses messages filtrés, et ce qui manque pour y remédier.
Être prêt avant l’incident, pas seulement après
La meilleure enquête est celle que vous pouvez mener parce que les traces existaient déjà. La rubrique « Se préparer » répond à une question simple, « serai-je capable d’enquêter après une intrusion ? », et rétablit au besoin toutes les traces de boîte, avec une durée de conservation que vous fixez. Elle confronte aussi votre tenant à une dizaine de schémas d’attaque connus, pour montrer où il tiendrait et où il cède.
La rubrique « Traces » complète le tableau en listant les boîtes dont rien n’est enregistré et les comptes volontairement exclus des journaux, deux angles morts qu’un intrus apprécie. La rubrique « Accès et connexions », elle, montre qui peut administrer la messagerie et par quels protocoles les utilisateurs relèvent leur courrier, pour fermer les vieilles méthodes qui ignorent le second facteur.
Enquêter sur une boîte, et reprendre la main vite

Quand une boîte se comporte mal, la rubrique « Enquête » l’examine et lui attribue une note. Elle lit les règles de tri, un terrain de jeu classique pour un intrus qui veut détourner ou cacher du courrier, le journal des connexions et les envois récents. Vous voyez vite si une boîte a été détournée, et pourquoi.
Si le doute se confirme, la rubrique « Mise en sécurité » reprend la main. Elle met une boîte piratée au calme, révoque les jetons en cours, traite les règles suspectes et ferme les vieux protocoles. En cas d’alerte plus large, le « mode alerte » coupe d’un coup les accès applicatifs, après vous avoir demandé des autorisations d’écriture distinctes de celles de lecture. Tout reste réversible, et tout est tracé.
Voir ce qui change dans vos réglages

La rubrique « Suivi des changements » prend un snapshot des réglages du tenant, un fichier daté que vous gardez. Plus tard, « Voir ce qui a changé depuis la dernière fois » compare l’état courant au dernier snapshot et ne montre, si vous le voulez, que les différences notables. Vous repérez ainsi un connecteur ajouté, une protection baissée, un réglage d’organisation modifié, sans avoir à vous souvenir de l’état d’avant.
Et si un changement vous déplaît, qu’il vienne de vous ou d’ailleurs, l’opération « Resynchroniser » réapplique les valeurs d’un snapshot de référence. Les changements faits depuis l’outil sont, eux, réunis dans la rubrique « Annuler », qui revient en arrière sur un geste précis.
Des garde-fous pensés pour ne pas se verrouiller dehors
Un outil qui agit sur tout un tenant peut vous couper l’accès à votre propre tenant. Exchange Online Toolbox pose plusieurs filets. Vous inscrivez vos comptes d’administration dans une liste de « comptes protégés », jamais touchés par une action de masse. Chaque action destructive recopie l’objet complet dans un journal daté avant de le supprimer, de quoi revenir en arrière. L’authentification se fait entièrement chez Microsoft, dans votre navigateur, aucun mot de passe ne transite par le logiciel, et aucun secret n’est écrit sur le disque sans votre accord explicite.
Vous pouvez aussi anonymiser les fichiers produits, qui masquent alors vos domaines et vos identifiants techniques tout en gardant les noms de boîte lisibles. Pratique pour partager un compte-rendu sans exposer votre organisation.
En pratique
Configuration : Windows récent, 64 bits. Aucune dépendance à installer pour l’édition autonome, ni Microsoft 365 côté poste, ni PowerShell, ni module Exchange. Un compte qui a le droit d’administrer votre tenant.
Deux éditions : une édition autonome, qui embarque tout et se lance telle quelle, et une édition plus légère pour les postes qui disposent déjà du runtime .NET Desktop.
Mises à jour : par le bouton « Télécharger » de la fenêtre « À propos », qui mène à la page du logiciel.
Langue : français par défaut. L’interface suit la langue de Windows si un fichier de traduction est présent, et le logiciel sait écrire un gabarit de traduction à compléter.
Licence : gratuit pour les particuliers. Pour un usage professionnel, la licence se demande par ticket depuis le site, sur devis.
Pour aller plus loin
Exchange Online Toolbox réunit, dans une seule fenêtre et sans ligne de commande, le diagnostic, le durcissement, l’enquête et la remise en ordre d’un tenant Microsoft 365. Le tout en lecture par défaut, avec une couleur par niveau de risque et un filet de sécurité à chaque geste.
Pour l’essayer, rendez-vous sur la page de téléchargement du logiciel. Et pour le détail de chaque rubrique, chaque opération et chaque réglage, le wiki « FAQ / Wiki » reprend tout, écran par écran.
Télécharger
Version 4.40.0
« Signaler un bug » et « Suggestions » déposent sur le forum avec votre code. Ces deux liens de l'onglet À propos emportent désormais le code avis dans leur adresse : le site vérifie, à l'ouverture, que la demande vient bien du logiciel, sans vous faire recopier quoi que ce soit. « Laisser un avis », « Forum », « FAQ / Wiki » et « Télécharger » restent inchangés.
Un code avis pour déposer un avis vérifié sur 1et2.com. L'engrenage en haut de la fenêtre ouvre un popup à deux onglets, Réglages et À propos. L'onglet À propos affiche un code à six caractères, en gros, à copier d'un clic : vous le recopiez sur le site au moment de laisser un avis, et le site vérifie qu'il vient bien du logiciel. Un cercle à côté indique le temps qu'il reste avant que le code change, toutes les cinq minutes. Aucune connexion n'est faite, le code se calcule sur le poste.
Les liens d'aide et de communauté réunis dans l'onglet À propos. Laisser un avis, signaler un bug, suggestions, forum, FAQ / Wiki et télécharger ouvrent directement les pages du logiciel sur le site.
Version 4.40.0
« Signaler un bug » et « Suggestions » déposent sur le forum avec votre code. Ces deux liens de l'onglet À propos emportent désormais le code avis dans leur adresse : le site vérifie, à l'ouverture, que la demande vient bien du logiciel, sans vous faire recopier quoi que ce soit. « Laisser un avis », « Forum », « FAQ / Wiki » et « Télécharger » restent inchangés.
Un code avis pour déposer un avis vérifié sur 1et2.com. L'engrenage en haut de la fenêtre ouvre un popup à deux onglets, Réglages et À propos. L'onglet À propos affiche un code à six caractères, en gros, à copier d'un clic : vous le recopiez sur le site au moment de laisser un avis, et le site vérifie qu'il vient bien du logiciel. Un cercle à côté indique le temps qu'il reste avant que le code change, toutes les cinq minutes. Aucune connexion n'est faite, le code se calcule sur le poste.
Les liens d'aide et de communauté réunis dans l'onglet À propos. Laisser un avis, signaler un bug, suggestions, forum, FAQ / Wiki et télécharger ouvrent directement les pages du logiciel sur le site.
Deux défauts relevés à l'usage, corrigés.
L'ajout et le retrait d'alias passaient par une syntaxe que le canal REST refuse. « Set-Mailbox -EmailAddresses @{Add=...} » répondait « paramètre non pris en charge par ce cmdlet via l'API REST ». Les deux opérations envoient désormais la LISTE COMPLÈTE des adresses : les existantes plus les nouvelles à l'ajout, les existantes moins l'alias au retrait. L'adresse principale traverse les deux intacte — au retrait, seule l'entrée d'alias exacte est filtrée, et la principale n'est pas filtrable par construction.
La page d'annuaire disait « canal fermé » alors qu'il venait d'être ouvert. Le résultat « canal fermé » avait été relevé avant l'ouverture et réaffiché depuis le cache — vrai à son heure, faux depuis. Ouvrir l'annuaire jette maintenant les résultats d'annuaire mémorisés : la page suivante relève pour de bon, en accord avec la pastille verte.
La récupération des alias marche enfin — et l'aperçu a changé de place. Le défaut n'était pas où on le cherchait : la liste déroulante affiche « adresse — Nom (type) », et si l'exécution traduisait bien cette chaîne en adresse nette, l'aperçu, la validation et la récupération recevaient la chaîne d'affichage entière. Le relevé interrogeait donc une boîte au nom impossible, et échouait sans un mot. Tout le monde reçoit désormais la valeur nette.
L'aperçu vit sous le champ dont il dépend. « Ce qui existe déjà » n'est plus une carte au-dessus du formulaire — où l'on lisait « récupérer » avant d'avoir choisi la boîte — mais une zone rendue directement SOUS « Boîte qui recevra l'alias ». L'ordre de lecture suit la dépendance.
Une seule valeur proposée : elle est affectée d'office. Sur tous les champs à récupération, quand le relevé ne rend qu'une proposition, elle est écrite dans le champ au lieu d'attendre qu'on déroule un menu d'un seul choix. Le champ reste modifiable si la proposition ne convient pas.
Le canal d'annuaire fermé dit enfin QUOI FAIRE. « Ouvrez le canal depuis les réglages » laissait chercher un bouton sans dire où il était ni ce qui allait suivre. Le message donne désormais la marche à suivre dans l'ordre : cliquer « Ouvrir l'annuaire » en bas du menu de gauche, se connecter dans la fenêtre Microsoft et lire les six autorisations — toutes en lecture — avant d'accepter, puis relancer la page par « Recommencer ». Le pourquoi reste, mais il vient après : on répond d'abord à celui qui veut avancer, ensuite à celui qui veut comprendre.
Quatre demandes, relevées sur captures.
« Photographie » devient « snapshot », partout. Titres, sous-titres, explications, accueil et identifiants du code : le mot a changé dans les cent quarante endroits où il vivait, accords compris — un snapshot, pas une. La recherche garde la mémoire de l'ancien nom : taper « photographie » ramène encore les cartes de snapshot.
Le second clic du menu efface la recherche. Après une recherche, cliquer à nouveau la rubrique déjà courante — ou double-cliquer — vide le champ et rend le catalogue complet, rubriques en tête. Le second clic dit « montre-moi la rubrique entière », et la rubrique entière n'existe que hors filtre.
« Comment les utilisateurs relèvent leur courrier » donne l'état complet. Un tableau liste désormais TOUTES les boîtes actives avec leurs autorisations — POP, IMAP, ActiveSync, SMTP AUTH, protection — et plus seulement les fautives. Les boîtes créées par Microsoft y sont reconnues : celle de la recherche de découverte arrive protocoles ouverts d'usine, le tableau le dit, explique pourquoi la fermer aussi coûte zéro et retire une surface d'attaque, et le compte-rendu conseille de la passer par « Fermer les vieilles méthodes de connexion » comme n'importe quelle autre.
« 2fa » trouve enfin le second facteur. La recherche passe par une table d'équivalents : 2fa, mfa, otp et totp ramènent « Qui a vraiment un second facteur » et la page de méthodes d'authentification, qui existaient mais ne répondaient qu'à leur nom exact.
Quatre demandes sur les formulaires, relevées à l'usage des opérations d'alias.
Changer le domaine réinitialise la boîte. Sur les trois formulaires d'alias — consulter, ajouter, retirer —, modifier le champ « Domaine » vide la boîte choisie et les propositions déjà relevées : elles appartenaient à l'ancien filtre, et les garder proposerait des boîtes que le nouveau domaine exclut. La consultation des alias gagne au passage le champ « Domaine » qu'elle n'avait pas.
L'aperçu se relève avant de saisir. La carte « Ce qui existe déjà » précède désormais la carte des champs, comme le sélecteur du retrait relève avant de laisser cocher. Et le bouton « Récupérer » répond toujours : cliqué sans avoir renseigné la valeur dont dépend le relevé, il dit quel champ remplir d'abord au lieu de ne rien faire — un bouton muet passe pour une panne.
« Partant » devient « utilisateur sortant ». La conversion en boîte partagée s'intitule « Transformer la boîte d'un utilisateur sortant en boîte partagée ».
Les opérations voisines à un clic. Chaque formulaire propose les opérations de la même famille — qui consulte les alias voudra souvent en ajouter ou en retirer un, et le détour par le catalogue pour changer de verbe était un aller-retour de trop. La famille est lue dans l'identifiant de l'opération, et une opération sans famille ne propose rien plutôt que de déverser toute une catégorie.
Deux demandes sur les opérations d'alias, relevées sur captures.
Le retrait dit enfin ce qu'il fait : retirer un ALIAS, pas un compte. Le bandeau rouge « suppression définitive, rien ne pourra être récupéré » parlait comme si la boîte disparaissait. Faux : seul l'alias est retiré, la boîte, son adresse principale et tout son courrier restent intacts — et recréer l'alias annule l'opération à l'identique. L'opération s'intitule désormais « Retirer un alias d'une boîte », son bandeau est celui d'un réglage annulable, et le mot à recopier a disparu : cette friction était calibrée pour une suppression de boîte, pas pour un réglage réversible.
Les alias se cochent, ils ne se tapent plus. Le champ « Alias à retirer » porte le sélecteur de la maison : un bouton « Récupérer les alias » relève ceux de la boîte choisie et les présente en tableau — adresse et domaine — où l'on coche ce qui doit partir. L'adresse principale n'y figure jamais : l'opération la refuserait, la proposer inviterait à une erreur connue d'avance.
Le domaine filtre la liste des boîtes. Les deux formulaires — ajout et retrait — portent un champ « Domaine » : renseigné, la récupération des boîtes ne propose que celles de ce domaine, au lieu de déverser tout le tenant dans un menu. Le champ va chercher lui-même les domaines acceptés, et la récupération emporte désormais les saisies déjà faites — c'est ce qui permet au filtre d'agir.
L'aperçu se demande d'un bouton. La carte « Ce qui existe déjà » s'affiche dès que l'opération sait produire un aperçu, avec un bouton « Récupérer » : sur l'ajout d'alias, il relève ceux que la boîte porte déjà, avant de saisir le nouveau.
Le petit rectangle blanc au survol des tuiles — corrigé. C'était bien une infobulle mal née : la raison d'indisponibilité d'une carte rendait une chaîne VIDE plutôt que rien, et une bulle liée à une chaîne vide s'affiche quand même, sans contenu. Liée à null, elle n'apparaît pas. Les tuiles indisponibles gardent leur explication ; les autres n'affichent plus rien.
Le logiciel tombait à l'ouverture — corrigé. Dix-huit XamlParseException par lancement, toutes identiques : « la propriété [Unknown] ne pointe pas vers un DependencyObject dans le chemin (0).(1)[1].(2) ». Ce chemin, c'est l'orbite du point bleu du cadran de relevé. Le XAML applique les propriétés dans l'ordre du document : le style du segment, écrit en ATTRIBUT de l'ellipse, s'appliquait avant le bloc RenderTransform ; son déclencheur « en cours » démarrait l'animation d'orbite sur un groupe de transforms qui n'existait pas encore, et la mesure de la fenêtre s'effondrait. Le transform est désormais posé AVANT le style — même ellipse, mêmes animations, seul l'ordre change — et le banc fixe cet ordre pour qu'aucune passe d'esthétique ne le défasse par accident.
Neuf demandes, relevées sur captures. La plus importante ferme un chantier qui traînait depuis dix versions.
Les lignes de détail des tableaux sont abolies, définitivement. Le mode de la grille et le déclencheur de style se disputaient la visibilité, la virtualisation changeait le vainqueur, et chaque correction en défaisait une autre — jusqu'aux bandes vides visibles sous chaque ligne, l'icône qui ne suivait plus, le dépliage qui ne dépliait rien. On ne gagne pas cette guerre : on quitte le terrain. Le mécanisme entier est retiré — plus de gabarit de détail, plus de bouton « + », plus de donnée d'ouverture — et l'explication de la ligne CHOISIE s'affiche dans le bandeau sous le tableau, d'un simple clic. Un seul mécanisme, aucun état par ligne, rien à replier. Le banc interdit désormais le RETOUR de l'ancien système sous toutes ses formes connues, et les tableaux y gagnent des lignes resserrées.
Le bilan n'appelle plus ce qui sera refusé. Il apprend les licences avant de relever : Safe Attachments et Safe Links ne sont plus interrogés sur un tenant sans Defender — le relevé est marqué d'emblée avec sa vraie cause, sans requête ni 403. Et une commande refusée pour un motif d'autorisation est mémorisée pour la session : la même commande, le même compte, le même refus — on ne rappelle pas, on le dit. La déconnexion efface cette mémoire.
La dernière colonne absorbe l'espace restant. La grille terminait par une colonne fantôme, large et vide ; c'est désormais la dernière vraie colonne — en général le détail, précisément ce qu'on veut lire en entier — qui s'élargit avec la fenêtre.
Une adresse web affichée est un lien. Bleue, soulignée, curseur main, et le clic ouvre le navigateur PAR DÉFAUT de la machine. Seuls http et https s'ouvrent : un chemin ou un « smtp: » ne partent jamais vers le navigateur.
Les listes de blocage donnent le guichet. Quand une liste refuse la requête (les grandes rejettent les résolveurs publics), la ligne donne l'adresse où vérifier soi-même chez le fournisseur ; un signalement donne l'adresse de contestation et de retrait. Et les lignes qui ne concluent rien sont classées en fin de tableau : les signalements d'abord, les vérifications saines ensuite, les impossibles à la fin.
Le reste. Le champ de recherche du menu respire à gauche. L'échelle d'affichage démarre à 80 % — un réglage enregistré l'emporte toujours. Re-cliquer « Accueil » quand on y est déjà remonte en haut de la page, et un bouton flottant fait de même sur chaque page qui défile, visible seulement après une vraie descente — en haut de page, ce bouton serait un meuble.
Le point du relevé en cours orbite autour du cadran au lieu de battre sur place. Trois précautions de mécanique, gardées par le banc : le centre de rotation est exprimé dans le repère de chaque segment (une rotation WPF tourne autour d'un point en coordonnées locales — un centre écrit en dur ferait tourner chaque point sur lui-même) ; l'orbite vit dans son propre scénario, sans aller-retour (partagée avec le battement, elle repartirait en arrière à mi-course) ; et la fin du relevé arrête les deux scénarios, ce qui rend au point sa place exacte sur l'anneau avant qu'il ne passe au vert. Les ondes d'arrière- plan gardent leur animation d'origine.
Quatre chantiers retenus parmi les propositions : deux d'allègement, deux de fond.
Le bilan complet interroge par vagues. Les familles sont indépendantes les unes des autres, et le temps du bilan était presque entièrement de l'attente réseau : trois relevés partent désormais de front, et le dépouillement reste en séquence, dans l'ordre du catalogue — le résultat est un document, il doit se lire dans le même ordre à chaque bilan. La taille de vague est volontairement modeste : Exchange limite le débit par session, et un bilan qui déclenche la limitation devient PLUS LENT qu'un bilan sage, chaque requête refusée se payant d'une attente imposée. Au premier signe de limitation, le bilan repasse une famille à la fois et le dit.
La page de résultats s'ouvre sans attendre ses quarante tableaux. WPF les construisait tous avant d'afficher quoi que ce soit : l'ouverture et chaque changement d'échelle payaient le document entier, y compris les trente-cinq annexes que personne n'avait encore fait défiler. Chaque tableau se construit maintenant après le premier rendu, en priorité basse, de haut en bas — la page apparaît immédiatement et se remplit dans l'ordre où elle se lit. La virtualisation classique a été écartée en connaissance de cause : elle aurait exigé que la liste possède son propre défilement, cassant le défilement unique de la page.
Le rapport ouvre sur une page « L'essentiel ». Un compte-rendu part chez quelqu'un qui n'ouvrira jamais les quarante annexes : il lit la première page, et c'est elle qui décide de la suite. Elle dit trois choses dans cet ordre — le verdict, les points qui demandent une décision (chaque avertissement lié, la liste bornée à ce qu'un regard retient), et les chiffres qui donnent l'échelle. Aucun score n'est calculé, et c'est un refus délibéré : un « 7/10 » rassure ou affole sans rien apprendre, « deux comptes sans second facteur » se comprend et se corrige. À l'impression, elle forme une page de garde. Elle ne s'émet que sur un document de la taille d'un rapport : sur une opération unitaire, elle répéterait la synthèse mot pour mot.
Nouvelle page « Dernières connexions des comptes ». La date de dernière connexion de chaque compte, interactive et non interactive — la seconde mérite un regard à part : elle date la dernière fois qu'une application ou un protocole a utilisé l'identité du compte sans que personne ne tape de mot de passe. Les comptes dormants depuis plus de quatre-vingt-dix jours et les comptes jamais connectés sont signalés, avec renvoi vers le tableau : un compte dormant est le meilleur véhicule d'une intrusion durable, et il se ferme gratuitement. Ces dates n'existent qu'avec Microsoft Entra ID P1 : la tuile se grise d'elle-même quand la licence manque, au lieu d'échouer.
Deux dettes soldées, celles qui restaient du lot précédent.
Quatre types d'annulation ne savaient pas se restaurer — et le contrôle en a trouvé deux de plus. Le montage attrape-tout mémorisait ses gestes sous des noms libres qui n'avaient aucun cas dans le restaurateur : « Annuler » levait « type inconnu » au moment précis où l'on comptait dessus. Les six types concernés — type de domaine, groupe dynamique, règle de flux, réglage d'organisation, et deux découverts en écrivant le contrôle, dont les règles de tri désactivées par la mise en sécurité — ont désormais leur constante nommée et leur cas de restauration. La règle de tri retient SA boîte avec elle : sans cela, la réactivation l'aurait cherchée chez l'administrateur connecté. Le contrôle recense les types déclarés et refuse qu'un seul manque au restaurateur, ou qu'un appel passe encore une chaîne libre — une chaîne libre échappe au recensement, et ce qui échappe au recensement finit sans cas.
Le relevé à cocher n'est plus un cas unique. La brique posée pour les règles de tri est branchée sur deux nouvelles pages, celles où l'on supprimait en tapant un nom de mémoire.
Retirer l'autorisation d'une application relève les autorisations applicatives et met en exergue les rôles les plus lourds — usurpation d'identité, envoi au nom de n'importe qui : ceux qu'un intrus pose pour durer. Seules les attributions applicatives sont proposées ; retirer le rôle d'un administrateur humain est un autre geste, qui ne se fait pas depuis cette page.
Supprimer un circuit d'entrée relève les connecteurs et signale deux profils : le circuit désactivé depuis longtemps, dont personne n'a vérifié pourquoi il existe encore, et le circuit ouvert à toute adresse d'envoi, la configuration qu'un intrus pose pour faire entrer son courrier comme s'il était interne.
Les invariants du cas pilote valent partout : un choix explicite l'emporte sur la saisie libre, chaque objet coché est relu puis journalisé en entier avant le geste, et un objet disparu entre le relevé et le lancement est signalé — jamais supprimé à l'aveugle, son identité ayant pu être reprise.
Vingt demandes, numérotées 71 à 90 dans DEMANDES.md. Ce qui suit ne reprend que ce dont la cause vaut d'être connue.
Le rapport HTML affichait \25B8 au lieu d'un triangle, et son arborescence était illisible. La feuille de style vit dans une chaîne brute de C#, où aucun échappement n'est interprété : les deux antislashs qui étaient corrects dans une chaîne ordinaire ressortaient tels quels, et le navigateur y lisait un antislash échappé suivi de quatre chiffres. Un seul antislash suffit désormais, et le commentaire posé juste au-dessus dit pourquoi.
Les dépliages des tableaux du bilan ne s'ouvraient plus. Deux corrections précédentes se combattaient : la première avait établi que le mode « détails repliés » empêche l'ouverture, parce que la grille impose elle-même la visibilité de chaque ligne ; la seconde l'avait rétabli pour gagner en latence, et le bouton « + » a cessé d'agir. La réponse est le mode « visibles » avec virtualisation : seules les lignes réellement affichées voient leur détail construit. Le contrôle d'essai exige maintenant les deux ensemble et refuse l'un sans l'autre.
Un rectangle blanc s'ouvrait au survol de presque toutes les cellules. Vider l'infobulle au moment où elle s'ouvre ne l'annule pas : la décision d'afficher est déjà prise, et la bulle s'ouvre vide. Il faut marquer l'événement comme traité.
Les tableaux longs retenaient prisonnier. Au pas habituel de trois lignes, il fallait plus de cent crans de molette pour traverser quatre cents lignes avant que la page ne reprenne la main. Un tableau qui dépasse trois hauteurs d'écran avance désormais d'une page par cran, avec deux ou trois lignes de recouvrement pour raccrocher sa lecture.
Les applications de l'annuaire manquaient au compte-rendu, et la première correction ne suffisait pas. Le bilan les lisait et les déposait pour la page d'accueil, mais n'en faisait aucun tableau : il n'y avait rien à écrire dans le document. Un tableau a donc été ajouté — puis il a fallu constater qu'il ne répondait toujours pas à la question posée.
Deux collections distinctes cohabitent dans un annuaire. Les applications DÉCLARÉES chez vous se comptent sur les doigts d'une main ; les instances présentes se comptent par centaines, parce que tout tenant héberge celles de Microsoft. Un inventaire qui ne lit que les secondes ne fait pas disparaître les vôtres : il les rend introuvables, ce qui revient au même pour qui les cherche. Le compte-rendu contient maintenant les deux — vos déclarations dans leur propre annexe, avec la date de création, l'audience et la date du dernier secret ajouté ; et l'inventaire complet, où vos applications sont remontées en tête et signalées par une colonne.
Les exports atterrissaient sur le Bureau. Trois services y écrivaient encore, et trois autres écrivaient dans le profil de l'utilisateur. Tout ce que le logiciel produit vit désormais à côté de lui, comme ses jetons et ses journaux : lancé depuis une clé, il ne laisse plus rien derrière lui. Un contrôle refuse toute réapparition.
Une commande refusée continuait de partir. Le garde-fou qui retire un paramètre que deux commandes n'acceptent pas vivait chez un seul appelant ; deux autres l'ignoraient. Il est passé dans le client, seul endroit que personne ne peut contourner, et un contrôle balaie tous les fichiers d'opérations pour dénoncer l'appelant qui recommencerait.
L'anti-hameçonnage était imputé à tort à une licence absente. Un journal réel le montre : sur un tenant sans Defender, les stratégies anti-hameçonnage RÉPONDENT pendant que les pièces jointes et les liens fiables sont refusés. La protection de base contre l'usurpation est incluse partout ; l'annoncer comme manquante aurait fait acheter une fonction déjà présente. Et lorsqu'un refus ne vient pas d'une licence, le logiciel nomme désormais le rôle Exchange en cause — les commandes de principal de service appartiennent à « Role Management », qu'un administrateur général ne porte pas d'office.
La recherche se perdait en revenant d'une tuile, pour la deuxième fois. La mémoire de navigation enregistre la recherche affichée sur l'écran qu'on quitte, mais cette valeur n'était rafraîchie qu'au changement d'écran. On arrive sur le catalogue avant de taper : au moment du clic, elle valait encore le vide, et le retour le restituait fidèlement. La correction précédente ne couvrait que le cas inverse, celui où la frappe amenait elle-même au catalogue.
Nouvelle page « Qui a vraiment un second facteur ». Un relevé compte par compte de ce qui est réellement inscrit, avec un repli qui fonctionne sans licence particulière quand le rapport d'inscription est refusé. Le téléphone et le courriel y comptent comme faibles : le premier s'intercepte, le second arrive dans la boîte qu'il prétend protéger. La page lit l'état des paramètres de sécurité par défaut et dit précisément quoi faire, sans l'activer à votre place : ce réglage coupe l'accès des comptes de service qui n'ont aucun second facteur possible, et se pose en connaissance de cause.
Le catalogue en grille ou en liste, au choix, retenu d'une session à l'autre. La disposition en maçonnerie est retirée : elle remplissait mieux l'espace, mais des cartes qui commencent chacune à une hauteur différente ne se comparent pas du regard. Les tuiles ont désormais la même hauteur, deux lignes de titre et deux lignes de sous-titre, le texte entier restant accessible au survol. Les deux gabarits de carte, jusqu'ici recopiés l'un de l'autre, n'en font plus qu'un.
Les deux formulaires de connexion replient leurs champs facultatifs, affichent les conditions générales au-dessus du bouton plutôt qu'en dessous, et partagent le même indicateur d'attente — il était enfant du premier, donc invisible depuis le second. Le retour au formulaire d'accueil existait dans le code depuis le début et n'était relié à aucun bouton.
Le remplissage des champs suit l'échelle d'affichage. Réduire l'interface la réduisait tout entière, y compris l'air autour du texte : « compact » ne montrait pas une ligne de plus. Il se resserre maintenant plus vite que le reste.
Le bas des barres de défilement était encore rogné. La marge qui dégage la bordure de redimensionnement de la fenêtre était posée sur le seul conteneur des vues ; la barre latérale est dans l'autre colonne et n'en bénéficiait pas.
Les tuiles hors de portée sont grisées, avec leur motif. Une opération qui ne peut pas aboutir se voyait auparavant comme les autres : on cliquait, on attendait, on récoltait un refus. Deux causes sont désormais reconnues avant le clic. La première est la LICENCE : lorsque les abonnements du tenant ne comprennent pas la fonction, la tuile porte la mention « Licence absente » et explique au survol qu'il s'agit d'une licence à souscrire et non d'un rôle d'administration à ajouter — la distinction fait gagner l'heure qu'on passerait à chercher une case à cocher qui n'existe pas. La seconde est le CANAL D'ANNUAIRE : tant qu'il n'est pas ouvert, les opérations de la rubrique Annuaire portent « Annuaire fermé » et disent où se trouve le bouton qui les rendra disponibles.
Tant que les abonnements n'ont pas été lus, rien n'est grisé. Affirmer une absence qu'on n'a pas constatée serait aussi faux qu'affirmer une présence.
Les tuiles restent CLIQUABLES. Griser dit « ceci ne donnera rien aujourd'hui » ; désactiver dirait « ceci ne vous regarde pas », ce qui n'est pas la même chose et n'est pas vrai.
Nouvelle page « Protection avancée du courrier ». Les pièces jointes ouvertes dans un environnement isolé, les liens vérifiés au moment du clic et la protection renforcée contre l'usurpation d'identité n'existaient jusqu'ici qu'au fond du bilan complet, parmi une quarantaine d'autres relevés. Ce sont pourtant les trois réglages qui décident du sort d'un message piégé. Ils ont désormais leur page, qui montre aussi si chaque stratégie est réellement RATTACHÉE à des destinataires : une stratégie parfaitement réglée mais appliquée à personne ne protège personne. C'est également la page qui se grise quand l'abonnement ne comprend pas Microsoft Defender pour Office 365.
Choisir les règles de tri à supprimer, au lieu de les décrire de mémoire. Le formulaire demandait « le motif de nom des règles à supprimer » à quelqu'un qui n'avait jamais vu ces règles. On tapait une étoile, on lançait, et l'on découvrait dans le résultat ce que l'on venait de détruire.
Un bouton « Récupérer les règles » lit maintenant les règles réellement présentes et les présente à cocher : nom, boîte, détail des actions dépliable ligne par ligne, filtre libre, tri sur chaque colonne, et surtout la RAISON pour laquelle l'outil met une règle en exergue, écrite en toutes lettres — nom vide ou réduit à un caractère, renvoi hors de l'organisation, suppression automatique, rangement dans un dossier où personne ne regarde. Trois boutons cochent d'un geste ce qui est signalé, tout, ou rien.
Un choix explicite l'emporte sur le motif de nom : on ne mélange pas des règles cochées une par une et des règles attrapées par une correspondance automatique dans le même geste. Le contenu complet de chaque règle est relu et recopié dans le journal avant sa suppression, et une règle qui a disparu entre le relevé et le lancement n'est jamais supprimée à l'aveugle : son identité a pu être reprise par une autre.
Exchange ne conserve pas la date de création d'une règle de tri. Aucune colonne de date n'est donc affichée ici, et l'aide du champ le dit : c'est une limite du service, pas de cette page.
Un dossier de données d'exécution avait été livré avec les sources. L'archive de la version précédente transportait un cache local, la liste des tenants connus et un état d'annulation de session, ramassés au moment d'empaqueter. Outre l'encombrement, cela renvoie des données relevées chez l'utilisateur — exactement ce que le stockage à la racine du logiciel cherchait à éviter. Deux contrôles parcourent désormais l'arbre livré et refusent toute publication qui en contiendrait.
Ce champ à relever-et-cocher est une brique réutilisable. Le tri et le filtrage, qui décident de ce que l'on voit avant de cocher — donc de ce que l'on supprimera — vivent dans le noyau et sont éprouvés au banc sur des données fabriquées.
Le changement de taille d'affichage ne fige plus la fenêtre. Appliquer une nouvelle échelle oblige WPF à remettre en page tout le contenu, ce qui prend un instant visible sur une page de résultats chargée. Auparavant ce travail tombait d'un coup, au clic, la fenêtre semblait bloquée. Désormais l'attente est annoncée par un voile le temps de la remise en page, et l'application de l'échelle se fait une fois la liste de choix refermée. La bascule ne surprend plus.
Le logiciel sait quelles fonctions vos licences couvrent. À l'ouverture du canal d'annuaire, il lit les abonnements du tenant et en déduit ce qui est réellement accessible. Quand une lecture échoue parce que la fonction n'est pas souscrite (Safe Attachments et Safe Links sans Defender pour Office 365, par exemple), le compte-rendu le dit clairement : ce n'est pas un rôle d'administration à corriger, mais une licence à souscrire. La distinction évite de chercher un réglage qui n'existe pas.
Le logiciel n'écrit plus rien dans le profil de la machine hôte. Réglages, journaux, sessions, cache et jetons vivent désormais dans un dossier « donnees » à côté de l'exécutable. Lancé depuis une clé USB, il ne laisse aucun fichier derrière lui sur le poste : tout part avec la clé. Le profil utilisateur ne sert plus que de repli, dans le seul cas où le dossier voisin de l'exécutable est en lecture seule.
Un bouton « Se déconnecter et effacer les traces » sur la page d'accueil. Disponible même sans session ouverte, il supprime les jetons, les sessions et l'historique de connexion laissés à côté du logiciel. À utiliser avant de rendre un poste ou une clé, pour ne rien y laisser traîner.
La barre de défilement n'est plus coupée en bas. Le bas de la fenêtre, pris par la bordure de redimensionnement, rognait le pouce des barres de défilement de toutes les vues. Une marge basse sur le contenu le dégage partout.
Le moteur de recherche est toujours visible. Le bouton « Rechercher » du menu est devenu un vrai champ de saisie : taper depuis n'importe quel écran amène au catalogue filtré, sans avoir à ouvrir le catalogue d'abord.
Le menu suit le défilement même en recherche. Comme dans le catalogue, la rubrique en cours se met en évidence à mesure qu'on parcourt les résultats groupés.
Le retour depuis une tuile garde la recherche et la position. Revenir en arrière après avoir ouvert un résultat retrouve les mots cherchés ET l'endroit où l'on s'était arrêté.
Les tuiles à action unique se lancent directement. Une opération sans rien à renseigner, en simple lecture, part immédiatement au lieu d'afficher une page qui n'aurait montré qu'un bouton.
Les applications distinguent leur éditeur. Une colonne indique si une application est publiée par Microsoft ou par un tiers, celles de Microsoft n'étant pas modifiables avec une licence ordinaire.
Plus de lien mort sur l'accueil. Quand l'inventaire d'Exchange ne peut pas être lu, la tuile ne montre plus un chiffre trompeur suivi d'un lien qui échoue : elle indique « non lu », renvoie vers l'inventaire de l'annuaire, qui lui répond, et cite l'adresse du centre d'administration.
Une information hors de portée donne quand même son adresse. Faute du rôle ou de la licence pour lire l'inventaire d'Exchange, le compte-rendu affiche l'adresse du portail où le consulter à la main.
Les points d'attention mènent à leur tableau. « 3 anomalies sur les domaines » et « 2 rubriques non relevées » sont désormais des liens oranges : cliqués, ils amènent sous les yeux le tableau concerné, dans l'application comme dans le rapport exporté.
L'accordéon des tableaux du bilan ne rame plus. Le détail de chaque ligne était instancié pour toutes les lignes à l'ouverture d'un tableau, puis masqué : d'où une latence forte. Il n'est maintenant monté que pour les lignes réellement dépliées.
Le bouton de dépliage est un « + » d'arbre. Plus lisible que le chevron précédent, il devient « − » quand la ligne est ouverte, avec un espacement resserré pour ne pas rogner le signe.
Le changement de zoom est fluide. Le fichier de réglages était réécrit à chaque cran, ajoutant une écriture disque bloquante à la mise à l'échelle. La sauvegarde est différée : une seule écriture, une fois le réglage stabilisé.
Quatre corrections d'après le journal et l'usage.
Les réponses compressées d'Exchange sont enfin lues. La correction précédente se fiait à l'en-tête d'encodage, qui ment en pratique : le service annonce « gzip » et renvoie du Brotli, et le décompresseur choisi d'après l'en-tête échouait sur « unsupported compression method ». On regarde désormais les OCTETS reçus, pas l'annonce : gzip et zlib se reconnaissent à leur signature de tête, le Brotli par élimination, et l'on essaie les décompresseurs en cascade jusqu'à obtenir du JSON. Get-ServicePrincipal, Get-SafeAttachmentPolicy et Get-SafeLinksPolicy, qui tombaient tous les trois, remontent maintenant.
Deux commandes ne sont plus appelées avec un paramètre qu'elles refusent. Get-ManagementRoleAssignment et Get-PartnerApplication n'acceptent pas « ResultSize » via l'API REST, ce qui produisait un avertissement à chaque bilan. Elles sont désormais connues comme telles et appelées sans lui.
Le bouton de dépliage fonctionne dans les tableaux du bilan. Il ne s'ouvrait pas : forcer la visibilité du détail ligne par ligne ne suffit pas quand la grille est en mode « détails repliés », le mode l'emporte au rendu. Le dépliage suit maintenant une donnée de la ligne, lue par le style de ligne : basculer cette donnée ouvre ou referme sans ambiguïté, et plusieurs lignes peuvent rester ouvertes à la fois.
Chaque rubrique du menu a son icône. « Se préparer » et « Mise en sécurité » portaient la même, et l'Enquête partageait la loupe du bouton Rechercher : dans un menu, deux icônes identiques font douter d'avoir cliqué au bon endroit. Toutes sont maintenant distinctes.
Les applications de l'annuaire s'affichent enfin sur l'accueil. Le compte était non seulement en retard sur la tuile d'inventaire, il était FAUX : l'accueil lisait la collection « applications » — les déclarations — quand la vérité est dans « servicePrincipals », les instances réellement présentes dans le tenant, y compris celles d'un éditeur tiers dont aucune déclaration ne vit ici. Les deux collections sont distinctes dans Graph, d'où l'écart avec la tuile qui, elle, lisait déjà la bonne. Trois sources sont désormais alignées sur « servicePrincipals » : le rafraîchissement de l'accueil, le bilan complet, et la tuile d'inventaire — qui dépose en plus son relevé dans le cache de l'accueil, de sorte qu'ouverte seule, hors bilan, elle corrige quand même la page.
Deux appels d'API qui échouaient dans le journal. Le premier demandait « servicePrincipals/appRoleAssignedTo » à la racine, un chemin qui n'existe pas ainsi dans Graph — la relation se lit par application — d'où le « 400 Invalid object identifier ». Il était en trop et a été retiré. Le second, « unsupported compression method », venait de la décompression automatique de .NET, qui butait par intermittence sur le Brotli d'Exchange même après avoir demandé une réponse en clair. La décompression est maintenant faite à la main, d'après l'en-tête réellement reçu : gzip, deflate et brotli sont tous connus du cœur de .NET, il suffisait de ne pas laisser la couche HTTP deviner.
La recherche garde le classement du catalogue. Ses résultats étaient une liste plate ordonnée par pertinence, qui mélangeait des opérations de rubriques sans rapport : on ne retrouvait plus rien. Ils sont désormais regroupés sous leur rubrique, dans l'ordre du menu. Une rubrique sans correspondance n'apparaît pas.
Le bouton de dépliage reste lisible au survol. Même défaut que la flèche de retour le tour précédent : le glyphe vivait dans un élément à couleur bleue figée, invisible sur le fond bleu que le survol applique. Les glyphes des trois colonnes ajoutées aux tableaux — déplier, ouvrir l'opération, suivre un lien — tiennent maintenant leur couleur du bouton, qui la passe au blanc au survol. Le chevron bascule entre déplier et replier selon l'état de la ligne.
Le menu latéral est resserré. Lignes, pastilles et espacements réduits d'un même geste sur l'accueil, la recherche et les rubriques : plus de rubriques visibles sans faire défiler.
Les applications que la messagerie ne voit pas sont enfin NOMMÉES. La page d'annuaire affirmait qu'il existe un écart entre deux inventaires sans jamais montrer le second : une affirmation à croire sur parole, alors que cet écart est le sujet même de la page. Elle lit maintenant l'inventaire d'Exchange, marque chaque application « vue par la messagerie : oui / NON », et liste séparément celles qui n'y figurent pas, avec leur identifiant, leur date de création et leurs droits sur le courrier. C'est la liste qui compte : ne pas figurer dans l'inventaire d'Exchange ne limite en rien une application — elle fonctionne, elle a ses droits, elle expédie. La référence côté messagerie est une conséquence de la façon dont l'autorisation a été accordée, jamais une condition de validité. Si le rôle ne permet pas de lire l'inventaire d'Exchange, la comparaison est annoncée comme non faite plutôt que conclue à tort.
Sur la page d'accueil, la même comparaison se fait désormais par IDENTIFIANT et non par nombre : deux inventaires de taille égale peuvent ne pas contenir les mêmes applications, et soustraire deux comptes annonçait « aucun écart » dans le cas précis où il y en a un.
Le retour suit ce qu'on a vu. La flèche remontait une arborescence figée — résultat, formulaire, catalogue, accueil — quel que soit le chemin parcouru : arrivé sur une opération depuis une alerte de l'accueil, « retour » menait au catalogue, un écran jamais ouvert. Elle suit maintenant l'historique réel des écrans affichés, opération et recherche comprises. Revenir depuis une opération ouverte en recherche restitue la recherche : le champ affichait les mots tapés pendant que la liste montrait tout le catalogue.
Le catalogue dit quand il est filtré. Ses rubriques n'ont jamais disparu : elles sont masquées le temps d'une recherche, et une recherche oubliée dans le champ donnait un catalogue apparemment déclassé. Un bandeau l'annonce, avec le nombre de correspondances et un bouton pour revoir tout le catalogue.
Trois corrections d'affichage. Les colonnes s'élargissent jusqu'au bout du texte : un plafond bornait la largeur calculée, ce qui était voulu, mais aussi le redimensionnement à la souris, ce qui ne l'était pas. L'explication d'une ligne ne s'affiche plus deux fois — depuis qu'elle se déplie sous sa ligne, l'encart sous le tableau la répétait mot pour mot. Et la flèche de retour reste lisible au survol : son glyphe est devenu le contenu du bouton, un enfant construit à part ne recevait pas la couleur de survol et disparaissait, bleu sur bleu, au moment précis où on le pointait.
Sept corrections d'usage, dont deux qui changent ce que le logiciel montre.
Les applications de l'annuaire arrivent enfin sur la page d'accueil. C'était l'angle mort le plus coûteux du logiciel : l'accueil comptait les applications avec la commande d'Exchange, celle qui précisément ne voit pas les applications déclarées dans l'annuaire. Le chiffre affiché était donc faux au sens le plus gênant — trop bas, et rassurant. La page lit maintenant l'annuaire par Graph dès que le canal est ouvert, et présente cet inventaire AVANT celui d'Exchange : un chiffre faux lu en premier devient celui qu'on retient. Deux alertes l'accompagnent : les clés d'accès créées dans les quatre-vingt-dix derniers jours, et l'écart entre les deux inventaires. Canal fermé, la page se remplit comme avant et le dit.
La photographie photographie tout. Elle ne gardait que les six familles que la resynchronisation sait réécrire — un brouillon de restauration, pas une photographie. Elle parcourt désormais la même liste que le bilan complet : filtres anti-hameçonnage, règles de flux, stratégies de sécurité, rôles d'administration, groupes, conservation, tout ce que la session permet de lire. Une famille ajoutée au bilan entrera d'elle-même dans la photographie ; deux listes à tenir auraient divergé, et c'est la photographie qui aurait perdu.
Exporter photographie d'abord. Choisir un fichier de sortie puis s'entendre répondre qu'il n'y a rien à sortir était un dialogue absurde. L'export prend maintenant une photographie à l'instant même, l'écrit dans le fichier et la garde aussi de votre côté pour rester comparable. Une case permet de revenir à l'ancien comportement pour exporter une photographie ancienne. Le fichier est proposé d'emblée, horodaté, à côté de l'exécutable : plus rien à saisir.
La case des conditions se verrouille pour de bon. La correction précédente ne traitait qu'une moitié du problème. L'étendue du texte n'est pas seulement nulle au premier passage : elle est PARTIELLE tant que le texte n'a pas été replié sur sa largeur réelle, et vingt pixels dans un cadre de quatre-vingt-douze passent encore pour « tout est visible ». Le code ne conclut donc plus jamais depuis la mise en page : la case ne s'ouvre que sur un défilement réel arrivé en bas, le cas du texte court étant jugé à part, une fois la mise en page arrêtée. L'infobulle suit l'état au lieu de réclamer indéfiniment de dérouler.
Les boîtes que Microsoft a créées ne vous sont plus reprochées. La boîte de recherche DiscoverySearchMailbox{...}, les boîtes système, de fédération et de migration sont provisionnées d'office par Exchange : aucune ne correspond à une personne, aucune ne se connecte. Les compter parmi les boîtes exposées noyait le seul cas qui compte.
Le bouton de dépliage s'affiche. Il apparaissait vide : les gabarits des colonnes ajoutées aux tableaux étaient montés par analyse de chaîne à l'exécution, ce qui échoue sans lever la moindre erreur. Ils sont maintenant écrits dans la vue, donc vérifiés à la compilation, conformes aux styles de l'application, et le glyphe suit l'état ouvert ou fermé.
Les réglages mènent où ils annoncent. « Exporter la configuration » ouvre l'opération d'export, qui photographie et écrit — un seul geste au lieu de deux écrans successifs.
Un avertissement de compilation apparu à la publication Windows : la colonne de dépliage lisait la table d'une vue de données sans tenir compte de ce que cette table peut, en théorie, être absente. Le cas est maintenant traité comme les autres — on renonce à la colonne au lieu de présumer. Zéro avertissement, zéro erreur, et c'est la règle du projet : un avertissement toléré aujourd'hui en cache dix demain.
Au passage, publish.bat portait deux fois le même libellé de sortie d'erreur — en batch, le second est du code mort qui a l'air vivant. Le doublon est retiré, et contrôlé.
Fusion des deux lignées de la v4.20.0, et cinq demandes d'usage traitées.
Les deux lignées réunies. Deux conversations de travail avaient produit deux v4.20.0 : l'une portait l'export et l'import de configuration en boutons dans les réglages, l'autre — celle-ci — les portait en opérations du catalogue, avec la resynchronisation en plus. La comparaison fichier par fichier a montré que tout le reste était commun. Les opérations du catalogue restent la seule implémentation ; les réglages retrouvent leur section « Configuration Exchange », dont les deux boutons MÈNENT à ces opérations au lieu d'en dupliquer la logique. Deux implémentations du même geste finissent toujours par diverger.
Les identifiants d'opérations deviennent des liens. Les tableaux pédagogiques disaient « où le traiter ici : security.apps, puis security.apps.revoke » sans permettre d'y aller. Chaque tableau qui cite des opérations porte maintenant une colonne « Ouvrir ici » : un bouton par opération citée, dans l'ordre du texte, le titre complet en survol. La détection est fermée sur le catalogue réel — seul un identifiant d'opération existante devient un lien, une adresse ou un domaine ne peuvent pas être pris pour un.
L'explication d'une ligne se déplie au lieu de fuir. Le pavé « ce que cette ligne implique » vivait dans une bulle de survol : il fallait savoir qu'elle existait, immobiliser la souris, et tout disparaissait au premier mouvement. Un bouton « + » en tête de ligne déplie désormais l'explication sous la ligne, où elle reste tant qu'on ne la referme pas — plusieurs lignes peuvent être ouvertes en même temps pour comparer. Les bulles ne gardent que ce qui relève d'elles : la valeur entière quand la colonne la tronque, et les définitions du dictionnaire des commandes.
L'alerte des protocoles anciens dit LESQUELLES. « 1 boîte accepte encore POP ou IMAP » obligeait à ouvrir une autre page pour savoir laquelle. L'alerte nomme maintenant les boîtes concernées, et « Refermer ces protocoles » arrive sur le formulaire avec ces adresses déjà en place. Le champ accepte d'ailleurs plusieurs adresses séparées par des virgules, pour tous les usages.
Sans photographie, on est guidé au lieu d'être grondé. Exporter ou resynchroniser sans photographie n'affichait qu'un refus. Le résultat explique désormais ce qu'est une photographie, pourquoi il en faut une, et mène d'un clic à l'opération qui la prend.
Le champ de recherche se montre en entier. La page du catalogue garde sa position de défilement ; ouvrir la recherche depuis la barre latérale pouvait donc laisser le champ hors de vue ou coupé. La page remonte maintenant en haut avant de donner le curseur.
Le troisième et dernier incrément du chantier des photographies, quatre lectures d'annuaire nouvelles, un correctif sur les conditions d'utilisation, et le passage de tous les textes fixes par le gabarit de traduction.
Resynchroniser les réglages sur une photographie. La seule opération de la rubrique qui écrive dans la messagerie : elle relit l'état RÉEL au moment même de l'opération, le compare à la photographie choisie, et ramène les valeurs qui diffèrent à celles de la référence. Cinq familles, chacune derrière sa propre case, toutes décochées d'office : connecteurs entrants, sortants, réglages d'organisation, renvois et traces des boîtes, protocoles de connexion. Seules les MODIFICATIONS sont réappliquées — un objet apparu est signalé sans être touché, un objet disparu n'est pas recréé, et les règles de boîte sont exclues : ce qu'un utilisateur a créé ne s'écrase pas. La simulation, cochée d'office, montre chaque écart valeur actuelle contre valeur cible. L'écran de confirmation dit ce que le geste est vraiment : un RETOUR EN ARRIÈRE, qui écrasera aussi les modifications légitimes faites depuis la photographie. Chaque valeur écrasée est mémorisée avant écriture et se restaure depuis la rubrique Annuler.
Un défaut de restauration corrigé avant d'avoir mordu. Trois opérations mémorisaient les renvois de boîte sous un type que la restauration ne connaissait pas : annuler aurait levé « type de restauration inconnu » au moment précis où l'on comptait dessus. Le cas manquant est écrit, et un contrôle du banc vérifie désormais que tout type mémorisé sait se restaurer.
Quatre lectures d'annuaire nouvelles, en lecture seule. Les clés d'accès des applications avec leurs dates — la page qui trouve une clé ajoutée à une application légitime pendant une intrusion, la persistance la plus discrète qui soit. Le journal des gestes de l'annuaire — créations d'applications, consentements, rôles — que la messagerie ne journalise jamais. Le réglage du consentement : qui, dans l'organisation, peut dire oui à une application. Et les abonnements souscrits, avec détection d'Entra ID P1 et P2, pour savoir enfin si un refus vient d'une licence ou d'une configuration. Aucune autorisation nouvelle, aucune licence requise.
Les conditions d'utilisation se verrouillent vraiment. La case « J'accepte » pouvait se cocher sans avoir déroulé le texte : le premier signal de défilement arrive pendant la mise en page, quand rien n'est encore mesuré, et « rien à dérouler » se confondait avec « tout est lu ». Une garde ignore les passages à mesure nulle ; la case ne s'ouvre plus qu'après un vrai défilement jusqu'en bas — ou quand le texte, réellement mesuré, tient entier dans le cadre.
Tous les textes fixes passent par le gabarit de traduction. La phrase de confirmation des opérations rejoint le catalogue, et chaque libellé écrit dans les vues y passe par une propriété attachée — cent cinquante-quatre libellés, la clé dérivée du texte pour qu'un même mot ne se traduise qu'une fois. Le gabarit exporté depuis les réglages contient désormais l'intégralité des textes fixes dès le premier lancement. Les textes composés à l'exécution (résumés chiffrés, avertissements) restent à convertir en gabarits à trous : ce sera le travail de la traduction effective.
Premiers des trois incréments du chantier export / import / resynchronisation des réglages Exchange. Ces deux-là ne touchent à rien : ils écrivent et relisent des fichiers, sur le poste. C'est ce qui les rend livrables séparément de la resynchronisation, qui écrira dans la messagerie et n'existe pas encore.
Sortir une photographie dans un fichier. Les photographies prises par la rubrique Référence vivaient dans un dossier caché du profil Windows, sans autre issue que ce poste. Elles se sortent maintenant vers l'emplacement de votre choix : un partage, une clé, un dépôt de documents. Le format est du JSON lisible, ouvrable dans un éditeur de texte. Une option masque les domaines et les identifiants pour un fichier destiné à un tiers, avec l'avertissement qui va avec : un fichier anonymisé n'est plus comparable à vos photographies non masquées.
Comparer avec un fichier. Relit un fichier venu d'ailleurs et le confronte à votre photographie la plus récente. Rien n'est modifié dans la messagerie, et l'explication de l'opération le dit noir sur blanc plutôt que de demander qu'on le croie. Un fichier concernant une autre organisation est lu, affiché, mais NON comparé : deux organisations ne partagent ni les mêmes boîtes ni les mêmes connecteurs, et le différentiel aurait signalé la totalité du tenant comme apparue ou disparue. Si le fichier se range dans vos photographies, il est rangé sous l'organisation qu'il déclare et non sous celle où vous êtes connecté.
Le cas du fichier plus récent que la photographie locale est détecté et signalé : les écarts se lisent alors à l'envers, ce qui est dit « apparu » a en réalité disparu.
Un nouveau type de champ, le chemin de fichier. Saisie libre doublée d'un bouton « Parcourir » qui ouvre le sélecteur du système. Ouvrir un fichier existant et désigner un fichier à écrire ne sont pas la même promesse : le descripteur porte le mode, l'enregistrement prévient avant d'écraser, et le sélecteur se rouvre dans le dossier déjà pointé plutôt qu'à l'emplacement par défaut.
Le refus de lecture d'un fichier distingue sa cause : absent, vide, démesuré, JSON tronqué, sans organisation, sans famille d'objets. Un fichier valide mais suspect passe avec un avertissement plutôt qu'un refus — aucun objet capturé, famille sans clé d'identité, date de capture dans le futur.
Trente-quatre contrôles de banc, dont l'aller-retour export puis import joué pour de vrai sur disque avec vérification que le différentiel contre soi-même est vide, la validité du JSON après anonymisation, et le câblage réel du sélecteur dans la vue et le modèle de vue. Ce dernier point est le piège déjà rencontré deux fois : un descripteur écrit et jamais branché donne un champ sans bouton, où il faut taper le chemin à la main.
Les conditions générales manquaient sur l'écran de reprise de session. Elles n'étaient posées que sur le formulaire de connexion complet, or « Reprendre » est un chemin distinct : un jeton déjà en cache saute le formulaire, et la case n'apparaissait nulle part alors que le bouton restait grisé. Les conditions sont désormais sur le voile lui-même, communes aux deux chemins.
Trois correctifs signalés en usage.
Le texte des boutons de la barre latérale suit enfin le survol comme leur icône. Le gabarit passait bien son contenu au blanc, mais cet héritage n'atteignait pas un TextBlock enfant : le texte restait bleu sur bleu, illisible au moment où on le pointe. Un style dédié pose le déclencheur explicite, le même qui faisait déjà passer « Annuaire ouvert » au blanc sans faute.
L'usage des boîtes s'affiche « utilisé / plafond » partout, y compris dans l'audit complet. Le « 47 % du plafond » y traînait encore : un pourcentage seul ne dit rien, « 46,73 Go / 100 Go » donne la mesure.
Trois relevés ne sont plus silencieusement sautés. SafeAttachment, SafeLinks et ServicePrincipal échouaient sur « unsupported compression method », une panne de décompression que le repli « sans compression » n'attrapait pas, faute d'être du bon type d'exception. Le repli reconnaît désormais la famille par le type ET par le message, et réessaie sans compression.
Conditions générales d'utilisation, à l'identification.
Un cadre déroulant de cinq lignes sur l'écran de connexion porte les conditions : décharge complète de responsabilité (l'utilisateur est seul responsable de l'usage et de toute mauvaise manipulation), absence de garantie, précautions attendues, aucune donnée transmise à un tiers. Trois verrous en cascade : la case « j'accepte » ne devient cochable qu'une fois le texte déroulé jusqu'en bas, et le bouton « Se connecter » reste inactif tant qu'elle n'est pas cochée. Le texte vit dans le noyau (ConditionsService) : sept contrôles du banc vérifient qu'il dit ce qu'il doit dire et que les trois verrous restent câblés — vérifiés en réintroduisant le défaut.
Les pages qui n'ont rien à demander s'affichent d'un clic.
Certaines pages ne relèvent rien et ne réglaient rien : « Consoles Microsoft » est une liste, elle ne demande aucune connexion. L'étape « Renseigner et vérifier » n'y montrait qu'un bouton « Lancer » à cliquer dans le vide. Le drapeau Immediat existait sur ces actions depuis longtemps mais n'était branché nulle part : la même erreur que le dictionnaire écrit et jamais appelé. Il est maintenant câblé — une action Immediat se lance toute seule au clic et amène droit au résultat, sans étape intermédiaire.
Un contrôle du banc protège ce raccourci : une action Immediat doit être en lecture seule, sans champ à renseigner et sans confirmation. Le poser sur une action qui écrit ou qui demande une décision reviendrait à décider à la place de l'utilisateur — le contrôle échoue si cela arrive. Vérifié en réintroduisant le défaut.
Les domaines, en lignes plutôt qu'en pavés. L'accueil affichait les domaines en deux cartes de texte : la liste d'un côté, la répartition des boîtes de l'autre, chacune sous un paragraphe d'explication imposé en permanence, avec un reservoir-mode.com : 11 posé en trente pixels de gras. C'était l'inverse exact de la règle que le logiciel s'impose partout ailleurs — la donnée visible, l'aide repliée — et cela se voyait. Une seule carte les remplace, une ligne par domaine : le nom, une pastille de rôle (principal, relais interne, secondaire), une barre de part de boîtes, le compte à droite. Un domaine déclaré sans aucune boîte passe en orange : c'est le cas de la porte déclarée que rien ne surveille, soit qu'elle ne serve plus, soit qu'elle serve d'attrape-tout. Le domaine technique en « onmicrosoft » reste écarté du compte, signalé sans être compté. La barre est toujours la barre horizontale, le seul type de graphique du logiciel, avec la même mécanique de colonnes proportionnelles que les graphiques — donc aucun nombre à virgule sensible à la langue de la machine.
Le texte des cartes se replie. Sur les tuiles de chiffres et les réglages d'organisation, l'explication n'est plus plaquée sous la valeur : elle passe à l'infobulle de la carte. La donnée — le chiffre, l'état, l'action — reste sous les yeux ; l'aide est disponible si on la cherche, jamais imposée. C'est la même règle que les accordéons fermés du reste de la page.
Six contrôles nouveaux protègent l'infographie des domaines : le technique reste écarté, le principal reste en tête, un domaine sans boîte reste marqué. Chacun a été vérifié en réintroduisant le défaut qu'il vise.
La page d'accueil refaite. Elle est la première chose qu'on voit, et un tableau de bord terne se referme sans qu'on ait regardé les alertes qu'il portait. La couleur, les pictogrammes et la hiérarchie des tailles ne sont donc pas des décorations : ce sont les moyens de faire lire ce qui compte.
La couleur porte le verdict, le pictogramme porte le sujet. Une enveloppe pour les boîtes, un globe pour les domaines, un cadenas pour l'envoi anonyme — jamais une icône d'alerte pour dire ce que le rouge dit déjà. Leur faire répéter la même chose gaspillerait l'un des deux.
Les pictogrammes vivent dans une table unique du noyau plutôt qu'éparpillés à chaque construction de carte : c'est le seul moyen de vérifier d'un coup d'œil qu'on n'a pas mis deux fois le même sur des tuiles voisines.
- Ajouté : Un bandeau de tête en dégradé, avec un grand pictogramme en filigrane et la fraîcheur du relevé sous le titre. Les boutons y sont retaillés pour un fond saturé : le style ordinaire suppose un fond pâle.
- Ajouté : Des tuiles teintées par verdict, avec un badge coloré, le chiffre en 30 points et le pictogramme repris en filigrane dans le coin. Une teinte à quelques pour cent suffit à classer une carte au premier regard sans fatiguer l'œil : un aplat saturé sur une carte entière fait perdre la hiérarchie, tout devient également urgent donc plus rien ne l'est.
- Ajouté : Le bloc des alertes repensé en bandeau rouge à en-tête plein, chaque point numéroté par une pastille et suivi de sa porte de sortie.
- Ajouté : Les réglages globaux en pastilles d'état plutôt qu'en lignes de tableau. Ces valeurs se lisent par leur état — active, coupée, refusée — et une pastille colorée le donne avant qu'on ait lu l'intitulé.
- Ajouté : Des barres en dégradé, avec une puce de couleur devant chaque étiquette. Le dégradé ne change rien à la valeur représentée : il donne du relief à une forme plate. Un seul type de graphique, comme avant.
- Ajouté : Une apparition en fondu montant, deux dixièmes de seconde. Une animation qu'on remarque est une animation qui gêne ; celle-ci évite seulement que la page ne surgisse d'un bloc. Une refonte visuelle touche presque chaque ligne du fichier, et c'est exactement le moment où une liaison disparaît sans que personne le remarque : rien ne casse, un bloc cesse simplement de s'afficher. C'est arrivé ici — un bouton avait sauté. Un contrôle du banc liste désormais tout ce que la page doit continuer de montrer. La prochaine refonte ne pourra plus rien perdre en silence.
- Modifié : Le voile de connexion est plus large de 20 %, de 470 à 564 points. L'adresse du compte repris en profite : une adresse technique de tenant dépasse quarante caractères et se coupait au milieu du dernier mot.
Sauvegarde des réglages, et une pastille qui répond à une question qu'on se pose toujours au mauvais moment.
- Ajouté : Sauvegarde et restauration des réglages en JSON. Reconfigurer cet outil sur un poste neuf demande de retrouver un identifiant de tenant, une empreinte de certificat, une liste de comptes protégés et une dizaine de préférences. Personne ne s'en souvient, et personne ne devrait avoir à s'en souvenir. Le JSON parce qu'il se relit sans ce logiciel : le jour où quelque chose ne va pas, pouvoir ouvrir le fichier dans un éditeur vaut mieux que n'importe quel format compact. Il porte un numéro de format, faute de quoi il deviendrait illisible à la première évolution.
- Ajouté : Chiffrement des secrets, AES-256-GCM avec une clé fabriquée par PBKDF2-SHA256 en 600 000 passages. Ce nombre est le seul rempart entre une phrase de passe médiocre et quelqu'un qui essaie des millions de mots : vous le payez une fois, l'attaquant le paie à chaque essai. Il est écrit dans le fichier, pour que l'augmenter un jour ne rende pas illisibles les sauvegardes déjà faites. La marque d'authenticité compte autant que le chiffrement : sans elle, on pourrait modifier le contenu sans que personne s'en aperçoive. Avec elle, un seul octet changé fait échouer la lecture au lieu de rendre n'importe quoi.
- Ajouté : Deux vérités dites à l'écran, sans détour. La phrase de passe n'est enregistrée nulle part, la conserver reviendrait à ranger la clé à côté du coffre — donc phrase perdue, contenu perdu, sans récupération ni recours. Et un fichier contenant des secrets est un objet qui ouvre des portes : la sauvegarde sans secret est le mode par défaut. Sans secret, l'empreinte de certificat est retirée elle aussi : elle ne donne pas l'accès à elle seule, mais elle désigne précisément quoi voler sur le poste.
- Ajouté : Pastille « compte protégé » à droite de l'adresse du compte connecté. Verte s'il figure dans les comptes protégés, orange sinon. Elle répond à une question qu'on se pose juste avant de lancer quelque chose d'irréversible : suis-je à l'abri de ce que je m'apprête à faire ? L'absence est signalée et non tue, le garde-fou refusant les actions de masse dans ce cas.
- Corrigé : Un fichier de sauvegarde au contenu tronqué levait une exception jusqu'à l'appelant au lieu d'être signalé. Trouvé par le contrôle écrit pour ça.
Quatre défauts d'affichage, dont trois sont des violations d'une règle que ce projet s'était donnée.
- Corrigé : Les icônes de la barre latérale devenaient illisibles au survol. Le style passe le texte en blanc quand le fond devient bleu, mais un TextBlock qui déclare sa propre couleur ne l'entend pas : une valeur explicite l'emporte sur la valeur héritée. L'icône restait donc bleue, indigo ou rouge sur un fond bleu, au moment précis où on la pointe. Un style dédié résout la couleur de repos par un déclencheur et non par une valeur posée sur l'élément. Un contrôle du banc échoue désormais si une icône de la barre latérale fige sa couleur.
- Corrigé : Les infobulles étaient tronquées. Une bulle dont le contenu est une simple chaîne s'affichait sur une seule ligne, et la largeur maximale la coupait au milieu d'un mot — c'est-à-dire justement là où se trouvait l'information. Un gabarit typé sur la chaîne les renvoie à la ligne, sans toucher aux bulles dont le contenu est déjà construit à la main.
- Corrigé : Le bouton d'annuaire ne disait pas qu'il avait fonctionné. Il porte maintenant une coche verte et devient « Annuaire ouvert » une fois l'autorisation obtenue. Un bouton qui garde le même aspect après avoir marché laisse douter que quelque chose se soit passé.
- Corrigé : La page des appareils déclarés était introuvable. Elle figurait bien dans la liste depuis la 4.7.0, mais deux choses la rendaient invisible : le titre du tableau ne portait que le mot « Annuaire », noyé au milieu de six tableaux qui se ressemblent, et le résumé de la page était écrit deux fois, le second écrasant le premier. Le résumé annonce désormais les rubriques, les titres portent le nombre de consoles, et un contrôle du banc vérifie la présence des adresses dans le RÉSULTAT produit, pas dans le code source. La question ne se reposera pas.
Le mode alerte, et la fin d'un formulaire qu'on remplissait pour rien.
- Ajouté : « Couper tous les accès applicatifs », dans la rubrique Mise en sécurité. C'est l'ordre inverse de l'intuition, et c'est le bon. Le réflexe, quand on découvre une intrusion, est de chercher par où elle est entrée. Pendant ce temps, l'intrus travaille toujours. On contient d'abord, on analyse ensuite, et l'analyse sera d'ailleurs plus facile sur un tenant qui ne bouge plus. Ce qui rend cet ordre acceptable, c'est que tout est réversible. Une application désactivée se réactive, une session révoquée se rouvre par une reconnexion. Le coût d'une coupure inutile est un après-midi désagréable ; celui d'une intrusion laissée ouverte pendant qu'on enquête se compte en semaines. Chaque coupure est notée dans la mémoire d'annulation.
- Ajouté : Deux garde-fous qui ne se négocient pas. Les applications publiées par Microsoft ne sont jamais touchées : les couper casserait le tenant plus sûrement que l'attaquant. Le tri porte sur le tenant d'origine et non sur le nom, un nom se choisissant — « Microsoft Sync Service » est exactement l'intitulé que porte une application malveillante. Et le logiciel ne se coupe pas lui-même : se priver d'accès en pleine urgence, c'est perdre jusqu'à la possibilité d'annuler.
- Ajouté : Autorisations demandées au plus étroit. Trois gestes sur quatre ont une autorisation dédiée : User.RevokeSessions.All, DelegatedPermissionGrant.ReadWrite.All, AppRoleAssignment.ReadWrite.All. Prendre Application.ReadWrite.All pour tout faire d'un coup aurait été plus simple, et aurait donné à ce logiciel le droit de créer des applications et de leur ajouter des secrets, c'est-à-dire exactement le pouvoir dont l'attaquant s'est servi. Cette autorisation-là est isolée dans une demande séparée, qu'on peut refuser tout en gardant les trois autres.
- Ajouté : Consentement en deux temps. Lire l'annuaire et le modifier sont deux décisions distinctes, donc deux boutons et deux écrans de consentement. Les fondre ferait accepter la seconde en pensant à la première.
- Modifié : Le formulaire de connexion disparaît quand un jeton dort déjà sur le poste. La lecture du cache est locale et ne réveille personne. Demander un tenant et un compte alors qu'on connaît les réponses, c'est faire remplir un formulaire pour rien. La carte propose « Reprendre », avec le compte trouvé. « Utiliser un autre compte » reste dessous : un jeton en cache peut avoir expiré ou avoir été révoqué, et la reprise doit pouvoir échouer sans que cela ressemble à une panne.
- Modifié : Amorces « facultatif » sur les deux champs qui le sont réellement.
Le dictionnaire livré en 4.11.0 était branché dans le rapport HTML et nulle part dans le logiciel. Incohérence gênante : le document imprimé permettait de contredire l'outil, l'outil lui-même demandait qu'on le croie sur parole.
- Ajouté : Page « Dictionnaire des commandes », consultable et filtrable. Aucun appel au service : tout ce qu'elle affiche est écrit dans le logiciel. Elle annonce sa couverture exacte en tête.
- Ajouté : Chaque tableau de résultats nomme sa commande d'origine, avec deux boutons : la page d'administration Microsoft où retrouver la même information à la main, et la documentation officielle. Le lien vers la documentation fonctionne même pour une commande absente du dictionnaire, l'adresse étant déduite de son nom.
- Ajouté : « Ce que ces colonnes veulent dire », en accordéon fermé sous chaque tableau. C'est de l'aide : disponible si on la cherche, jamais posée devant les yeux.
- Ajouté : Les noms de propriétés sont indexés par la recherche. Taper AuditDisabled ou ForwardingSmtpAddress dans le catalogue ramène au dictionnaire. C'est le geste naturel : on tape le nom qu'on a sous les yeux. L'ouverture d'adresse n'accepte que le HTTPS. Une adresse de portail est une chaîne comme une autre, et le contrôle reste posé pour qu'une inattention future n'en fasse pas un moyen d'ouvrir n'importe quoi.
Trois demandes : le détail derrière chaque chiffre global, les liens de vérification partout, et le début du dictionnaire des commandes.
- Ajouté : Le dictionnaire des commandes (demande № 11), première vague : 24 commandes, 120 propriétés décrites. Chaque entrée dit ce que la commande relève, POURQUOI on la lit, et ce que chaque valeur signifie réellement — AuditDisabled devient « les traces sont coupées pour toute l'organisation, aucune boîte n'enregistre plus rien ». La couverture est partielle et le logiciel l'affiche. Une couverture partielle annoncée reste utilisable ; présentée comme complète, elle fait conclure à tort qu'une propriété non décrite est sans importance. Trois pièges du projet y sont consignés, là où on les lira au bon moment : les tailles Exchange dont il faut prendre les octets entre parenthèses, la propriété DKIM qui renvoie la cible et non le nom, et la commande d'inventaire des applications qui ne voit pas celles de l'annuaire.
- Ajouté : Les liens de vérification. Chaque tableau porte la commande qui l'a produit, et mène à deux adresses : la page d'administration Microsoft où retrouver la même information à la main, et la documentation officielle de la commande. Un outil qui affiche un chiffre sans dire d'où il vient demande qu'on lui fasse confiance, et c'est beaucoup demander quand on prend des décisions qui engagent. On doit pouvoir le contredire. Le rapport HTML les affiche aussi, avec le sens de chaque colonne dans un bloc replié.
- Ajouté : Le détail derrière chaque chiffre global. Un graphique peut désormais désigner le tableau qui détaille ce qu'il résume, et le rapport y pose un lien. « Zéro boîte n'enregistre rien » va très bien tant que la valeur est zéro ; le jour où elle vaut trois, la question devient LESQUELLES, et un graphique seul n'y répond pas.
- Corrigé : Ralentissement des infobulles. Elles étaient posées par une liaison multiple dans le style de cellule : WPF évaluait cette liaison, convertisseur compris, pour CHAQUE cellule de CHAQUE colonne dès la mise en page. Sur un tableau de quatre cents lignes et huit colonnes, cela faisait trois mille deux cents constructions de chaîne pour un texte que personne ne lira, et le défilement s'en ressentait. L'infobulle est maintenant construite à son OUVERTURE. Le travail passe de plusieurs milliers de constructions à une seule : celle qu'on regarde.
Demandes № 9 et № 3 : la rubrique Annuaire, et la fin d'une limite mal formulée.
- Ajouté : Rubrique Annuaire, trois opérations en lecture seule, alimentées par le canal ouvert en v4.9.0. « Les applications que la messagerie ne voit pas » est celle qui compte. Elle liste les applications d'entreprise avec leurs autorisations réelles, et traduit chaque droit en ce qu'il permet : Mail.Send devient « expédier au nom de n'importe quelle adresse », Mail.ReadWrite devient « lire, modifier et supprimer le courrier de toutes les boîtes ». Elle distingue les droits d'application, qui agissent seuls sur toute l'organisation, des droits délégués, qui suivent les limites de la personne connectée. « Les postes rattachés » montre les appareils déclarés avec leur dernière activité, et distingue un poste enregistré — appareil personnel, non géré — d'un poste joint. Les confondre fait surestimer le contrôle réel sur le parc. « Quelles preuves d'identité sont réellement acceptées » classe les méthodes d'authentification sur un critère unique : résistent-elles à un attaquant qui relaie la vraie page de connexion à travers son serveur ? Elle signale aussi une migration inachevée depuis le dispositif hérité, déconseillé au 30 septembre 2025 — cause fréquente d'un second facteur qui se déclenche à un endroit et pas à un autre.
- Ajouté : Bouton « Ouvrir l'annuaire » en pied de barre latérale. Un bouton, et non une ouverture automatique : le consentement est distinct de celui de la messagerie. Un outil qui apprend à se méfier des consentements arrachés ne peut pas en arracher un. Un refus n'est pas une panne, et le reste continue de fonctionner.
- Corrigé : Rembourrage des boutons de lien du tableau de bord. Le style pose Padding="10,6" ; l'écraser par 0,4,0,0 supprimait tout espace horizontal, et le fond bleu du survol venait épouser les lettres sans un pixel de marge. La marge gauche est décalée d'autant, pour que le libellé reste aligné sur le texte au-dessus. Une phrase de la version précédente était mal calibrée. La limite sur les applications d'entreprise est celle de l'API Exchange, pas « aucune API » : Graph les liste parfaitement, et c'est exactement ce que fait cette version.
Correctif de plantage au démarrage, et le contrôle qui aurait dû l'empêcher.
- Corrigé : Le logiciel ne démarrait plus. Le bouton « Rechercher » ajouté en v4.7.0 citait une ressource Ios.Gray, qui n'existe pas : le nuancier va de Ios.Gray1 à Ios.Gray6. La fenêtre tombait au premier affichage avec une XamlParseException.
- Ajouté : Un contrôle sur les ressources de thème, et c'est le vrai sujet de cette version. La compilation du XAML ne voit pas ce genre d'erreur. Un StaticResource n'est résolu qu'à l'exécution, au moment où l'élément est mesuré : le projet compile, le BAML se génère, et le logiciel tombe quand même au démarrage. Le banc d'essai confronte désormais chaque référence de chaque XAML aux clés réellement déclarées, DynamicResource compris. Un second contrôle vise l'erreur exacte commise ici : citer un palier de nuancier sans son numéro. Elle est assez naturelle pour se reproduire, donc elle est nommée. Le contrôle a été vérifié en réintroduisant volontairement la faute : il la signale. Un contrôle qui ne tombe pas sur le défaut qu'il vise ne sert à rien.
Deux corrections de lisibilité signalées sur le rapport, et l'ouverture du canal d'annuaire.
- Corrigé : L'explication n'est plus recopiée sous chaque ligne. Sur un tableau de douze boîtes partageant la même phrase, elle apparaissait douze fois, intercalée entre les données. Le tableau devenait illisible et l'aide, imposée — soit l'inverse exact de la règle du logiciel, qui veut une aide disponible si on la cherche et jamais posée devant les yeux. Les explications sont désormais dédupliquées et regroupées dans un bloc replié au-dessus du tableau. Chaque ligne conserve la sienne en infobulle, ce qui ne coûte pas un pixel tant qu'on ne survole pas.
- Corrigé : Les arborescences de dossiers sont rendues en arbre. Une liste plate faisait lire quarante fois le même préfixe sans jamais montrer la forme de l'ensemble, qui est pourtant toute l'information. Le rapport détecte une colonne de chemins et dessine le volet de dossiers : retrait par profondeur, racine distinguée, seul le nom du dossier affiché, le reste des colonnes en marge.
- Corrigé : Le document HTML ne se refermait pas. Ni </body> ni </html>.
- Ajouté : Le canal d'annuaire (GraphClientService), fondation de la demande № 9. Jeton distinct de celui de la messagerie : un jeton vaut pour une ressource, et ils ont des consentements et des durées séparés. Conséquence utile — l'annuaire peut être refusé sans que le reste du logiciel cesse de fonctionner. Six autorisations, toutes en lecture. Tant que ce canal ne sait que voir, un consentement accordé par erreur ne peut rien casser. Il ouvre ce qu'Exchange ne saura jamais dire, et notamment le point le plus grave : Get-ServicePrincipal ne renvoie que les références créées côté Exchange. Une application peut recevoir le droit de lire ou d'envoyer du courrier au niveau de l'annuaire et rester totalement invisible depuis la messagerie. C'est exactement ce vecteur qui permet à un intrus de survivre à un changement de mot de passe. Les refus sont traduits : consentement manquant, rôle insuffisant et abonnement incomplet ont trois causes différentes, et les confondre fait chercher une heure au mauvais endroit. Une seule entorse à la règle « aucun script dans le rapport », et elle est nécessaire : le CSS ne sait pas déplier un <details>. Un script de dix lignes ouvre les blocs d'aide au moment d'imprimer, puis les referme. Le papier n'a ni survol ni triangle à cliquer, et une aide qu'on ne peut pas ouvrir n'existe pas.
Demande № 1 du registre : le voile de connexion.
- Ajouté : Un voile au lancement, en deux temps. Avant le clic, un formulaire réduit à ce dont on a besoin neuf fois sur dix : le tenant, le compte, et le bouton. Tout le reste — modes applicatifs, empreinte de certificat, secret client — reste disponible d'un clic sous « Autre mode de connexion », mais cesse d'occuper l'écran d'accueil du logiciel. Neuf champs pour une action qui n'en demande que deux font hésiter avant même de commencer. Après le clic, l'indicateur à segments, le même que celui de la page d'accueil. Il se passe entre deux et trente secondes avant l'arrivée sur l'accueil, et l'écart ne vient pas du logiciel : la première étape ouvre le navigateur et attend Microsoft. Un écran figé pendant ce délai laisse croire à un blocage, au pire moment qui soit — la toute première impression.
- Ajouté : Quatre étapes nommées : ouverture de la session Microsoft, obtention du jeton, vérification du canal et des droits, ouverture de la messagerie. Chacune explique pourquoi elle prend le temps qu'elle prend. La première prévient que la fenêtre Microsoft s'ouvre parfois derrière celle du logiciel, ce qui est la cause la plus fréquente d'une attente qui semble sans fin. Un refus marque l'étape en orange plutôt que de tout arrêter : on voit exactement où cela a cassé, et les étapes suivantes se déclarent sautées au lieu de disparaître. L'indicateur est repeuplé à chaque tentative. Sans cela, un second essai après un refus du pare-feu repartait d'un anneau déjà tout vert, annonçant un succès qui n'avait pas eu lieu. Le voile ne se retire qu'une fois la page d'accueil montée. Le retirer plus tôt faisait clignoter l'écran de connexion entre deux vues. Un piège XML de plus, invisible jusqu'au chargement : un commentaire ne peut pas contenir deux tirets consécutifs. Les séparateurs en ---------- Titre ---------- cassaient le fichier. Un contrôle du banc parcourt désormais tous les commentaires de tous les XAML.
Première passe sur les quatorze demandes du 28/07. Le registre est désormais dans le projet, sous DEMANDES.md : une demande n'y est cochée que lorsqu'elle est faite ET vérifiée.
- Ajouté : Chaque carte de l'accueil mène quelque part. Une alerte sans lien n'est qu'un reproche : elle annonçait qu'une boîte accepte encore un protocole ancien, et laissait chercher parmi cinquante-six tuiles laquelle le referme. Chiffres de tête, réglages globaux et points à regarder portent maintenant l'opération qui les traite. Un contrôle échoue si l'une d'elles cite une opération qui n'existe pas.
- Ajouté : Les domaines de messagerie sur l'accueil, et le nombre de boîtes derrière chacun. Le domaine technique du tenant, en « onmicrosoft.com », est écarté du compte : il existe sur tous les tenants, personne ne l'a choisi, et le compter fait passer un tenant à un seul vrai domaine pour un tenant qui en a deux.
- Ajouté : Six portails d'annuaire, dont les appareils déclarés, les méthodes d'authentification et les journaux de connexion. Quand une page dit « cela vit dans l'annuaire », elle doit dire où.
- Ajouté : « Consoles Microsoft » en pied de barre latérale, au-dessus de l'aide. C'est la question qui vient quand une page annonce qu'elle ne peut pas régler quelque chose.
- Ajouté : « Rechercher » dans la barre latérale. La barre de recherche existait en tête du catalogue, mais il fallait y arriver puis remonter pour la voir. Une fonction qu'on doit chercher n'existe qu'à moitié. Le bouton mène au catalogue et place le curseur dans le champ.
- Corrigé : L'audit complet relevait quatre familles de moins qu'il ne l'annonçait. Comptes dispensés d'être enregistrés, attributions de rôles (applications comprises), membres d'« Organization Management », et adresses bloquées à l'envoi par Microsoft. Toutes étaient lues par des opérations ciblées, aucune par l'audit — soit exactement le genre de trace que l'on cherche après une intrusion. Un audit qui s'annonce complet doit l'être, ou dire où il s'arrête.
- Corrigé : Le compteur d'applications disait plus qu'il ne savait. Exchange ne connaît que les applications dont une référence a été créée chez lui ; l'annuaire peut en héberger d'autres, avec des droits plus larges et aucune trace ici. Le chiffre s'appelle désormais « Applications connues d'Exchange » et le dit.
L'accueil sait maintenant aller chercher, et le dit pendant qu'il le fait.
- Ajouté : L'accueil relit le tenant : automatiquement au premier passage quand rien n'est en cache, et sur clic ensuite. Neuf lectures globales, plus une lecture par boîte pour l'encombrement. La séparation d'avant est conservée, et c'est ce qui rend le changement sûr : DashboardService compose la page depuis le cache et ne connaît toujours pas le client, un contrôle échoue si le contraire arrive. Aller chercher est le travail d'un service à part, DashboardRefreshService, appelé sur décision. Tant que la composition ne sait pas appeler, il est impossible qu'un simple affichage déclenche un aller-retour réseau. L'ordre des relevés n'est pas décoratif : les réglages qui décident de tout viennent en premier. Quelqu'un qui interrompt au bout de trois secondes doit repartir avec l'état des traces, pas avec la liste des domaines.
- Ajouté : Indicateur d'attente à segments. Un indicateur indéterminé ment un peu : il tourne aussi vite au bout de trente secondes qu'au bout de trois, et ne dit ni ce qui est fait ni ce qui reste. Celui-ci porte l'information — un segment par relevé, disposé en anneau, gris en attente, bleu battant pendant la lecture, vert quand il aboutit, orange quand le service refuse, effacé quand on saute. Compteur au centre, nom du relevé en cours dessous. Le balayage tournant, le contre-balayage et les ondes ne servent qu'à montrer que le logiciel travaille pendant les secondes où aucun segment ne change d'état. Tout est vectoriel et animé par la composition, donc sur la carte graphique.
- Ajouté : Interruption à tout moment. Ce qui a été relevé avant l'arrêt reste enregistré avec sa date : une interruption n'est pas un échec, et la page se recompose sur ce qui a été obtenu.
- Ajouté : L'encombrement se décoche. C'est la seule étape dont le coût grandit avec la taille du tenant, puisqu'elle demande un appel par boîte. Le réglage est posé sur la page d'accueil et non enfoui dans les préférences, parce que c'est là qu'on décide de lancer la lecture. Il est retenu d'une session à l'autre.
- Ajouté : Un voile pendant la lecture. Il estompe la page sans la cacher. Les chiffres affichés pendant un rafraîchissement sont ceux d'avant : les laisser nets et cliquables inviterait à décider sur des valeurs en train d'être remplacées.
- Corrigé : Un refus du service n'écrase plus le relevé précédent. Remplacer une valeur datée par un échec ferait perdre une information qu'on avait. Deux pièges WPF évités, tous deux invisibles à la compilation et visibles seulement à l'exécution. Une valeur de Setter est scellée en même temps que le style et partagée par tous les éléments qui l'appliquent. Un Transform posé ainsi est figé, et toute animation dessus lève une exception. Les transformations sont donc déclarées par instance, dans le gabarit. Un Storyboard prend la durée de sa plus longue animation. Les trois ondes partant à 0 ; 0,85 et 1,7 seconde pour 2,6 secondes chacune, une répétition portée par le scénario aurait laissé un blanc d'une seconde et demie à chaque tour — le battement se serait arrêté au moment précis où le logiciel travaille. La répétition porte donc sur chaque animation.
Une page d'accueil, une rubrique pour anticiper l'intrusion, et deux régressions de navigation corrigées.
- Ajouté : Page d'accueil. L'écran qui suit la connexion montre ce que l'on sait déjà du tenant : chiffres de tête avec leur lecture, réglages qui s'appliquent à toute l'organisation, graphiques d'encombrement et de protocoles, et ce qui demande une décision. Un principe la gouverne sans exception : elle n'appelle jamais le service. Tout sort du cache local, avec la DATE de chaque relevé à côté. Trois raisons. Le quota d'appels est réel, et l'épuiser à l'ouverture de la fenêtre le consomme avant que l'utilisateur ait rien demandé. Quelqu'un venu lancer une opération précise n'a pas à patienter devant un écran qui se remplit. Et surtout : la moitié des chiffres d'un tableau de bord supposeraient un balayage complet pour être exacts, or un chiffre présenté comme courant alors qu'il a trois jours fait conclure « tout va bien » la veille d'un incident. Un chiffre daté est honnête. Quand rien n'a encore été relevé, la page ne reste pas vide : elle propose cinq étapes ordonnées. L'ordre n'est ni celui de la difficulté ni celui de l'intérêt, c'est celui de l'irréversibilité.
- Ajouté : Rubrique « Se préparer », placée en deuxième position et pas plus bas : c'est la seule dont l'oubli ne se rattrape jamais.
- Ajouté : « Serai-je capable d'enquêter après une intrusion ? » vérifie les quatre niveaux d'enregistrement, du plus grave au plus fin : le réglage d'organisation qui peut tout éteindre d'un coup, le journal unifié, le journal des gestes d'administration, et l'enregistrement boîte par boîte. Plus les comptes dispensés d'être enregistrés, et un tableau de ce que même des traces parfaites ne diront pas.
- Ajouté : « Comment ils s'y prennent » : dix schémas d'attaque réellement observés, chacun confronté au tenant. L'ordre est celui de la persistance et non de la fréquence — on commence par ce qui survit au changement de mot de passe, ce qui est l'inverse de l'ordre spontané.
- Ajouté : « Rétablir toutes les traces » remet en marche ce qui manque, simulation par défaut, en disant clairement qu'elle ne rattrapera pas le passé.
- Ajouté : Deux chapitres au runbook : la préparation à l'après-intrusion, et le recueil des schémas d'attaque, pour qui lit hors connexion.
- Ajouté : L'audit complet dépose ses relevés dans un espace de cache réservé à l'accueil. La page devient le reflet du dernier audit, sans un seul appel supplémentaire. Cet espace est cloisonné : aucune action ne peut y puiser à la place d'une lecture vraie, ce qui reste la règle sur tous les objets qu'un attaquant modifie.
- Corrigé : Le menu de gauche fait de nouveau défiler la page, et suit de nouveau le défilement. Le code cherchait la liste des rubriques en supposant qu'elle était le contenu direct de la zone défilante. Le jour où la barre de recherche l'a fait descendre d'un niveau, cette recherche par position a cessé de trouver quoi que ce soit — en silence. Rien ne plantait, rien ne s'affichait de travers : la fonction avait simplement disparu. La liste est désormais nommée et référencée par son nom.
- Corrigé : La flèche de retour ramène à l'accueil depuis le catalogue. Elle existait, se cliquait, et ne faisait rien : le catalogue se renvoyait à lui-même.
- Modifié : Le numéro d'étape du fil est posé explicitement au lieu d'être calculé depuis le rang dans l'énumération. Un numéro calculé se désaccorde en silence dès qu'on insère une étape, alors que les contrôles de portée, eux, comparent à des constantes.
- Modifié : La connexion aboutit désormais sur l'accueil et non sur le catalogue : cinquante-six tuiles d'un coup ne disent pas par où commencer.
- Corrigé : Un champ qui propose des valeurs devient une liste. Certains annonçaient « 3 valeurs proposées » au-dessus d'une zone de texte vide, sans aucun moyen d'atteindre ces valeurs : seuls les champs d'adresse devenaient une liste déroulante. La saisie libre reste possible.
- Corrigé : « Suppression définitive » ne s'affiche plus sur des gestes annulables. Quatre opérations étaient classées destructrices alors qu'elles posent des réglages ou désactivent, tout étant dans la mémoire d'annulation. À force d'annoncer « rien ne pourra être récupéré » sur ce qui se rattrape, on cesse de lire la phrase — y compris là où elle est vraie.
- Ajouté : Le catch-all peut poser l'envoi depuis les alias en même temps, et la page d'état le vérifie. Sans lui, on reçoit sur des adresses distinctes mais l'on répond sous l'adresse principale, que le correspondant découvre au premier échange.
L'aide est disponible sans être imposée.
- Modifié : L'aide est repliée par défaut. Nouveau style d'accordéon, réutilisable : en-tête cliquable, chevron qui pivote. Trois paragraphes d'explication au-dessus d'un formulaire repoussaient les champs hors de l'écran, et celui qui connaît déjà l'opération devait faire défiler pour arriver à ce qu'il vient faire.
- Modifié : L'explication est séparée des astuces. Les deux ne se lisent pas au même moment : « à quoi ça sert » répond à une question qu'on se pose une fois, les astuces à « comment m'en servir vraiment », qu'on se pose en revenant ou quand quelque chose ne va pas. Mélangés, ils donnaient un pavé que personne ne lit.
- Modifié : Le bloc À lire avant de continuer reste toujours ouvert. Ce n'est pas de l'aide, c'est un avertissement : le replier reviendrait à le cacher.
- Corrigé : Plus de fenêtre par-dessus celle du pare-feu. Au premier lancement, Windows demande l'autorisation et attend une réponse ; l'application en ouvrait une seconde par-dessus, ce qui obligeait à cliquer deux fois et donnait l'impression d'une panne. La connexion réessaie maintenant en silence toutes les deux secondes pendant quinze secondes, avec le décompte dans la barre du bas.
- Corrigé : Le message final est réécrit pour le cas où l'attente n'a rien donné : il distingue le refus explicite de l'antivirus qui bloque sans rien afficher.
- Corrigé : Le blocage était détecté au test de fumée, qui avait son propre message : il passe désormais par la même attente. Sans cette seconde correction, l'attente n'aurait jamais servi.
303 contrôles · 53 opérations
- Ajouté : Autoriser l'envoi depuis les alias. Un alias ne sert plus seulement à recevoir : le réglage existe et se pose pour toute l'organisation. Il met jusqu'à une heure à prendre effet.
- Modifié : Le catch-all est présenté pour ce qu'il permet vraiment. Au-delà du rattrapage de fautes de frappe : une adresse différente par service, qui dit lequel a laissé fuiter vos données, se traite sans toucher au reste, et ne peut jamais servir à se connecter puisqu'aucun compte n'existe derrière.
- Modifié : Les titres portent la mention « (catchall) », terme que tout le monde emploie.
- Corrigé : Les amorces des champs restaient affichées pendant la frappe, superposées au curseur, et portaient une marge écrite à la main dans chaque écran. Elles sont désormais dans le gabarit du champ : marge héritée, disparition au focus.
- Modifié : Aucune règle de tri n'est plus jamais supprimée. Le confinement effaçait des règles notées suspectes, dont des tris manifestement posés par l'utilisateur lui-même. Au pire elles sont désactivées, donc toujours lisibles et réactivables. Le seuil numérique est remplacé par un choix, avec « les montrer seulement » par défaut.
- Modifié : Chaque règle est présentée avec un verdict en trois tons et la question à se poser : ressemble-t-elle à quelque chose que l'utilisateur aurait pu poser ?
- Modifié : Survol des tuiles en vert très pâle, qui se distingue du gris des blocs environnants.
- Corrigé : Le journal d'audit est refusé par le canal d'administration. Le logiciel insistait pour chaque boîte, ce qui noyait le journal de session sous des avertissements identiques. Il tente maintenant quatre jeux de paramètres du plus riche au plus dépouillé, puis cesse d'essayer et le dit une fois.
289 contrôles · 52 opérations
- Ajouté : Boîte attrape-tout. Exchange Online n'a pas de réglage de ce nom : c'est un montage en trois pièces, posées d'un coup et dans le bon ordre. Une seconde opération vérifie l'état du montage domaine par domaine.
- Ajouté : Recherche sur les opérations, qui indexe aussi ce que chaque opération produit : commandes appelées et colonnes rendues. Quelqu'un tenant un compte-rendu retrouve la tuile depuis un nom de colonne, français ou technique. 1152 termes indexés.
275 contrôles · 50 opérations
Réaction à une intrusion, en deux temps.
- Ajouté : Alerte : faire le tour complet. Relève tout en un passage sans rien modifier, classe par urgence, et dit pour chaque constat quelle opération le traite.
- Ajouté : Confiner tout ce qui est touché. Applique en une fois ce qui est réversible et sans ambiguïté : preuves, sessions, renvois, règles désactivées, protocoles, traces. Ne touche à aucune application autorisée — le seul point qui demande une décision humaine. Il n'y a volontairement pas de bouton unique qui répare tout : nettoyer détruit les preuves, couper au hasard casse la production, et l'on peut se couper soi-même.
- Corrigé : Les barres de défilement horizontales s'affichaient comme une pastille flottante de dix pixels. Le style ne traitait que le cas vertical : largeur imposée à toutes les orientations, sens de glissement inversé, et zones cliquables reliées aux commandes verticales.
Renseigner avant, pas après.
- Ajouté : Aperçu contextuel. Une opération peut montrer ce qui existe déjà dès qu'un champ est renseigné — les alias d'une boîte, par exemple — au lieu de le révéler une fois l'opération lancée.
- Ajouté : Contrôles de saisie pendant la frappe. Format d'adresse et appartenance du domaine sont vérifiés sans appeler le service ; le bouton reste inactif tant qu'un problème subsiste.
- Corrigé : Le bouton « Récupérer » passait au bleu plein en gardant son texte bleu, donc invisible au moment où on le pointe.
- Corrigé : Les bulles d'aide s'ouvraient à la position du curseur, donc par-dessus l'élément qu'on venait de pointer.
- Ajouté : Le script de publication lance l'application publiée à la fermeture de sa fenêtre, et c'est bien l'exécutable autonome qui démarre.
- Ajouté : Anonymisation des fichiers produits, cochée par défaut. Domaines et identifiants sont masqués dans le compte-rendu, le tableur et le fichier de journal. Le nom de boîte est conservé, le remplacement est stable, et les domaines distincts le restent.
Ce qu'un changement de mot de passe ne coupe pas.
- Ajouté : Qui accède aux boîtes sans mot de passe. Liste les applications autorisées à lire ou expédier, avec ce que chaque rôle permet réellement, et signale celles qui n'ont aucune limite de portée. Ni un mot de passe changé ni une déconnexion ne les affectent.
- Ajouté : Retirer l'autorisation d'une application, le seul geste qui coupe.
- Ajouté : Un tableau « ce que cette page ne peut pas voir » est rendu systématiquement : une page de sécurité qui tait ses angles morts donne l'impression d'avoir tout vérifié.
- Ajouté : Voir les alias d'une boîte, opération de lecture dédiée.
- Ajouté : Le fil d'étapes devient cliquable et prend la couleur de la rubrique en cours. Les étapes franchies restent marquées — l'ancien indicateur n'allumait qu'un repère à la fois.
- Modifié : Terminologie des alias reprise : un alias n'est pas une adresse comme une autre, et la distinction explique la plupart des surprises.
- Modifié : Le domaine d'un alias est complété automatiquement depuis la boîte choisie.
- Corrigé : Le menu de gauche désignait la mauvaise rubrique pendant le défilement, et la rubrique courante ne se distinguait pas du simple survol de la souris.
- Corrigé : Le script de publication lisait mal le numéro de version et le passait au compilateur, qui refusait de restaurer les paquets. Il valide désormais la valeur avant de s'en servir, et ne l'impose plus au compilateur.
- Corrigé : Le contrôle du SDK annonçait une version différente de celle qui compilait, et refusait un SDK plus récent que celui visé.
- Corrigé : Les colonnes des tableaux n'étaient séparées par rien, et le contenu des cellules ne s'alignait pas sur le titre de sa colonne.
- Corrigé : Le numéro de version était recopié à la main dans cinq endroits et avait divergé. Il est désormais lu dans l'assembly, source unique.
- Corrigé : Trois barres d'interface se chevauchaient sur une fenêtre réduite.
- Ajouté : Rubrique Créer et gérer : boîtes, groupes, alias, renouvellement des mots de passe.
- Corrigé : L'icône du Bureau, en 256 pixels, était un simple agrandissement du tracé des petites tailles. Elle reçoit désormais un dégradé en diagonale, une ombre portée et un liseré qui détache le bouclier de l'enveloppe.
- Corrigé : L'icône était floue à toutes les tailles. Elle est maintenant dessinée au pixel près jusqu'à 48 pixels, avec un motif simplifié en dessous de 24 — une icône ne se fabrique pas par réduction d'un seul dessin.
- Corrigé : Le script de publication effaçait lui-même l'icône. Il comptait le dossier qui la contient parmi les reliquats d'une version antérieure. Trois contrôles lisent désormais le script et échouent si une suppression touche ce dossier.
- Ajouté : Agir depuis un relevé. Une flèche en tête de chaque ligne ouvre l'opération correspondante avec l'adresse déjà renseignée.
- Ajouté : Les actions de masse acceptent d'être restreintes à une seule boîte.
- Ajouté : Journal de session sur fond sombre, niveaux et messages colorés.
- Modifié : Panneau de réglages élargi, avec une barre du bas fixe : le bouton d'enregistrement était auparavant hors de vue.
- Modifié : Amorces ajoutées et rendues lisibles — leur contraste était sous le minimum recommandé.
- Corrigé : Une bulle d'aide affichait littéralement une valeur interne de WPF quand la liaison ne trouvait pas sa cible.
- Corrigé : Les barres des graphiques étaient vides dans le compte-rendu. Sur une machine française, la largeur s'écrivait avec une virgule, qu'un navigateur ignore. Seules les barres à exactement cent pour cent s'affichaient.
- Modifié : Le compte-rendu passe en densité condensée et s'adapte à une seule colonne sous 780 pixels.
- Ajouté : Licences réelles : plans de boîte, plan appliqué à chaque boîte, facturation des comptes à fort volume. Le plan de boîte correspond au type de licence.
- Corrigé : Le menu de gauche ne marquait pas la rubrique en cours de lecture.
- Ajouté : Encombrement et quotas dans l'audit : volume, éléments, plafonds, archive, avec quatre graphiques en barres horizontales.
- Ajouté : Le menu suit le défilement de la page.
- Modifié : Le catalogue de traduction passe de 44 à 381 textes. Les titres, sous-titres, libellés et aides sont traduits au niveau du modèle, avec des clés déduites des identifiants.
Refonte de la navigation.
- Modifié : Toutes les opérations tiennent sur une seule page défilante, groupées par rubrique. Le menu de gauche n'ouvre plus une page : il amène à la bonne hauteur.
- Modifié : Les cartes se rangent en colonnes à hauteurs libres, sans texte tronqué.
- Modifié : L'icône est embarquée en clair dans le code source, pour ne plus dépendre d'un fichier binaire.
- Ajouté : Catalogue de traduction : le texte français reste écrit en clair dans le code, et un fichier de langue le remplace quand il existe.
- Ajouté : Défilement chaîné : arrivé au bout d'un tableau, la molette continue sur la page.
- Corrigé : Les explications de ligne n'apparaissaient jamais : une bulle de cellule masquait celle de la ligne. Elles s'affichent maintenant dans un encart visible au clic.
- Ajouté : Les résultats sont conservés par tuile, avec une pastille indiquant le nombre de lignes disponibles.
- Ajouté : Fenêtre de journal filtrable et copiable.
- Corrigé : Sélecteurs DKIM : la messagerie renvoie la cible du renvoi et non son nom, ce qui produisait un faux verdict.
- Ajouté : Aide par ligne sur 36 familles de relevés, 151 traductions de colonnes.
- Corrigé : Compression Brotli non gérée, qui interrompait l'audit en cours de route.
- Ajouté : Vos messages arrivent-ils à destination : listes noires, MTA-STS, expéditeurs bloqués. Une vérification impossible est distinguée d'une absence de signalement.
- Ajouté : Choix du format de compte-rendu : document, tableur, ou les deux.
- Ajouté : Vérification des enregistrements de domaine : SPF, DMARC, MX, DKIM, MTA-STS, TLS-RPT, BIMI.
- Ajouté : Les 21 portails d'administration Microsoft, avec ce que chacun contient.
- Ajouté : Audit complet de la messagerie : 36 familles de relevés, avec un tableau de couverture qui dit ce qui n'a pas pu être lu et pourquoi.
- Ajouté : Les champs vont chercher leurs valeurs dans l'organisation.
- Ajouté : Réglage de densité et de zoom de l'interface.
- Corrigé : Un défaut de notification empêchait certains champs de se mettre à jour.
- Modifié : Résultats dépliés, plus rien derrière un onglet.
- Modifié : Ton revu pour quelqu'un qui découvre la messagerie.
- Modifié : Fenêtre sans cadre, aux couleurs de l'application.
- Ajouté : Diagnostic réseau qui distingue un pare-feu d'une panne de service.
- Ajouté : Trois façons de se connecter : compte Windows, fenêtre intégrée, navigateur — avec repli automatique de l'une à l'autre.
Réécriture complète en C#, sans PowerShell ni module Exchange.
- Ajouté : Communication directe avec le canal d'administration Microsoft 365.
- Ajouté : Score de compromission, mise en sécurité d'une boîte, instantanés et comparaison, compte-rendu autonome, cache local, parallélisme borné.
- Ajouté : Banc d'essai sans réseau ni tenant.
Avis
Pour déposer un avis, saisissez le code affiché dans la fenêtre À propos du logiciel (il change toutes les cinq minutes).
Aucun avis pour le moment. Soyez le premier à donner le vôtre.