Thème
Journal des modifications (Changelog)
Toutes les modifications notables de ce projet seront documentées dans ce fichier.
Le format est basé sur Keep a Changelog et ce projet adhère à la Gestion sémantique de version.
[Modèle de version] - JJ-MM-AAAA (Exemple)
Pour chaque nouvelle version, utilisez les catégories suivantes pour décrire les changements :
- Added : Pour les nouvelles fonctionnalités.
- Changed : Pour les modifications de fonctionnalités existantes.
- Deprecated : Pour les fonctionnalités bientôt supprimées.
- Removed : Pour les fonctionnalités supprimées.
- Fixed : Pour les corrections de bugs.
- Security : En cas de vulnérabilités.
[1.0.0] - 19-08-2026
Changed
- Ordre de priorité des incidents revu : quand plusieurs états coexistent sur une zone ou un point, celui qui la qualifie suit désormais l'ordre émission, arrêt d'urgence, évacuation, feu et déclenchement manuel, dérangement, neutralisation et mode manuel seul, inhibition, essai, hors service. Deux états d'un même rang laissent la main au premier survenu : celui qui qualifie l'entité la garde tant qu'il dure, et le second à paraître ne change pas la couleur sous les yeux de l'opérateur. La liste des états de l'entité les montre toujours tous, du plus grave au moins.
- Émission signalée en rouge, comme l'évacuation et l'alarme feu : elle porte des diffuseurs en fonctionnement, non une anomalie à diagnostiquer. Le plan, le trait de chrome, les badges et le flux d'événements suivent. La précédence sonore reste inchangée.
Fixed
- Liaison jamais reprise après un débranchement du câble réseau : la centrale, qui n'a reçu aucun signal de fermeture, gardait ouverte l'unique connexion que son firmware accepte, et toute connexion neuve se heurtait à cette place prise. La reconnexion repart du port de la liaison perdue, ce qui déloge la connexion morte. Réglage
ReuseLocalPortOnReconnect. - Socket abandonnée par une connexion aboutissant après son délai : elle occupait une place chez la centrale sans que personne ne la pilote.
- Tableau de bord introuvable dans les autres sessions du poste : l'installateur tenait un runtime WebView2 propre au profil de l'administrateur pour une installation valable partout, et n'installait donc pas la version commune. Seul un runtime installé pour tout le poste compte.
- Commentaires de configuration perdus d'une ouverture à l'autre : le commentaire saisi sur une centrale s'enregistrait bien, mais la liste des configurations servie à l'écran d'installation ne le rapportait pas. Le formulaire rouvrait donc sur un champ vide, et le simple fait de réenregistrer la centrale — même sans y toucher — effaçait le commentaire en base. Les commentaires de zone et de point suivaient le même chemin, de même que la description d'un point que le formulaire abandonnait en la relisant.
- Commentaire de centrale figé jusqu'au redémarrage du service : la copie mémoire d'une centrale ne recevait pas le commentaire modifié. Tant que le service tournait, les postes voyaient l'ancienne valeur ; elle ne se corrigeait qu'au prochain démarrage, qui relit la base.
[0.42.0] - 17-08-2026
Added
Restauration et réinitialisation détaillées dans la notice installateur : la restauration remplace la configuration en place, ce qu’aucune notice ne disait ; s’y ajoutent le détail de la réinitialisation d’usine et les filtres de la console de diagnostic.
Notice installateur refondue en procédure de mise en service : de la machine neuve au site supervisé, en quinze étapes. Le circuit d’activation d’une licence, jusque-là absent, y figure.
Consultation du journal réglementaire : un script déposé auprès du service affiche ou exporte le journal d'audit sur une période. Procédure dans la notice technique.
Notice installateur accessible depuis l'application : la fenêtre d'aide propose au SuperAdmin de basculer entre notice d'utilisation et notice installateur, dans la langue active. Les quatre notices sont incorporées au frontend, la fenêtre s'ouvrant sans requête.
Changed
- Écran de démarrage du client remplacé par un anneau de chargement discret, posé dans sa propre fenêtre. L'identité visuelle relève du seul front.
- Notices nommées par leur destinataire :
notice_utilisation.mdetnotice_installateur.mddansdocs/notices/{fr,en}/, pages du portail alignées, en-tête commun et renvois mutuels. - Page d'accueil du portail documentaire : un seul appel dans le bandeau, trois cartes couvrant notices et références d'API, plus aucune destination en double.
- Retours sonores d'interface refondus : partiels sous enveloppe plutôt qu'oscillateur nu, hauteurs prises dans un accord unique, et le sens du mouvement porte le message.
- Sons d'interface remplaçables depuis les réglages, par le même dépôt que les sons d'alarme ; la synthèse prend le relais tant qu'aucun fichier n'est déposé.
- Notifications amarrées sous le bandeau, empilées de la plus récente à la plus ancienne, sans plafond d'affichage.
- Fenêtre du poste maintenue en plein écran : bouton de réduction grisé, réduction obtenue par un autre chemin défaite aussitôt. La fenêtre n'est pas placée au premier plan pour autant.
Removed
Contenu réservé au SuperAdmin retiré de la notice d’utilisation : installation, centrales, plans, sauvegarde, réinitialisation, scanner et console décrivaient à l’opérateur des manœuvres que le service lui refuse, trois d’entre elles sous un rôle faux. Elles relèvent de la notice installateur.
Bascule « Fusionner avec la configuration existante » de la restauration : elle ne fusionnait rien — l’import écrase la configuration dans les deux positions — et commandait en réalité le réimport de l’historique, à l’envers de son libellé. L’écran annonçait d’ailleurs le remplacement juste au-dessus. L’archive décide seule : son historique est réinjecté quand elle en porte.
Logo du site dans l'en-tête des rapports : l'en-tête ne porte plus que le titre, la date et la période.
Modale de la notice (
NoticeModal.vue), sans appelant depuis que la notice s'ouvre en fenêtre détachée.Test actif de câblage JBUS : seule fonction qui commandait une centrale à titre d'essai. Le diagnostic tient à la lecture — scan brut et campagne de validation.
Découverte d'esclaves du scanner Modbus : l'identifiant se saisit directement.
Aperçu de notification à gauche de la cloche, redondant avec les notifications amarrées.
Marque d'essai DEF, qui n'avait pas à être proposée à l'installation.
Fixed
Palette de couleur d’une centrale qui vibrait sous le pointeur : la couleur choisie déplaçait la roue, qui se dérobait sous le curseur. Le repère est figé à la prise du pointeur.
Titre des notices affiché avec son dièse : la marque d’ordre des octets qui ouvre les fichiers précédait le
#, qui cessait d’être un titre.Cluster de développement bloqué par un journal des transactions disparu : le démarrage repose un journal neuf et réessaie, sous la garde de
pg_resetwalqui refuse sur un cluster mal arrêté.Roue chromatique de centrale et poignée de la console Modbus décalées sous le curseur : les deux ignoraient la mise à l'échelle de l'interface, au point de rendre inatteignables les couleurs les plus soutenues.
Curseur de préhension invisible sur les plans : l'application fournit ses propres mains vectorielles, sur le plan comme dans la bibliothèque de l'éditeur et sur les onglets.
Essais du dossier des téléversements en concurrence, qui échouaient au hasard des exécutions.
Accueil anglais du portail vers une page absente ; les adresses d'avant le renommage sont redirigées.
En-tête de rapport sans titre quand le site n'est pas nommé : il retombe sur le nom de l'application.
Aucun rapport produit dès qu'un logo était configuré.
Échec de génération d'un rapport sans trace exploitable : la cause est journalisée et affichée.
Sauvegarde incomplète : modèles de rapport et notes d'exploitation manquaient à l'archive, sans que rien ne le signale.
Restauration ramenant d'anciennes adresses Modbus : les profils livrés non modifiés sont réalignés sur le code à la fin de l'import.
Poste perdant sa licence sans qu'aucun matériel n'ait changé, au démarrage de Windows.
Logo débordant du bandeau.
Chargement du client peint en sombre sur un poste en thème sombre.
« Fichier introuvable » à l'ouverture de la documentation.
Compilation du frontend, arrêtée par des jeux d'essai restés en arrière du contrat de l'API.
Analyse de sécurité rouge sans finding : le rapport n'est conservé qu'en présence de findings, et les artefacts portent une rétention bornée.
Serveur de base de données muet sur un poste fraîchement installé : le runtime Visual C++ est déposé auprès des binaires qui le réclament.
Notifications invisibles, la pile n'étant posée par aucun composant.
Claquement au premier son d'une session.
Survol d'une notification à contretemps.
Volée de sons au rechargement de l'application.
[0.41.0] - 13-08-2026
Added
- Installateur nommé avec sa version :
Superviseur-Setup-0.41.0.exe, composé depuisapp.config.json. - Déclaration d'un type de centrale depuis l'application : Réglages → Profils de centrale (SuperAdmin) décrit registres, incidents, états système et commandes sans livraison logicielle. Les profils livrés s'y modifient et se rétablissent ; ils ne se suppriment pas.
- Incidents à comportement partagé, sans masquage : un profil peut porter plusieurs incidents d'un même comportement.
- Choix d'icône avec aperçu, recherche et grille, à la place du nom technique.
- Reprise d'un profil de centrale par fichier, d'un poste à l'autre.
- Profil neuf pré-rempli avec la table d'échange du cahier des charges.
Changed
- Réglages d'une commande rangés par nature, à la place d'une grille unique de onze champs.
- Essai de zone réservé au SuperAdmin : la manœuvre retire à une zone sa fonction de détection.
- Zone d'interface retirée des mises hors et en service de zone, la centrale acceptant ces trames sans rien en faire.
- Interface mise à l'échelle sur téléphone et tablette, par un retrait fixe hors du palier bureau.
- Matrice des réseaux INIS proportionnée à la place disponible.
- Centrales du réseau listées de la même façon sur tous les onglets.
- Import de configuration INIS conservant la zone d'interface.
- Étiquette ramenée dans sa zone quand un déplacement de sommet l'en fait sortir.
- Contour des centrales en défaut affiné et redressé.
- Essai de zone rendu acquittable comme les autres incidents.
- Entité d'interface reprise sur les centrales déjà déclarées, et non plus à la seule création.
- Entité d'interface rendue acquittable : son numéro 0 n'est plus confondu avec l'absence de cible.
- Cibles d'interface proposées à l'opérateur, le réglage du profil étant enfin porté jusqu'à l'écran.
- Dérangement de communication à chaque commande sur INIS-E16, la centrale coupant sa liaison sans accuser réception.
- Cluster de développement épargné par le Ctrl+C du terminal.
- Cluster de développement arrêté avec l'application, au lieu de lui survivre.
- Zone et ligne d'interface écartées des commandes livrées qui ne les visent pas.
- Sens de lecture d'une table déclaré table par table, pour un matériel à sécurité positive.
- Zone et ligne d'interface décrites registre par registre, une centrale ne les exposant pas forcément partout.
- Profil déclaré supervisé selon sa déclaration, et non comme une centrale livrée.
- Réglage de trame sans effet retiré de l'éditeur.
- Test de câblage ouvert aux centrales déclarées sur site.
- Scanner Modbus étendu à toute la centrale, profils déclarés compris.
- Coordonnées du support lisibles sans Internet, un poste de supervision pouvant être isolé du réseau.
- Éditeur de profil sans profondeur d'édition à choisir : les modes « Simplifié » et « Complet », qui cachaient la moitié des réglages, disparaissent.
- Contrôle d'un profil montrant l'adresse réellement interrogée, et non celle saisie.
- Question de sortie rendue visible dans l'éditeur de plans.
- Garde de sortie sur la déclaration d'une centrale, dont le remplissage est long.
- Garde de sortie en quittant les Réglages depuis un profil non enregistré.
- Boîte de confirmation lisible et sûre au doigt.
- Réseau inter-centrales réservé aux centrales qui savent y parler.
- Profils de centrale à l'habillage des autres écrans de réglages.
- Centrales homonymes distinguées dans la bibliothèque des plans.
- Identifiants uniques signalés à la saisie, et non au seul envoi.
- Modèle d'une centrale nommé par son profil partout — tableau, cartes, tuiles et filtre.
- Zones peuplées dès la création d'une centrale déclarée, sans attendre le démarrage du service.
- Zones d'un profil déclaré présentes hors incident.
- Modèle d'une centrale annoncé par son profil sur l'État du Système.
- Longueur de lecture : le champ dit l'unité qu'il compte, qui suit la fonction de lecture.
- Réglages de profil sans effet retirés ou rendus effectifs.
- Couleur déclarée appliquée au plan.
- Acquittement retiré des incidents qui ne l'attendent pas.
- Campagne de validation d'un profil déclaré, sur trois couches de bout en bout.
- Erreur de lecture après l'enregistrement d'un profil.
- Commandes à distance regroupées par profil, et non par type de centrale.
- Garde de sortie désarmée avec son éditeur.
- Préfixe des noms de points rendu visible.
- Liste des profils épurée, les actions passant en icônes.
- Zones d'une centrale à profil déclaré offertes au placement sur les plans.
- Zones d'une centrale sans configuration rendues visibles.
- Vocabulaire : « fourchette » d'identifiants d'esclave devient « plage » ; le préfixe des noms de points s'explique par son effet.
- Plage d'esclaves portée par le profil, à la place de valeurs codées en dur.
- Libellés de profil bilingues et colonnes explicites.
- Éditeur de profil en tables alignées, au vocabulaire du cahier des charges.
- Transport et identifiant d'esclave déclarés par le profil, au lieu d'être devinés d'après son nom.
- Liste des profils bornée dans la configuration d'une centrale.
- Section de réglages accessible par lien direct.
- Éditeur de profil en pleine page.
- Lecture seule rendue effective.
- Profil modifié répercuté sans redémarrage.
- Supervision d'une centrale déduite de son profil, non de son type.
- Capacités d'affichage portées par le profil : placement des points sur un plan, format des libellés.
Added
- Interface habillée par la marque du poste : bandeau latéral, écran de démarrage et écran de connexion.
- Avatar du compte d'administration uniforme sur tous les écrans.
- Logo replié distinct du logo déplié, pour le bandeau replié et l'avatar.
- Écran de démarrage aux couleurs du poste, l'identité retenue étant mémorisée d'un démarrage à l'autre.
- Marque DEF livrée : seconde marque proposée à l'installation, avec le profil INIS-E16 renommé « Aquarex ».
- Icône de la marque sur ce que l'exploitant manipule : raccourcis et fenêtres du client.
- Fenêtres natives teintées par la marque — client de bureau et gestionnaire de service.
- Profils de centrale livrés nommés par la marque, le nom seul changeant.
- Choix de la marque et du compte administrateur à l'installation.
Fixed
- Scanner Modbus muet dans l'application installée, ses requêtes visant une adresse relative.
- Logo de marque dimensionné dans le bandeau latéral.
- Minuteur de l'éditeur de plans posé après le départ de l'écran.
- Centrale supprimée toujours affichée sur les postes restés ouverts.
- Scan aveugle à la fonction de lecture déclarée au profil.
- Scanner Modbus inutilisable depuis l'interface.
- Ligne d'interface déclarée en double.
- Écran de démarrage aux couleurs de l'éditeur chez un revendeur.
- Onglet et favori au nom de l'éditeur chez un revendeur.
- Navigation avalée en quittant l'historique.
- Contour de centrale en marches d'escalier.
- Poste de développement bloqué par un verrou fantôme laissé par un serveur tué sans ménagement.
- Remplacement d'un son sans retour ni effet complet.
- Notice d'utilisation illisible sur un poste installé.
- Zone et DI « IHM » supposés présents sur toutes les tables de l'INIS-E16.
- Adresses de profil ramenées à celles du cahier des charges.
- Couleur et icône retenues au profil sans effet sur les incidents livrés.
- Zone du plan restée sur sa teinte quand le profil en changeait.
- Libellé d'incident personnalisé resté invisible.
- Incidents affichés que la centrale ne portait plus.
- Profil refusé à l'enregistrement sans dire pourquoi.
- Contrôle du profil dans le formulaire, avant l'envoi.
- Réglages de rang situés parmi leurs pairs, avec échelle plutôt qu'en chiffres nus.
- Rétablissement d'un profil livré à portée de l'éditeur.
- Adresses du profil figées sur l'ancienne valeur après correction.
- Registre d'écriture des commandes saisi deux fois pour une seule case de trame.
- Commande d'un profil déclaré sans libellé lisible.
- Profils livrés annonçant une lecture de registres là où leurs adaptateurs lisent des bits.
- Installation interminable quand le service refuse de démarrer.
- Poste enfermé par une installation interrompue, le mot de passe administrateur étant perdu.
- Première ligne DI confondue avec le DI IHM sur INIS-E16.
- Zones de l'exploitant remplacées par celles du profil.
- Plan qui glissait sous les réglages d'étiquette.
Security
- Exécution de code à l'ouverture d'un PDF de plan : PDF.js, dont la version embarquée permettait à un document forgé d'exécuter du code, est mis à jour.
[0.40.0] - 06-08-2026
Added
- Cadrage des images déposées : logo du site et photo de profil passent par un éditeur avant d'être enregistrés.
- Réglage des retours sonores d'interface : interrupteur, volume et écoute, dans Paramètres → Général → Sons & Alertes.
Changed
- État du réarmement à la place d'un bouton inerte pour les rôles qui n'y ont pas droit.
- Acquittement proposé sur un incident hérité.
- Zone reflétant à nouveau l'état de ses points.
- Tuile de centrale sensible à tous les incidents, et non aux seuls feu et dérangement.
- État système ramené à l'échelle de couleurs commune.
- Acquittements de synthèse imputés à leur auteur dans le journal réglementaire.
- Bandeau « Protection réduite » retiré de l'état système, ne correspondant à aucun registre de centrale.
- Bouton d'impression retiré de la notice, ne produisant rien d'exploitable.
- Libellés d'état affichés en entier, sans coupure en points de suspension.
- Une couleur et une icône par incident, quel que soit l'écran.
- Icônes du survol de plan alignées sur le flux temps réel.
- Boutons unifiés, quatorze suites de classes décrivant la même poignée d'intentions.
- Logo du site sur toute la hauteur du bandeau.
- Carte d'identité du profil, avatar, nom et rôle enfin hiérarchisés.
- Retours sonores d'interface synthétisés — sept sons, de la validation à la perte de liaison.
- Veille des dépendances en cadence mensuelle, groupée par écosystème.
- Documentation Modbus tenue en un seul endroit.
- Convention d'adressage INIS-E16 explicitée.
Fixed
- Incident rétabli qui ressuscitait à l'effacement.
- Démarrage du backend de développement bloqué au montage du cluster.
- Poste de développement, tests et service installé séparés, chacun avec sa base et ses fichiers.
- Build de l'installateur arrêté par une version oubliée dans un manifeste.
- Zone présentée en incident sans qu'aucun de ses registres ne le soit.
- Acquitter une synthèse de centrale défaisait l'acquittement d'une zone.
- Image de plan qui ne s'importait qu'un essai sur plusieurs.
- Génération de la documentation déclarée en échec sur un simple avertissement.
- Son de notification joué deux fois.
[0.39.0] - 05-08-2026
Added
- Quatre nouveaux états de zone supervisés sur INIS-E16 : neutralisation, mode manuel seul, arrêt d'urgence et inhibition, remontés comme incidents à part entière.
- Deux synthèses générales d'exploitation : neutralisation et mode manuel seul.
- Essai E5 de la campagne de validation JBUS, pour confronter au banc le nombre de bobines réellement servies.
- L'exploitation dégradée se signale dans le chrome : ambre quand une fonction de sécurité est suspendue, bleu ciel quand l'exploitation est restreinte.
- Contour de centrale sur le plan, dans la couleur du plus grave de ses états de synthèse.
- Défaut de communication réseau supervisé sur INIS-E16.
- Injection des états système depuis le simulateur, bit à bit.
- Regroupement des incidents par nature : synthèse générale, zones et points touchés sous une même carte.
- Cycle de vie d'un incident groupé en parcours navigateur (
vue/e2e/specs/incidents.spec.ts). - Données partagées tenues à jour sur tous les postes : centrale, plan, consigne, compte ou réglage.
- Table de vérité des états système, éprouvée du bit Modbus jusqu'à l'interface.
Changed
- Un déclenchement manuel se lit comme une urgence, et non sous une couleur qui le distinguait des alarmes.
- La veille restreinte déclare son état au lieu de retomber sur le dérangement.
- Une synthèse levée par la centrale ne disparaît plus à l'acquittement d'un incident sans rapport.
- Le statut de l'installation est celui de l'incident le plus grave qu'elle porte.
- Les indicateurs comptent les incidents, non les états.
- Une carte d'incident ne répète plus sa nature à chaque échelon.
- L'historique en tableau ne recharge plus une page déjà consultée.
- Le changement de page de l'historique glisse d'un bord à l'autre.
- Deux rapports générés en même temps n'échouent plus.
- Un rapport se consulte sans être enregistré sur le poste.
- Une centrale n'apparaît qu'une fois dans la communication Modbus.
- Les colonnes des rapports ne se chevauchent plus.
- Les tableaux des rapports se lisent en ligne, l'en-tête se répétant à chaque page.
- Chaque incident porte le nom de la table qu'il traduit.
- Le cadre plein écran cède la place au chrome lui-même.
- Échec de connexion expliqué par sa cause.
- Affichage mobile : en-tête, bouton de déconnexion et menu du parc revus.
- Zone d'affichage sur iPhone : la page occupe la hauteur réellement visible.
- Un plan ne s'enregistre plus tout seul.
- Tous les échelons d'un incident sont signalés, sans réglage.
- Tables évacuation, émission et DM de l'INIS-E16 alignées sur le cahier — 8001, 8021 et 8041.
- États système décrits par le profil de centrale.
- Libellés de statut uniformisés : plus aucun statut brut ne s'affiche.
- Chaque état système s'affiche sous son propre statut, et non peint en dérangement.
- Portée d'un acquittement : il vaut pour tout ce qu'il contient, jamais pour ce qui le contient.
- Acquittement exigé pour tout état système.
- Son d'information sur les points hors service et la zone en essai, jusque-là silencieux.
Fixed
- Le contour d'une centrale garde le statut le plus précis.
- La couleur du chrome suit l'incident affiché.
- Les alarmes sonnent sur le poste qui affiche l'interface, et non sur le serveur.
- Un acquittement ne fait plus recharger la configuration de tous les postes.
- Signalisation de l'exploitation dégradée : arrêt d'urgence, neutralisation, inhibition et mode manuel seul définissaient une couleur que l'écran n'affichait jamais.
- Une centrale muette n'efface plus le feu qu'une autre déclare.
- Points rattachés à leur zone dans la carte d'incident.
- Un seul bouton de réarmement par incident.
- Compte d'incidents conforme à la liste.
- Simulateur — les synthèses affichent ce qui part sur le bus.
- Invite au réarmement rétablie sur une zone ou un point acquitté.
- Connexion Modbus conservée après une exception esclave.
- Lecture sonore stabilisée, sans ruptures ni craquements sur les sons bouclés.
- Cause exacte d'un réalignement de mot de passe impossible.
Removed
- Table de sons système du profil d'incident : le son d'un état système et son caractère critique sont portés par la définition de l'état.
[0.38.0] - 30-07-2026
Identité obligatoire des centrales, déconnexions systématiquement journalisées, interface exploitable sur mobile et tablette, et secret unique du poste étendu à la base
Fixed
- Libellés français dans l'interface anglaise : onze textes visibles échappaient à la traduction. Les boîtes de confirmation portaient « Confirmation », « Confirmer » et « Annuler » en dur comme libellés par défaut — un opérateur en anglais les lisait sur la suppression d'une consigne, d'un rapport, d'une archive, d'un plan, d'une zone et sur la réinitialisation d'usine. Sept autres textes appelaient une clé de traduction inexistante et affichaient donc la clé elle-même à l'écran, tel
common.deletingsur un bouton en cours de suppression. S'y ajoutent les en-têtes et badges du réseau INIS, restés en anglais dans l'interface française, et trois infobulles de réglage des sons. - Messages d'erreur du serveur non traduits : les refus de l'API s'affichent dans la langue de l'interface. Ces messages étaient rédigés côté serveur dans une seule langue et affichés tels quels — un opérateur en anglais lisait « L'adresse 192.168.10.0:1502 est déjà utilisée… », et les refus de gestion des comptes restaient en anglais même en français. Chaque refus porte un code stable et ses valeurs (adresse en collision, numéro de série, délai d'attente, extensions acceptées), que l'interface traduit et complète ; le message du serveur ne subsiste qu'en repli, pour un code qu'une interface plus ancienne ne connaîtrait pas. Couvre 56 refus : centrales et validation de configuration, authentification et temporisation, comptes utilisateurs, rapports et modèles, réseau INIS, plans, consignes, journaux et téléversements.
- Centrale enregistrable sans nom ni numéro de série : les deux champs sont exigés par le formulaire comme par l'API, et un numéro de série déjà porté par une autre centrale est refusé. Une centrale dépourvue de numéro de série n'entrait jamais dans l'état de supervision temps réel — indexé sur cette valeur — tout en restant visible dans la liste et comptée comme déconnectée : elle ne remontait donc aucun incident, pas même sa perte de liaison. Les deux champs ne tenaient qu'à leur contrainte de saisie, sans effet lorsque l'enregistrement partait de l'onglet « Zones », qui retire de l'écran l'onglet portant l'identité. Un enregistrement incomplet ramène sur l'onglet « Général », désigne le champ manquant et n'écrit rien.
- Déconnexion jamais consignée pour une centrale jamais connectée : le journal reçoit l'événement de déconnexion de toute centrale supervisée injoignable. La bascule depuis l'état de connexion indéterminé était silencieuse et l'état restait ensuite figé sur « déconnectée », si bien qu'une centrale n'ayant jamais abouti à une connexion — création récente, ou service redémarré alors qu'elle était hors ligne — ne laissait aucune trace au journal. Un délai de grâce laisse passer le premier échec de contact, le temps qu'une première tentative aboutisse ; l'échec suivant confirme la déconnexion et la consigne.
- Formulaire de centrale illisible en vue étroite : le nom d'une zone reste saisissable à côté de l'étiquette « Système » de la zone IHM des centrales INIS, là où le champ était comprimé jusqu'à disparaître. Les modes de raccordement « TCP/IP » et « Série (RTU) » se présentent en sélecteur pleine largeur, et les champs de connexion s'empilent au lieu de déborder. Le bouton de suppression d'un point est atteignable au toucher.
- Navigation figée sur une page vide : un commentaire placé à la racine du gabarit d'une vue routée la rendait multi-racine et bloquait la transition du bandeau, la page restant vide jusqu'à un rechargement complet.
- Tableau de bord : chaque panneau conserve une hauteur minimale en disposition empilée, et la page défile lorsque la fenêtre est trop basse pour l'afficher entièrement.
- Choix de la langue inaccessible en mobile et tablette : le sélecteur ne vivait que dans le pied de page, rendu au seul palier bureau. Un bouton FR/EN apparaît dans l'en-tête en son absence.
- Adresse d'accès réseau local injoignable : les URL affichées dans les réglages portent le port du service. Elles reprenaient le port de la page, vide dans le client de bureau où l'interface est servie par l'hôte applicatif, produisant une adresse inutilisable depuis un autre poste.
- Accès refusé à un utilisateur non administrateur : la lecture des profils Modbus, nécessaire au chargement de l'interface, et les actions libre-service (profil, langue, avatar) aboutissent. Les restrictions d'administration posées au niveau de la classe se cumulaient avec celles des actions, refusant ces appels à tout compte standard ; elles sont portées par action, et le libre-service vérifie que l'utilisateur agit sur son propre compte ou dispose des droits d'administration.
Security
- Secret unique du poste étendu à la base : le mot de passe saisi par l'opérateur à l'installation gouverne désormais le compte SuperAdmin, le rôle applicatif PostgreSQL et le superutilisateur du cluster embarqué. Ce dernier restait fixé à une valeur connue, identique sur tous les postes et jamais changée : tout processus local disposait donc d'un accès superutilisateur à la base, donc du moyen d'altérer le journal d'audit réglementaire que l'application protège par ailleurs contre toute purge. Aucune valeur de ce genre n'est plus portée par les binaires livrés, et l'exploitant n'a qu'un seul secret à conserver pour garder l'accès à sa base sur la durée.
- Avatars typés d'après leur contenu : le format d'une photo de profil est déduit de la signature du fichier, et un contenu qui n'est pas une image reconnue (PNG, JPEG, GIF, WebP) est refusé. Le type était auparavant celui annoncé par l'appelant, recopié tel quel dans l'image stockée puis servie à tous les postes.
- Vérification du mot de passe administrateur restreinte au poste : l'appel qui autorise la fermeture du service ou de la fenêtre par un administrateur n'est plus accessible depuis le réseau. Soumis sans nom d'utilisateur, un mot de passe y était confronté à tous les comptes privilégiés à la fois : chaque tentative valait autant d'essais qu'il existe d'administrateurs, sans que le freinage par compte puisse s'appliquer. Ses seuls appelants — le client de supervision et le gestionnaire de service — s'exécutent sur le poste.
Changed
- Version unique : la version déclarée dans
app.config.jsonest estampillée dans tous les binaires livrés et réalignée dans les métadonnées du frontend à la construction, supprimant toute version saisie à la main. - Outil interne d'émission de licences publié en fichier unique.
- Dépendances npm et chaîne de test .NET portées à leurs versions courantes.
- Contrôles de livraison effectifs : la construction de l'installateur commence par valider le manifeste — cohérence de la version entre
app.config.json, les projets .NET, le manifeste du frontend et le journal des modifications, substitution complète du script d'installation, dépendance du service à PostgreSQL — et s'interrompt au moindre écart. Ces contrôles existaient sans être exécutés par aucune étape. L'analyse de couverture porte désormais un seuil plancher, côté interface comme côté service, et le contrôle de style en intégration continue signale les écarts au lieu de les corriger dans le coureur puis de les perdre. La couverture des composants d'interface et de la boucle de scrutation des centrales n'est plus retirée du calcul.
[0.37.0] - 29-07-2026
Version installée exacte dans les demandes de licence, écrans d'activation allégés et choix de la langue sur le client
Fixed
- Version de l'application dans la demande de licence : le
.licreqproduit depuis un poste installé porte la version réellement installée. Le client de supervision et le gestionnaire de service embarquent leur configuration applicative ; installés dans leurs propres répertoires, ils ne pouvaient pas atteindre celle déposée auprès du service et retombaient sur les valeurs par défaut — une version fictive dans la demande, et une URL et un port d'accès erronés côté client. Le défaut de version est0.0.0, qui n'appartient à aucune version publiée : une configuration introuvable se voit au lieu de passer pour une version plausible.
Added
- Choix de la langue sur le client de supervision : les fenêtres natives (activation, authentification, démarrage, messages d'erreur) basculent entre français et anglais depuis l'écran d'activation ou le menu de la barre des tâches. Le choix vaut pour la session Windows et est conservé d'un démarrage à l'autre ; sans choix explicite, la langue suit celle du système. L'interface web garde ses propres sélecteurs.
Changed
- Écrans de licence allégés (client, gestionnaire de service, outil interne d'émission) : les explications redondantes des étapes sont retirées, les verdicts tiennent en une phrase, et l'en-tête de la fenêtre d'activation indique le logiciel, sa version et le nom du poste.
- Rouge réservé aux refus : le message d'état est neutre lorsqu'il décrit une situation normale — un poste jamais activé n'a pas de licence, et l'outil d'émission installé sans clé privée ne peut pas signer. L'empreinte matérielle, qui n'est pas une anomalie, s'affiche dans la couleur du texte courant.
- Fenêtre d'activation dimensionnée sur son contenu, avec défilement au-delà de la hauteur d'écran disponible.
[0.36.0] - 28-07-2026
Activation des postes depuis le logiciel livré, licences signées à durée de validité
Added
- Activation depuis le poste : le client de supervision et le gestionnaire de service (menu « Licence… ») produisent la demande de licence (
.licreq— empreinte du poste, nom réseau, version installée) et appliquent la licence reçue par collage, import de fichier ou glisser-déposer. L'activation est vérifiée sur-le-champ et le client démarre sans redémarrage. Le gestionnaire de service reste accessible quand le client refuse de démarrer. - Métadonnées de licence : chaque licence porte un identifiant d'émission, le logiciel couvert, le client, le site, la date d'émission et, au choix, une date de fin de validité (licences d'essai et de location).
- Outil d'émission (interne Desautel) : fenêtre d'émission alimentée par une demande reçue, par la machine locale ou par une empreinte saisie, plus un registre des licences émises qui permet de renvoyer une licence perdue sans la réémettre.
Changed
- Format de licence — rupture : une licence est un jeton signé
SUPV2.<contenu>.<signature>portant ses métadonnées. Les licences au format antérieur (signature nue de l'empreinte) sont refusées avec un diagnostic explicite et doivent être réémises. - Emplacement de la licence : lue d'abord dans
%ProgramData%\Superviseur\, commun à toutes les sessions du poste, puis dans%AppData%\Superviseur\en repli. - Gestionnaire de service : libellés bilingues français / anglais suivant la langue du système, même règle que le client de supervision.
Fixed
- Renommage de zone absent des journaux d'événement : après modification d'une centrale, les journaux d'alarme et de défaut portent le libellé de zone à jour. La copie en mémoire de la centrale conservait les libellés d'avant la modification, et ceux-ci primaient sur le libellé rafraîchi ; l'ancien nom subsistait donc dans les journaux jusqu'au redémarrage du service.
- Libellés de configuration INIS comportant un signe imprimable hors ASCII : un libellé tel que « Détecteur n°12 », « Zone d'accueil » ou « Zone « Est » » est importé intégralement. Le filtre anti-rebut, qui n'admettait que les lettres au-delà de l'ASCII, vidait le libellé entier dès qu'il rencontrait un degré, une apostrophe typographique ou un guillemet français ; la zone ou le point retombait alors sur son libellé par défaut. Les chiffres, la ponctuation, les symboles et les séparateurs sont admis au même titre que les lettres accentuées.
- Configuration brute obfusquée illisible après relecture : l'obfuscation de compatibilité INIS écrivait les données avec un décalage d'un rang de clé par rapport à la lecture, si bien qu'une valeur obfusquée puis désobfusquée ne restituait pas son contenu d'origine. L'écriture suit le format attendu par la lecture, seule référence puisqu'elle traite aussi les fichiers produits par les centrales.
Security
- Empreinte matérielle : un poste dont moins de deux propriétés matérielles sont distinctives (lectures WMI indisponibles, numéros de série de remplissage OEM) n'obtient plus d'empreinte. Ces machines partageaient auparavant la même valeur, qu'une licence unique aurait suffi à déverrouiller.
- Une licence refusée n'écrase jamais celle installée sur le poste.
- Dépendances du frontend livré : PostCSS corrige une divulgation de fichiers
.maparbitraires par traversée de chemin viasourceMappingURL; DOMPurify corrige un contournement de l'assainissement HTML sur les éléments personnalisés autorisés. L'audit des dépendances de production ne rapporte plus aucune vulnérabilité.
[0.35.1] - 24-07-2026
Correction de navigation dans l'éditeur de plans et refonte interne du frontend
Fixed
- Éditeur de plans : cliquer sur un élément déjà placé dans la bibliothèque bascule vers le plan qui le contient avant de l'afficher, au lieu de ne chercher que dans le plan actuellement ouvert.
Changed
- Refonte interne du frontend (qualité de code, comportement inchangé) : la logique des gros composants est isolée dans des composables
use*co-localisés (vues, éditeur de plans, scanner Modbus, cartes d'état et d'incident, écran de connexion…), la couche API est découpée par domaine, et les helpers de fusion de snapshot et les types du traitement d'alarmes sont extraits en modules dédiés. - Journalisation backend : les erreurs de certains contrôleurs, auparavant écrites sur la console (et perdues en mode service Windows), sont journalisées via Serilog.
[0.35.0] - 23-07-2026
Temporisation de connexion, SAST en CI, refonte du pied de page et fiabilisation du temps réel
Added
- Temporisation de connexion par compte : après 5 échecs de mot de passe consécutifs sur un même compte, une temporisation (60 s par défaut) est imposée avant toute nouvelle tentative — même avec le bon mot de passe (réponse HTTP 429 + en-tête
Retry-After). Ce mécanisme est propre à chaque compte et complète la limitation par IP existante ; il ne verrouille jamais durablement le compte. Seuils configurables sousAuth:LoginCooldown(MaxAttempts,WindowSeconds,CooldownSeconds). L'écran de connexion affiche un message dédié avec compte à rebours (fr + en). - Analyse statique de sécurité (SAST) en intégration continue : nouveau workflow GitHub Actions (Semgrep OSS) exécuté à chaque
push/pull requestversmainet de façon hebdomadaire. Les vulnérabilités de sévérité haute font échouer la CI ; le rapport SARIF est publié en artefact.
Changed
- Pied de page redessiné : mise en page épurée alignée sur le système de design ardoise (liens en pastilles au survol, séparateurs entre groupes, groupe d'icônes cohérent). Les icônes Scanner Modbus et Console (réservées au SuperAdmin) se masquent proprement, sans séparateur orphelin.
Fixed
- Fausse alerte « Connexion au serveur interrompue » au changement de profil : l'arrêt volontaire de la liaison temps réel (réinitialisation lors d'un logout → login) n'est plus signalé comme une coupure réseau. Un échec transitoire du démarrage initial n'alerte plus qu'à partir du deuxième essai consécutif.
- Curseur cliquable rétabli sur les éléments interactifs du pied de page.
Security
- Renforcement contre le bourrinage ciblé d'un compte (au-delà de la limitation par IP déjà en place).
- Certificat HTTPS auto-signé élargi (nom d'hôte + FQDN + adresses IPv4 du serveur en plus de
localhost) : accès chiffré au frontend depuis n'importe quel appareil du réseau local sans erreur de nom de certificat (un avertissement d'émetteur non approuvé subsiste sur les appareils tiers, à accepter une fois ou à approuver via la racine / une PKI interne). - Documentation de conformité CRA (
docs/project/CONFORMITE-CRA.md) actualisée : TLS/HTTPS, chiffrement DPAPI des secrets au repos, signature de code Authenticode, SAST, temporisation de connexion, SBOM et point de contact reflétés comme en place.
[0.34.0] - 23-07-2026
Durcissement des rôles, exigences de mot de passe et réorganisation de la documentation
Added
- Exigences de complexité du mot de passe affichées : lors du changement de son mot de passe ou de la création/modification d'un compte, les règles de complexité (longueur minimale, majuscule, minuscule, chiffre, caractère spécial selon la politique) s'affichent et se cochent en direct au fil de la saisie. Endpoint
GET /api/auth/password-policyexposant la politique en vigueur. - Notice SuperAdmin / installateur (fr + en) : mise en service, configuration du site, cadre d'usage contraint et conformité, à destination des installateurs et configurateurs.
- Tableau de droits par rôle faisant autorité dans le README (SuperAdmin / Admin / Utilisateur).
Changed
- Modèle de rôles durci — la configuration du site (centrales, sauvegarde/restauration, éditeur de plans, paramètres systèmes, maintenance) devient réservée au SuperAdmin ; l'Admin conserve les options générales (nom du site, apparence, sons, logo) et l'édition du réseau INIS. La vue Réseau INIS devient consultable par tous (édition Admin/SuperAdmin) ; les rapports et statistiques deviennent consultables par tous.
- Réarmement des centrales réservé au SuperAdmin — le bouton « Réarmer » reste visible après un acquittement (il signale l'action requise) mais n'est cliquable que par le SuperAdmin ; pour les autres rôles il est inerte (curseur inchangé), afin d'être compris comme une instruction. Les autres commandes (silence, mise hors/en service, essai) restent accessibles à tous.
- Scanner Modbus et console de diagnostic réservés au SuperAdmin (auparavant Admin et SuperAdmin).
- Documentation réorganisée — notices d'utilisation déplacées de la racine vers
docs/notices/{fr,en}/;MODBUS.md,SECURITY.mdet le générateur de documentation rangés sousdocs/; outillage VitePress (public DocFX,package.json) déplacé sousdocs/. La racine du dépôt ne conserve que les fichiers essentiels.
Security
- Contrôle d'accès appliqué côté service (autorisation des endpoints), pas seulement dans l'interface : la configuration, le réarmement, le scanner/console et les actions sensibles sont refusés au niveau de l'API pour les rôles non habilités. Les refus de réarmement sont consignés au journal d'audit.
[0.33.0] - 23-07-2026
Journal d'audit réglementaire et refonte de la console Modbus
Added
- Journal d'audit réglementaire : une piste d'audit inaltérable consigne l'ensemble des actions sensibles de l'application (authentification et gestion des comptes, configuration des centrales, réseaux INIS et réglages, commandes et tests de câblage, exports, sauvegardes/restaurations, réinitialisation usine, démarrage et arrêt du service). Chaque entrée porte l'acteur (nom, rôle, adresse IP), l'horodatage, la cible et l'issue (succès/échec). Le journal est conservé cinq ans sur la machine, dans une table dédiée distincte de la main courante incendie : il n'apparaît ni dans l'historique de protection incendie ni dans les rapports. La conservation est garantie cinq ans minimum ; les entrées ne sont purgées qu'au-delà de cette durée, jamais avant, et la purge est suspendue si l'espace disque devient critique.
Changed
- Refonte de la console Modbus : la console de diagnostic gagne des filtres (direction, esclave, recherche plein-texte, trames brutes) avec un compteur d'affichage et une réinitialisation rapide, un tampon porté à 500 trames côté serveur et côté client, et un affichage temps réel plus lisible.
Security
- Accès à la console Modbus restreint aux administrateurs : l'abonnement au flux de la console de diagnostic exige désormais le rôle Admin ou SuperAdmin. Un utilisateur authentifié sans ce rôle ne peut plus recevoir les trames Modbus brutes, tandis que la diffusion de l'état des centrales à tous les utilisateurs reste inchangée.
[0.32.0] - 22-07-2026
Test de câblage complet des commandes depuis le scanner Modbus
Added
- Test de câblage des commandes (« Tester tout ») : depuis le test actif du scanner Modbus, une passe unique éprouve chaque commande valide pour le type de la centrale et produit un rapport de conformité (câblée / partielle / manquante / échec / non applicable), avec le détail bit-à-bit dépliable. Les commandes à effet lisible (mise hors/en service zone/point, essai zone) sont vérifiées par round-trip réel sur un échantillon de cibles (entité système, première et dernière entité physique) ; celles sans état lisible (réarmement, silence, mode manuel) par audit du profil, sans écriture.
- Test actif étendu à la mise en service : les commandes de réactivation de zone et de point sont éprouvables individuellement (mise hors service en précondition pour rendre la réactivation observable, puis restauration).
Changed
- Test actif ouvert aux centrales AVISS/DABUS : le round-trip et le test de câblage ne sont plus réservés à l'INIS-E16 ; ils s'appliquent à toute centrale connectée acceptant l'écriture de commandes, en n'exposant que les commandes valides pour son type (le mode manuel reste propre à l'INIS-E16).
[0.31.0] - 21-07-2026
Refonte de l'interface d'édition de plan, adaptation mobile/tablette pilotée par l'orientation, correction des fuites DOM et conformisation DABUS
Added
- Scanner et console Modbus accessibles aux administrateurs : le scanner Modbus est ouvert aux administrateurs (en phase avec le bouton du pied de page), localisé fr/en, avec icônes et pastilles de statut. L'analyse des lectures s'appuie sur une nature sémantique stable, indépendante de la langue.
- Retour sonore d'interface sur les actions : les notifications de succès, d'erreur et d'avertissement (enregistrements, imports, actions diverses) émettent un court son système, comme le faisaient déjà les commandes. Activation et volume réglables dans les réglages audio.
- Suppression tactile dans l'éditeur de plans : un appui long (~0,5 s) sur une zone, un sommet ou un détecteur déclenche la suppression (avec confirmation), équivalent tactile du clic droit.
- Nom du fichier image d'origine : le nom du fichier importé comme fond de plan est conservé (base de données incluse) et affiché dans la fiche d'image de l'éditeur, à la place d'un libellé générique.
Changed
- Mode manuel réservé à l'INIS-E16 : la commande de mise en mode manuel n'est proposée que pour les centrales INIS-E16. Les centrales AVISS/DABUS ne l'exposent pas (comportement d'adressage propre au firmware INIS-E16).
- Rafraîchissement complet à la reconnexion temps réel : à la reconnexion SignalR, l'ensemble des données backend (nom du site, logo, profils d'incident, configurations de centrales) est rechargé, et non plus les seules configurations de centrales — plus besoin de recharger la page (F5) après une coupure.
- « Commande à distance » : le libellé « Contrôle des commandes » de la barre latérale devient « Commande à distance » (fr) / « Remote command » (en). Les libellés de la barre latérale se rétractent en largeur, en fondu, de façon cohérente avec le sens du repli.
- Diagnostic Modbus du formulaire de centrale retiré : redondant avec le test de ping du formulaire et le scanner Modbus complet. Le test de ping et la campagne de validation JBUS sont conservés.
- Bouton d'upload de logo redondant retiré (réglages) : la vignette du logo est déjà une zone d'upload (survol) ; seul le bouton « Supprimer » subsiste.
- Palier « bureau » conditionné à l'orientation paysage : une tablette en portrait — y compris l'iPad Pro dont la largeur atteint 1024 px — reste en interface compacte (rail, contenu adapté) sans mise à l'échelle globale, au lieu d'être traitée comme un bureau réduit à ~60 %.
- Chrome piloté par les paliers réactifs : barre latérale, pied de page et barre de navigation du bas sont affichés selon la largeur ET l'orientation (JavaScript) plutôt que par des media-queries CSS, insensibles à la mise à l'échelle globale.
- Tableau de bord en portrait : le plan et le flux d'incidents s'empilent en deux lignes hors bureau paysage, au lieu de deux colonnes.
- Réglages en tablette/portrait : la sous-navigation devient une barre d'onglets horizontale au-dessus d'un contenu pleine largeur.
- Card de profil de l'en-tête : avatar mieux intégré, nom et rôle empilés verticalement.
- Titres d'en-tête des pages alignés sur les libellés de la barre de navigation (cohérence fr/en).
- Indicateurs clés (KPI) sur mobile : une seule ligne défilable horizontalement au lieu de deux rangées.
- Cases de sélection des tableaux : style allégé (fond blanc), révélées au survol sur bureau — y compris pour une ligne cochée — sans apparition en masse à l'activation d'une sélection.
Fixed
- Supervision des centrales AVISS/DABUS : la lecture Modbus vise les adresses fil de la table d'échange (état global, points feu/défaut/hors-service). L'alignement sur frontière paire propre au firmware INIS-E16 ne s'applique pas à l'AVISS, dont la supervision restait alors muette — lecture en échec, centrale affichée déconnectée.
- Zone « IHM » réservée à l'INIS-E16 : les centrales AVISS/DABUS ne portent pas de zone système « IHM ». Le changement de profil vers AVISS/DABUS retire l'entité pré-remplie à la création, le serveur écarte toute entité système qu'un profil n'expose pas, et les centrales déjà en base sont purgées au démarrage.
- Points et zones à numérotation clairsemée : la supervision lit les tables Modbus jusqu'au plus haut numéro de point/zone configuré, et non plus seulement d'après leur nombre. Un détecteur dont le numéro n'est pas contigu (ex. point 31 à l'adresse 2031) est désormais remonté comme incident.
- Nom de point personnalisé préservé : à l'enregistrement d'une centrale, un libellé de point saisi manuellement n'est plus écrasé par « Point N ». Seuls les libellés vides ou restés au motif par défaut exact (préfixe + numéro) sont resynchronisés sur le numéro.
- Libellés d'état de zone « Essai » et « Hors service » : traduits (fr/en) au lieu d'afficher la clé de traduction brute (
status.zone.test). - Réglage du volume audio :
POST /api/sound/volumene renvoie plus une erreur intermittente (« Collection was modified ») lorsqu'un volume par clé est modifié pendant la sérialisation de la réponse. - Fluidité de l'éditeur sur les plans riches en zones : le déplacement d'une zone et le panoramique du plan ne repeignent plus l'ensemble du calque à chaque image (promotion en couche de composition pendant l'interaction).
- Défilement tactile de la liste des plans (éditeur et tableau de bord) : un balayage fait défiler la barre d'onglets ; l'appui maintenu réordonne les plans dans l'éditeur.
- Tableau d'archive des rapports sur mobile : défilement horizontal rétabli, boutons d'export en icône seule sur petit écran.
- Barre de navigation du bas : le point rouge redondant sur l'onglet actif est retiré (l'icône rouge suffit).
- Avertissements console : icône non résolue dans une tuile de centrale et classe transmise à un composant multi-racine (barre du bas).
Security
- Mot de passe administrateur saisi à l'installation : le mot de passe SuperAdmin — qui pilote aussi le rôle PostgreSQL — est saisi par l'opérateur à la première installation, au lieu d'être codé en dur dans l'installateur (la valeur était extractible par
stringsdu .exe). Il est appliqué au rôle PG puis scellé (DPAPI) dansappsettings.Crypto.json. Les mises à jour préservent le secret existant du poste. Le fichier crypto livré ne porte plus que les clés revendeur. - Seeder de démonstration exclu des builds Release : le générateur de données de démonstration, son contrôleur de nettoyage et son déclenchement au démarrage ne sont compilés qu'en Debug. Le code est physiquement absent des builds Release et de l'installateur — aucun compte de démonstration à mot de passe connu ne peut exister en production.
[0.30.0] - 20-07-2026
Éditeur de plans nettement plus fluide, page des rapports harmonisée, et dépendances mises à jour (dont le retrait d'un composant obsolète porteur de vulnérabilités).
Fixed
- Fluidité de l'éditeur de plans : le déplacement des points, des sommets et des zones, le survol des zones (info-bulle) et le passage d'un plan à l'autre sont nettement plus réactifs sur les plans chargés. Pendant un glissement, seul l'élément manipulé est recalculé (au lieu de l'ensemble des zones à chaque image) ; la position du plan est mise en cache au survol (fin d'un recalcul de mise en page à chaque mouvement de souris) ; un suivi réactif profond superflu sur l'ensemble des plans est supprimé.
- Barre latérale : la couleur du texte des boutons change en même temps que le fond au clic, sans décalage.
Changed
- Page des rapports : alignée sur le chrome ardoise des réglages — accent d'action gris ardoise, bascule d'automatisation ambre, le rouge étant réservé aux actions destructrices.
- Dépendances : mise à jour des composants backend (.NET) et frontend.
Security
- Renforcement de la veille des vulnérabilités : le scan des dépendances en intégration continue échoue sur les composants de production vulnérables, et Dependabot cible la branche de développement avec regroupement des mises à jour.
Removed
- Paquet
Microsoft.AspNetCore.SignalRobsolète (v1.1.0), qui tirait des dépendances transitives vulnérables (dont une critique) ; SignalR est fourni nativement par ASP.NET Core.
[0.29.0] - 20-07-2026
Durcissement de sécurité pour la conformité au Cyber Resilience Act : transport chiffré, secrets protégés au repos, politique d'authentification renforcée, intégrité du build et veille sur les dépendances, accompagnés d'un dossier de conformité.
Security
- Transport chiffré (HTTPS/TLS) : le service écoute en HTTPS sur le port 5000 en production, avec redirection HTTP→HTTPS, HSTS, en-tête Content-Security-Policy et cookies
Secure. Un certificat auto-signé est approvisionné et installé dans le magasin racine du poste à l'installation, ou fourni viaHttps:CertificatePath. - Politique de mot de passe configurable (longueur, complexité) appliquée à la création et à la modification des comptes via l'API.
- Durée de session bornée : le refresh token expire selon
Auth:RefreshTokenDays(30 jours par défaut). - Secrets chiffrés au repos : la clé de signature JWT et le fichier
appsettings.Crypto.json(secret applicatif, clés revendeur) sont chiffrés via DPAPI (portée machine) en production Windows, avec migration transparente. - Signature de code : signature Authenticode horodatée (RFC 3161) des binaires et de l'installateur, pilotée par un certificat fourni au build.
- Veille sur la chaîne d'approvisionnement : scan de vulnérabilités des dépendances (
dotnet list --vulnerable,npm audit), génération d'un SBOM CycloneDX (.NET et npm) et mises à jour Dependabot en intégration continue. - Divulgation coordonnée : point de contact et politique de sécurité (
SECURITY.md,.well-known/security.txt).
Added
- Dossier de conformité CRA (
docs/cra/, intégré au portail de documentation) : cadre et classification, documentation technique (annexe VII), évaluation des risques, informations utilisateur (annexe II), modèle de déclaration UE de conformité (annexe V), gestion des vulnérabilités (art. 14) et période d'assistance. - Exigences de sécurité fournisseur firmware et plan de compensations Modbus (documents internes) : diligence raisonnable sur l'interface des centrales.
Changed
- Client et configuration servis en HTTPS : l'URL de production du client WebView2 et le sondage de disponibilité passent en
https://localhost:5000. - Documentation technique alignée sur le durcissement (README, notices, architecture, déploiement).
[0.28.0] - 20-07-2026
Interface recentrée sur un chrome neutre et une sévérité unifiée, fenêtre d'aide dédiée, et notice servie dans la langue choisie.
Changed
- Chrome neutre ardoise : l'en-tête, la barre latérale active et les halos de fond adoptent une teinte ardoise sobre ; le rouge plein cadre est réservé aux alarmes feu et évacuation, la déconnexion devenant un signal discret.
- Échelle de sévérité unique (
config/severity.ts) : une même graduation alimente la mise en forme des incidents, les catégories d'événements et le store des centrales — une couleur porte partout la même signification. - Accent d'action unique ardoise : les teintes indigo, bleu (adresses Modbus) et les pastilles noires (
[DEMO]) parasites sont supprimées ; les badges de rôle suivent les tokens--role-*. La barre latérale des réglages, les curseurs et le sélecteur de date passent à l'accent ardoise. - Indicateurs clés (KPI) : l'intensité de l'icône suit la gravité, saturée en situation de danger et apaisée à l'état nominal.
Added
- Fenêtre d'aide dédiée (client) : le manuel s'ouvre dans une seconde fenêtre redimensionnable et fermable librement, à côté du superviseur, au lieu de le remplacer.
- Étude de conformité au Cyber Resilience Act (
docs/project/CONFORMITE-CRA.md) : analyse d'écart du logiciel et recommandations pour le firmware des centrales, accompagnée du texte officiel du règlement.
Fixed
- Notice d'utilisation dans la langue du pied de page : le manuel s'ouvre en français ou en anglais selon la langue sélectionnée, au lieu de toujours présenter la version française ; sa langue est fixée à l'ouverture de la fenêtre.
- Positionnement des surcouches : les éléments téléportés (indicateurs du parc, listes déroulantes, notifications, cartes) ne sont plus décalés — l'échelle est lue sur
<body>et non sur<html>.
[0.27.0] - 20-07-2026
Écran de connexion repensé en parcours guidé, du choix du profil à la saisie du mot de passe.
Changed
- Écran de connexion en deux étapes : un panneau de marque (logo, titre, état système, horloge, version) accompagne le parcours. La première étape présente la liste des profils, triés par dernière connexion sur le poste et filtrables par saisie ; la seconde rappelle le profil retenu et reçoit le mot de passe, avec bascule d'affichage de la saisie. Le repli « Autre compte » ouvre la connexion manuelle par identifiant et mot de passe, seul chemin possible tant qu'aucun profil n'est proposé. Sous 900 px, la mise en page passe en colonne unique derrière une barre de marque compacte.
- Sélecteur de langue français / anglais sur l'écran de connexion, en cohérence avec le sélecteur du pied de page de l'application.
- Voile de démarrage affiché pendant l'authentification, aux couleurs de la marque.
- Dialogues natifs du client et du gestionnaire de service alignés sur le rouge de la marque.
[0.26.0] - 17-07-2026
Simulateur de centrale utilisable sans interface, supervision temps réel couverte de bout en bout, et documentation remise au niveau du produit.
Fixed
- Démarrage du service impossible après mise à jour des profils Modbus : les profils standard sont insérés en base par migration ; la modification de l'adresse de mise hors service AVISS et l'ajout des sons d'unité de commande laissaient le modèle en avance sur les migrations, et le service s'arrêtait au démarrage sur « Database initialization failed » sans pouvoir migrer. La migration correspondante rétablit le démarrage.
- Ciblage d'une centrale par numéro de série dans les tests de bout en bout : le numéro est porté par la tuile elle-même, alors qu'il était cherché parmi ses descendants — aucune tuile n'était jamais trouvée.
- Portail de documentation figé après une publication : les guides n'ont pas de contenu propre, ils incluent des fichiers du dépôt. Le journal des modifications, les notices d'utilisation et la note Modbus n'étant pas déclarés parmi les chemins qui déclenchent la publication, le portail conservait une version antérieure sans que rien ne le signale.
- Documentation des chemins de données : le fichier de configuration annonçait un répertoire de production différent de celui que le service utilise réellement (
C:\ProgramData\Superviseur), et les fonctions de résolution associées n'étaient appelées nulle part. La configuration décrit l'emplacement réel, et les fonctions inutilisées sont retirées. - Port de développement du backend : la documentation annonçait
:5000, valeur de production ; le développement écoute sur:5264, que vise le proxy du serveur de développement.
Changed
- Notices d'utilisation française et anglaise remises à niveau : commandes d'exploitation (libellés et portées réels, mode manuel), consignes opérationnelles, écran de rapports (génération, modèles, archive, automatisation), états système et états d'unité de commande des centrales AVISS, sauvegarde et restauration.
- Notice d'utilisation anglaise publiée : le portail expose une version anglaise et un sélecteur de langue. Les références d'API, communes aux deux langues, restent accessibles depuis les deux.
- Explorateur d'API du backend : il affiche les descriptions des contrôleurs et de leurs modèles, à partir du fichier de documentation que le projet produisait déjà sans que personne ne le lise.
- Documentation technique publiée : l'architecture et les licences tierces, jusqu'ici présentes dans le dépôt mais absentes du portail, y figurent ; la référence d'API couvre le cœur du simulateur.
Added
- Simulateur de centrale sans interface (
dotnet/simulator.headless) : sert les centrales dedemo-fixtures.jsonen Modbus TCP et RTU (tubes nommés), et expose un canal de pilotage HTTP local permettant de poser un état sur une zone et de lire l'état réel de la centrale. Se lance seul pour développer sans l'interface graphique, et démarre automatiquement sous les tests de bout en bout. - Cœur du simulateur isolé (
dotnet/simulator.core) : serveurs Modbus, centrales, profils et scénarios, sans dépendance à l'interface graphique. Le simulateur WPF le consomme et conserve son comportement. Les mutations d'état passent par un dispatcher explicite, seul garant de leur sérialisation entre le serveur Modbus, les minuteries de scénario et l'opérateur. - Couverture de la supervision temps réel (
vue/e2e/specs/supervision.spec.ts) : quatre parcours navigateur exerçant ce qu'aucun autre test n'atteint — une centrale réellement en ligne, une alarme feu et un dérangement RTU jusqu'à l'écran, et la boucle fermée où une commande d'exploitation parvient à la centrale avant de revenir à l'affichage. - Tests du cœur du simulateur (
tests/simulator) : vérifient qu'une centrale simulée réagit aux trames de commande hors de toute interface graphique, sur les deux profils et sous commandes concurrentes.
[0.25.0] - 17-07-2026
Supervision complète de la table « Paramètres Généraux » sur AVISS/DABUS, et adresse de mise hors service point conforme à la table de base.
Added
- États d'unité de commande des centrales AVISS/DABUS : les six signaux de la table de base AVISS (dérangement liaison, diffuseur hors service, veille restreinte, alarme UGA, alarme restreinte, évacuation générale, adresses fil JBUS 17 à 22) sont supervisés au même titre que les autres états système — remontée temps réel, acquittement, son et historique. Les dérangements de liaison et de diffuseur alimentent la synthèse « dérangement général » ; les états d'exploitation (veille restreinte, alarme UGA, alarme restreinte, évacuation générale) en sont distincts, une centrale qui évacue n'étant pas une centrale en dérangement. La table du cahier réserve ces adresses à l'AVISS : l'INIS-E16, pour lequel elles sont déclarées non utilisables, les ignore.
- Pilotage des états d'unité de commande depuis le simulateur : six interrupteurs dédiés permettent d'exercer la chaîne complète, du bit Modbus jusqu'à l'interface.
Changed
- Mise hors service point des centrales AVISS/DABUS à l'adresse 1001 : la table d'échange porte deux valeurs contradictoires sur cette ligne,
1001en décimal et0x03B9(= 953) en hexadécimal. L'AVISS suit la valeur décimale. L'INIS-E16 conserve953, valeur que son firmware sert réellement et relevée sur centrales réelles.
Fixed
- Stabilité de la suite de tests sur l'intégration continue : deux tests échouaient par intermittence sous exécution parallèle. La reconnexion RTU après réinitialisation du transport attend désormais que le serveur ait rouvert une instance de tube, au lieu de se rattacher à une session en cours de fermeture. Les tests de connexion refusée visent un port hors de la plage éphémère, qu'aucun test voisin ne peut réserver entre-temps.
[0.24.0] - 16-07-2026
Fiabilité de la liaison série et du démarrage du service ; tests de bout en bout dans un navigateur réel.
Fixed
- Journalisation des trames Modbus RTU : les octets bruts échangés sur une liaison série apparaissent dans la console Modbus et les journaux, au même titre que ceux du TCP. La recherche du transport à instrumenter parcourt toute la hiérarchie NModbus, où le flux RTU est porté deux niveaux au-dessus du type concret.
- Ordre de démarrage du service au boot : le service backend déclare une dépendance envers le service PostgreSQL embarqué. Le gestionnaire de services Windows démarre la base avant la supervision, et un démarrage manuel du backend entraîne celui de la base.
Added
- Couverture du chemin Modbus RTU : la pile série (découpage des trames, CRC16, silence inter-requête, partage d'un bus multi-drop, reconnexion) est exercée de bout en bout par un esclave Modbus réel, sans matériel ni port COM. Le silence d'un esclave n'interrompt pas les échanges des autres centrales du bus ; un silence total réinitialise la liaison.
- Tests de bout en bout dans un navigateur (Playwright) : 50 parcours opérateur joués contre le backend réel et ses données de démonstration — connexion et déconnexion, matrice d'accès par rôle (vues d'administration, gestion des comptes, scanner Modbus), navigation, flotte de centrales (recherche, filtre par modèle, détail), historique (frise et tableau, filtres, export), statistiques, rapports et modèles, cycle de vie d'un compte, et consignes avec vérification des droits de suppression sur deux sessions simultanées. Exécution locale via
npm run test:e2e. - Points d'accroche de test sur les composants partagés : fenêtres modales, tables, barres de filtre et boîtes de confirmation exposent des identifiants stables, réutilisables par toute nouvelle couverture.
[0.23.0] - 16-07-2026
Consignes : chacun maîtrise ses propres notes ; documentation technique publiée en ligne.
Added
- Suppression de sa propre consigne : l'auteur d'une note opérationnelle peut la supprimer quel que soit son rôle ; les administrateurs et super-administrateurs peuvent supprimer toute note. La règle est appliquée côté serveur (403 sinon) et le bouton de suppression ne s'affiche que lorsque l'action est permise.
- Couverture de tests de la feature Consignes : 18 tests contrôleur backend (tri épinglées/récentes, validation, troncature, auteur serveur, épinglage, règles de suppression) et 18 specs composant frontend (composer, épinglage, suppression, réduction de liste).
- Notice technique et Dimensionnement du stockage dans la documentation en ligne (guides VitePress), aux côtés de la notice d'utilisation.
Changed
- Documentation d'architecture : tableau des projets complet (
license-generator,tools) et emplacement exact des migrations EF.
[0.22.7] - 11-07-2026
Polissage de l'en-tête et du bouton d'alertes.
Changed
- En-tête — espacement homogène : les indicateurs (alertes, liaison temps réel), les actions (notifications, son) et l'identité (horloge, profil) sont désormais séparés par de fins séparateurs, avec un espacement régulier.
- Bouton d'alertes : un clic (ou Alt+0) ouvre l'État système sans ouvrir de modale automatiquement (jugé intrusif) ; l'incident prioritaire y est déjà en tête (grille « pire cas d'abord » + liste des incidents actifs). Le libellé s'accorde au nombre (« 24 alertes »).
[0.22.6] - 11-07-2026
Lecture rapide du temps : ancienneté relative des événements.
Added
- Ancienneté relative des horodatages : l'info-bulle d'un horodatage de la frise Historique indique désormais la date/heure complète et l'ancienneté relative (« il y a 2 min », « à l'instant »), pour situer un événement d'un coup d'œil sans calcul mental. Utilitaire pur réutilisable (
formatRelativeTime, FR/EN).
[0.22.5] - 11-07-2026
Découvrabilité : accès à l'aide des raccourcis depuis le pied de page.
Added
- Bouton « Raccourcis » dans le pied de page : ouvre la fenêtre d'aide des raccourcis clavier (rappel de la touche « ? »), pour que les opérateurs découvrent les raccourcis sans les connaître au préalable.
[0.22.4] - 11-07-2026
Conscience situationnelle : saut immédiat à l'incident prioritaire.
Added
- Aller à l'incident prioritaire : un bouton d'en-tête (visible uniquement en présence d'alertes, avec le nombre d'alertes actives) et le raccourci Alt+0 ouvrent d'un geste, depuis n'importe quelle vue, le détail de la centrale de l'incident le plus prioritaire (même ordre que la liste des incidents). Ajouté à la fenêtre d'aide des raccourcis.
[0.22.3] - 11-07-2026
Rapidité opérateur : raccourcis clavier et aide intégrée.
Added
- Raccourcis clavier : « ? » ouvre/ferme une fenêtre d'aide listant les raccourcis ; Alt+1/2/3 naviguent vers le Tableau de bord, l'État système et l'Historique. Les raccourcis sont ignorés pendant une saisie (aucune interférence avec les champs). La fenêtre d'aide se ferme par Échap, clic extérieur ou la croix.
[0.22.2] - 11-07-2026
Conscience périphérique : le titre de l'onglet/fenêtre reflète les alertes actives.
Added
- Compteur d'alertes dans le titre de la fenêtre : le titre de l'onglet/fenêtre affiche « (N) Superviseur » lorsque N alertes sont actives, et revient au titre normal sans alerte. L'opérateur perçoit ainsi une alerte même quand l'application n'est pas au premier plan (barre des tâches WPF, onglet en arrière-plan). Respecte un titre de site personnalisé.
[0.22.1] - 11-07-2026
Confort et sûreté opérateur (site critique) : visibilité permanente de la liaison temps réel.
Added
- Indicateur de liaison temps réel : une pastille toujours visible dans l'en-tête signale l'état de la liaison (« Temps réel » verte, « Connexion… » au démarrage, « Liaison perdue » rouge pulsante), et une bannière d'alerte persistante s'affiche si la liaison tombe après avoir été établie — avertissant l'opérateur que les données affichées peuvent être figées (anti-figeage). La bannière se referme d'elle-même à la reconnexion. Complète les notifications transitoires par un repère permanent, impossible à manquer ou fermer par erreur.
[0.22.0] - 11-07-2026
Cycle de finition avant livraison : mise en conformité visuelle de la page Réseau INIS, fiabilisation H24/7, intégration CI, et refonte des notices et de la documentation générée.
Added
- Réseau INIS — indicateurs de tête : une rangée de quatre KPI (centrales assignées, matrices chargées, liens configurés, incohérences) ouvre l'onglet « Centrales », dans le style unifié des cartes du tableau de bord et de l'État système ; l'indicateur d'incohérences passe en rouge et pulse lorsqu'il y en a.
- Démarrage résilient à la base : au boot, le service attend que PostgreSQL soit joignable (retries bornés, réglables via
Database:StartupConnectRetriesetDatabase:StartupConnectRetryDelaySeconds) avant la migration, au lieu de refuser le démarrage au premier échec — utile sur un poste hébergeant à la fois la base et le service. - Supervision du volume du journal : le nombre total d'entrées du journal d'événements et sa date d'origine sont affichés dans Paramètres → Général → Maintenance, alimentés par le nouvel endpoint
GET /api/logs/volume(Admin). Aide à suivre l'occupation en exploitation, le journal n'étant jamais purgé automatiquement (traçabilité intégrale, déjà garantie côté API). - Rétention des rapports archivés : purge automatique des rapports de plus de 24 mois (fichier + métadonnées), pour borner la croissance de l'archive. Les rapports restent régénérables depuis le journal (inaltérable).
Security
- Téléversement de plans : validation de la taille (≤ 25 Mo), de l'extension (
png/jpg/jpeg/gif/webp, SVG exclu) et du type MIME déclaré, alignée sur les autres téléversements de l'application (auparavant aucune limite explicite). - Rapports réservés aux administrateurs :
ReportsControllerexige désormais le rôle Admin/SuperAdmin (auparavant tout utilisateur authentifié pouvait exporter le journal complet ou lire l'archive par appel direct — le frontend était la seule barrière). - Comptes SuperAdmin masqués : un Admin non-super ne peut plus révéler l'existence d'un compte SuperAdmin via
GET /api/users/{id}(cohérent avec la liste). - Scan Modbus intrusif réservé au SuperAdmin :
discover-slavesetraw-scanexigent désormais le rôle SuperAdmin (cohérent avec la garde de route côté interface) ; la liste des ports série reste accessible aux Admin (config des centrales RTU). - Refresh token durci : le jeton de rafraîchissement est désormais stocké haché (SHA-256) en base — une lecture de la base ne rejoue plus les sessions — et l'endpoint
/refreshest soumis à la limite de débit d'authentification. Note d'exploitation : la mise à jour invalide les sessions existantes (une reconnexion sera nécessaire). - Revue de sécurité et de sûreté consolidée : points corrigés et points à arbitrer.
Changed
- Réseau INIS — conformité visuelle : chargement propre au premier affichage (voile centré au lieu d'une grille blanche), spinner d'actualisation reflétant l'état réel, états vides normalisés (composant partagé), palette d'erreur alignée sur le reste de l'application (rouge au lieu de rose), cartes et barre de défilement harmonisées avec le tableau de bord.
- Intégration continue : le workflow CI s'exécute désormais aussi sur les pull requests vers
main(les PR sont validées avant fusion, et non plus seulement après). - Documentation : notice utilisateur actualisée (v0.22) et sa version anglaise ajoutée ; notice technique consolidée (intégrateur/exploitant) et note de dimensionnement stockage/specs créées ; couverture TypeDoc de la couche logique complétée et derniers résumés XML backend traduits en français.
Fixed
- Rapports — sections vides explicites : une section demandée mais sans donnée sur la période n'est plus retirée silencieusement du document ; elle affiche « aucune donnée sur la période sélectionnée » (lève l'ambiguïté « aucun événement » vs « section non incluse »).
- Rapports planifiés — période en heure locale : les fenêtres (jour/semaine/mois/an) et l'heure planifiée s'entendent désormais en heure locale du poste (converties en UTC pour filtrer le journal), au lieu de l'UTC ; un « rapport de la veille » couvre bien la journée locale.
- Rapports planifiés — pas de doublon sur échec partiel : les deux formats (PDF, CSV) sont générés avant d'être archivés ; si l'un échoue, rien n'est archivé et l'échéance n'avance pas (plus de PDF dupliqué au passage suivant).
- Rapports planifiés — pas d'écrasement de configuration : la date de dernière exécution est réécrite après relecture de la configuration, sans écraser une modification administrateur concurrente.
- Feu général jamais masqué prématurément : l'interface n'éteint plus localement le bandeau et le klaxon de « feu général » à l'acquittement ; l'état serveur fait foi (mis à jour au cycle suivant), évitant tout masquage transitoire d'un feu maintenu par le firmware.
- Rapport planifié manqué rattrapé : une échéance hebdomadaire/mensuelle/annuelle n'est plus définitivement sautée si le service est arrêté le jour exact du déclenchement ; le rapport de la période non couverte est généré au prochain démarrage.
- Acquittement de zone à index invalide : un acquittement de zone/point dont l'index n'est pas valide (≥ 1) est refusé, empêchant qu'un index absent (repli sur 0) ne déclenche par erreur le reset global de la centrale.
- Acquittement de la perte de connexion : l'alerte « perte de connexion » d'une centrale (qui n'existe que hors ligne) est de nouveau acquittable ; le garde de déconnexion la rendait auparavant strictement inacquittable alors que le backend la gère.
- Rapport à période incohérente : la génération refuse désormais une date de début postérieure à la date de fin (auparavant : rapport silencieusement vide, pris pour une absence d'événements).
- Boucle de rejeu sur 401 : une requête renvoyant 401 même après un rafraîchissement réussi ne relance plus indéfiniment le cycle refresh→rejeu.
- Journalisation Modbus temps réel : la diffusion SignalR des logs Modbus (console SuperAdmin) absorbe désormais tout échec d'envoi (client déconnecté, transport fermé) au lieu de le propager. Le chemin d'E/S Modbus appelant, souvent en feu-et-oubli et à cadence trame, n'est plus exposé à des tâches en échec non observées.
- Export CSV du journal : si l'export est interrompu après l'envoi des en-têtes (incident base ou réseau), le fichier est désormais marqué explicitement « EXPORT INCOMPLET » et l'incident est journalisé côté serveur — un export tronqué ne peut plus être pris pour un export complet (traçabilité).
- Intégration continue : correction des trois erreurs ESLint qui bloquaient le job « Frontend - Lint » (variable déstructurée inutilisée dans l'Historique, import
refinutilisé dans le pied de page,prefer-constdans un test de stabilisation), rétablissant une CI verte.
[0.21.0] - 10-07-2026
Cycle de finition : configuration des centrales en page, ergonomie de l'éditeur de plans, refonte de l'État système et corrections d'affichage.
Added
- Configuration de centrale en page dédiée : la création et l'édition d'une centrale s'ouvrent dans le panneau de droite des Paramètres (barre latérale conservée), en plein espace et format « island », avec une flèche de retour et un formulaire pleine largeur.
- Éditeur de plans — colonnes redimensionnables : une poignée ajuste la largeur relative du plan et de la bibliothèque (mémorisée) ; la bibliothèque rappelle ce qui est plaçable (zones et points d'une centrale).
- Éditeur de plans — redimensionnement de l'image de fond : une poignée de coin met à l'échelle l'image de fond seule (ratio conservé, ancrée au coin haut-gauche), sans déplacer les zones ni les points ; l'échelle est persistée par plan.
- Taille des étiquettes persistante par plan : le facteur d'échelle des étiquettes de noms est enregistré avec le plan.
- Stabilisation de l'affichage (Paramètres → Général, admin) : nombre de cycles de mesure consécutifs requis avant d'afficher une transition non urgente ; les alarmes et escalades vers un danger restent immédiates. Désactivée par défaut.
- Création rapide de zones et de points : boutons visibles dans l'éditeur de centrale pour ajouter zones et points en masse.
Changed
- État système — cartes de centrale : présentation sobre en teintes (en-tête coloré selon l'état portant le nom, composition « type · zones · points », compteurs d'anomalies), curseur cliquable au survol. La modale de détail au clic partage la même identité (nom en en-tête, libellé de type unifié).
- Tableau de bord — indicateur « Parc » : un menu déroulant ancré au KPI (même largeur, ouvert par-dessus le contenu, refermé au clic à l'extérieur) remplace la modale.
- Cloche de notifications : icône fixe, sans animation, avec un compteur plafonné à 99+.
- Tableau des centrales : colonne Type réduite au libellé de type ; colonnes « ID » et « État » resserrées et centrées ; interrupteur d'état centré.
- Insertion d'un point : un nouveau point prend l'index suivant le dernier point de sa zone et décale les points suivants, conformément à l'ordre des adresses Modbus.
- Éditeur de centrale : roue de couleur centrée dans sa colonne ; sélecteurs RTU (vitesse, parité, bits de stop) au style visible au repos ; réglage de stabilisation déplacé dans les Paramètres généraux.
- Réseau INIS — matrice : l'onglet de diagnostic affichant le JSON brut est retiré ; le bouton d'une carte de centrale ouvre directement la matrice (extinction, sirène, panneau LED). Les erreurs d'import ou de suppression s'affichent dans le centre de notifications au lieu d'une fenêtre d'alerte du navigateur.
Fixed
- Navigation : la page de configuration de centrale ne bloque plus l'affichage des autres pages (racine unique compatible avec la transition de mise en page).
- Notification Modbus parasite : plus de message « connexion établie » à chaque commande — la notification ne se déclenche que sur une vraie reconnexion de la centrale concernée.
- Page Aide : plus de contour d'alarme superposé lorsqu'une alarme est active.
- Barre de filtres des tableaux : l'anneau de focus des champs de recherche et de sélection n'est plus rogné en haut.
- En-tête « Santé de la flotte » aligné sur la largeur du contenu affiché en dessous.
- Stabilisation : valeur par défaut à 1 (désactivée) — au-delà, la rétention d'un retour à la normale après acquittement faisait resurgir l'alarme acquittée comme neuve.
- Incidents clignotants : une valeur transitoire lue en plein rafraîchissement de la centrale (ex. « hors service » fugace) ne fait plus disparaître puis réapparaître un incident, et n'engendre plus de faux incident « hors service ». L'apparition d'un état de maintenance et toute fermeture ou verrouillage d'incident sont confirmées sur plusieurs cycles ; les alarmes et escalades vers un danger restent immédiates.
- Historique — période personnalisée : le calendrier de sélection de plage n'est plus masqué par l'en-tête du tableau (rendu au niveau supérieur de la page).
- Éditeur de plans — redimensionnement de l'image de fond : l'ombre du plan et le cadrage de centrage suivent l'image mise à l'échelle (l'ombre ne reste plus figée à l'ancienne taille) ; l'échelle est enregistrée au relâchement de la poignée, supprimant le ralentissement pendant le geste.
- Réseau INIS — accès depuis l'État système : le bouton « Matrice réseau » d'une centrale sélectionne le réseau qui la contient et ouvre sa matrice.
Performance
- Historique : la bascule Frise ↔ Tableau est instantanée quand la vue cible est à jour, un rechargement n'ayant lieu que si un filtre l'a périmée.
Backend
- Plans : champs
LabelScaleetResolutionScalesurBuildingMap(migrationAddMapScaleFields) portant la taille des étiquettes et l'échelle de l'image de fond, persistées par plan. - Stabilisation des incidents : paramètre
SupervisionSettings.StateConfirmationCycles(défaut 2) — nombre de cycles de scrutation de confirmation avant d'acter l'ouverture d'un état de maintenance ou la fermeture/verrouillage d'un incident ; les états de danger apparaissent sans délai.
[0.20.3] - 09-07-2026
Finalisation de l'unification : relecture, couverture de tests et documentation.
Fixed
- Historique : suppression d'une double requête possible du tableau lors d'un changement de filtre depuis une page > 1 ; l'URL reflète désormais dès le chargement direct le mode d'affichage (Frise/Tableau) mémorisé.
Tests
- Couverture élargie : composable de recherche unifié (filtres, règle « les catégories ne rechargent pas les compteurs », dédoublonnage de la frise, absence de double requête tableau) ; rendu et interactions des modes Frise et Tableau ; grille de l'État système, tuile et modale de détail ; utilitaires de formatage. Relecture adversariale de l'ensemble de la refonte sans défaut bloquant.
Changed
- Notice d'utilisation mise à jour pour refléter les vues unifiées (État système en grille avec détail au clic, Historique à deux modes).
[0.20.2] - 09-07-2026
Produit unifié (suite) : le « mur de supervision » fusionne dans l'État système.
Changed
- État système unifié : la vue de supervision devient une grille compacte de tuiles (une par centrale), triée « pire cas d'abord », avec code couleur d'annonciateur, compteurs et indicateurs de flotte (centrales en ligne, alarmes, défauts, taux de disponibilité). Un clic sur une tuile ouvre le détail complet en modale : santé + composition (zones, points/lignes, entité système IHM). Tuile, incident actif et deep-link
?panel=convergent vers un point d'entrée unique. - Fin de la page « Mur de supervision » séparée :
/wallredirige vers l'État système ; l'entrée de barre latérale est retirée et le mode plein écran supprimé (le client bureau gère déjà le kiosque).
Removed
- Redondances : styles de tuile et synthèse « pire cas » mutualisés dans un utilitaire partagé ; nom, configuration et libellé de type de centrale factorisés ; indicateurs de flotte fusionnés (fin du KPI de connexion API redondant avec l'indicateur global).
[0.20.1] - 09-07-2026
Produit unifié : la « main courante » et l'« historique » fusionnent en une seule vue à deux modes.
Changed
- Historique unifié : une vue unique remplace les deux écrans séparés, avec un sélecteur de mode d'affichage — Frise chronologique (par défaut) et Tableau technique. Une seule barre de filtres partagée (recherche, catégories d'événement, centrale, période) et les compteurs par catégorie servent les deux modes ; le mode choisi est mémorisé (
?mode=+ stockage local). Le filtre de niveau brut cède la place aux catégories métier (la criticité reste signalée visuellement). - Fin de la page « Main courante » séparée :
/journalredirige vers l'Historique ; les entrées de barre latérale et de navigation mobile sont fusionnées.
Removed
- Redondances : logique de filtres, pagination, compteurs, mode direct et export mutualisée dans un composable partagé ; formatage et styles de journal factorisés ; frise et tableau extraits en composants présentationnels réutilisant la pagination générique.
[0.20.0] - 09-07-2026
Main courante consolidée et exploitation de la traçabilité des événements (auteur et type).
Added
- Mur de supervision : nouvelle vue (
/wall) présentant toute la flotte en grille compacte de tuiles, une par centrale, triée « pire cas d'abord » (alarme, dérangement, déconnexion, protection réduite, nominale, non supervisée), avec code couleur d'annonciateur, compteurs par centrale, indicateurs de flotte (centrales en ligne, en alarme, en dérangement, taux de disponibilité) et mode plein écran pour l'affichage mural. Un clic ouvre le détail de la centrale, mis en évidence dans l'État système (/status?panel=). - Main courante : nouvelle vue opérateur (
/journal) présentant le journal d'audit en frise chronologique groupée par jour, avec pastilles de catégorie (alarmes, dérangements, exploitation, commandes, liaisons, système), filtre par centrale, sélecteur de période (aujourd'hui / 24 h / 7 j / 30 j / tout), recherche plein-texte, compteur d'événements par catégorie sur chaque pastille (répartition de la période), mode « direct » (rafraîchissement périodique), export CSV filtré côté client, bande des consignes opérationnelles épinglées, affichage de l'auteur (« qui ») des acquittements et commandes, et filtrage par centrale au clic sur son badge. - Filtres de journal enrichis :
GET /api/logs/searchaccepte un filtreeventTypes(catégorisation) et un filtresourceexact (par centrale) ; nouveaux endpointsGET /api/logs/sources(sources distinctes) etGET /api/logs/event-type-counts(répartition par type d'événement) pour la main courante.
Changed
- Rapports enrichis : nouvelle section « Consignes opérationnelles » (consignes partagées existantes en fin de période, épinglées d'abord, avec auteur et date, en PDF et CSV) ; le journal des événements du rapport gagne une colonne « Auteur » exploitant la traçabilité désormais exposée.
- Auteur et type d'événement exposés :
LogDtotransmet désormais l'auteur (User) et le type d'événement structuré (EventType), tous deux persistés mais jusqu'ici invisibles côté client. L'Historique affiche un badge de catégorie coloré et le « qui » d'un acquittement ou d'une commande. - Types générés :
EventTypeetLogSeverityajoutés au générateur d'enums TypeScript (source de vérité unique). - Navigation mobile : la barre de navigation basse est traduite (elle était en français figé) et donne accès à la Main courante.
Performance
- Index du journal : ajout d'index sur
SystemLog.TimestampetSystemLog.EventType(migrationAddSystemLogIndexes). Le tri et le filtrage par date de la recherche, de l'historique et de la main courante, ainsi que le filtrage par catégorie et les comptages par type, évitent désormais un balayage complet sur des volumes de plusieurs années d'événements.
Tests
- Couverture : mapping
User/EventType, filtreseventTypes/sourceet comptage par type du contrôleur de journaux ; module de catégories d'événements (couverture exhaustive desEventType) ; rendu et gestion d'erreur de la Main courante (frise, catégorisation, compteurs, auteur, consignes, filtres, export, état vide) ; utilitaire et rendu du Mur de supervision (statut « pire cas », tri, disponibilité) ; composeur de rapport « Consignes » ; test de parité des locales FR/EN garantissant qu'aucune clé ne manque dans une langue.
[0.19.3] - 08-07-2026
Confort de connexion, test Modbus actif sur centrale réelle, et finitions cartes/son/sécurité.
Added
- Liste des utilisateurs à la connexion : l'écran de connexion présente les comptes existants en cartes défilantes (hauteur bornée), pour se connecter sans avoir à retenir les noms d'utilisateur (endpoint public
GET /api/auth/profiles, sans empreinte de mot de passe). - Testeur Modbus actif (round-trip) : le scanner Modbus offre un mode « Test actif » qui applique une commande réversible sur une centrale INIS connectée, relit la table concernée puis restaure automatiquement l'état, et affiche la comparaison avant/après/restauration ainsi que l'adresse fil réellement modifiée. Commandes couvertes : mise hors service zone/point (retour par la commande inverse) et mise en essai zone (retour par re-bascule de la même commande). Allow-list stricte côté serveur (aucune commande d'alarme), validation de la commande et de la cible avant tout accès à la centrale, délai d'application de la centrale (~5 s) respecté avant chaque relecture, et restauration garantie même en cas d'erreur.
Changed
- Fermeture autorisée par tout compte administrateur : la fermeture du service et de la fenêtre client est validée par le mot de passe de n'importe quel compte Admin ou SuperAdmin (endpoint
POST /api/auth/verify-admin-password). - Nommage « DI IHM » : l'entité point système porte le nom « DI IHM » dans toute l'interface, les libellés de la campagne de validation et les textes du code.
Fixed
- Centrage des étiquettes de zone : l'étiquette d'une zone est positionnée au pôle d'inaccessibilité en espace pixel et contrainte à rester dans le polygone, y compris lors du déplacement d'un sommet.
- Sons d'alarme : fondu d'entrée à l'amorçage et suppression des chevauchements lors des transitions rapides de clé sonore.
Tests
- Couverture élargie : rattrapage des entités système au démarrage sur base relationnelle (SQLite, au plus près de PostgreSQL), synthèse IHM/DI IHM au seed de démonstration, gardes des endpoints
jbus-roundtrip(allow-list, cible, connexion) etjbus-validation, endpoints d'authentification (verify-admin-passwordpour tout rôle admin,profilessans fuite d'empreinte), et synthèse des entités système via la création HTTP de centrale.
[0.19.2] - 08-07-2026
Zone IHM et ligne « DI IHM » traitées comme des entités de première classe, et fiabilisation des centrales AVISS de démonstration.
Added
- Pré-remplissage à la création : le créateur de centrale INIS propose d'emblée la zone système « IHM » et sa ligne « DI IHM », éditables (libellé), marquées d'un badge « Système », d'index normalisé côté serveur et non supprimables ; les zones et lignes DI physiques s'ajoutent par-dessus.
- Test de création avec entités système : un test contrôleur verrouille la normalisation d'index (zone IHM = physiques + 1, DI IHM = points + 1), la conservation des libellés et l'absence de doublon.
Changed
- Entités système de première classe : la zone IHM et la ligne DI IHM sont plaçables sur les plans et commandables au même titre que les entités physiques (cible fil de tête de table résolue côté serveur).
- Libellé « DI IHM » : la ligne système en tête des tables de points s'intitule « DI IHM ».
- Décomptes de zones : la carte de santé et la modale de détail affichent « N physiques (+ 1 système) » plutôt qu'un total brut.
Fixed
- Centrales AVISS de démonstration fiabilisées : chaque AVISS de démo utilise un pipe nommé dédié, supprimant la course entre esclaves d'un bus partagé qui faisait décrocher la plupart des AVISS.
- Mode charge du simulateur : le chargement des centrales de démonstration retire d'abord les centrales de départ, pour une correspondance stricte avec les centrales seedées du backend.
- Sélecteur de liaison du simulateur : affiche le comPort courant, sans champ vide pour les pipes de démonstration.
- Matrice réseau : le repli n'ajoute plus de ligne fantôme pour la zone système.
- Centrales de démonstration : les centrales INIS seedées reçoivent leur zone IHM et leur DI IHM (synthèse au seed, au même titre que la création manuelle et le rattrapage).
- Créateur : les entités système affichent leur adresse de tête de table (zone IHM à
zoneFireAddress − 1, DI IHM à l'adresse HS-point) au lieu d'une adresse vide.
[0.19.1] - 07-07-2026
Visibilité complète de la zone IHM et du point INIS dans l'interface, et verrouillage de bout en bout de leur chaîne de lecture/commande.
Added
- Badge « Système » : la zone IHM et le point INIS sont affichés partout (carte de santé, modale de zone, sélecteurs de commandes, plans, grille des points) avec une pastille les distinguant des entités physiques.
- Tests de bout en bout des entités système : neuf scénarios d'intégration verrouillent les adresses fil (5001 = zone IHM, 5002 = zone 1 ; 953 = point INIS, 954 = DI 1), la cible d'écriture (zone IHM → cible fil 1) et les séquences de polling.
Changed
- Grille des points dynamique : la grille d'administration des lignes DI s'adapte au nombre réel de points (fin des 16 colonnes figées) et distingue visuellement le point système.
- Repli de la matrice réseau aligné sur le nombre réel de zones de la centrale au lieu d'un 16 codé en dur.
- Bits d'état global nommés : les décalages de la table « paramètres généraux » (secteur, batterie, points HS, zone en test, défaut système, inter-armoire) sont des constantes documentées.
[0.19.0] - 07-07-2026
Prise en compte de la structure réelle de la centrale INIS-E16 : la 17ᵉ zone système « IHM » et le point système « Point INIS », qui expliquent les écarts d'indexation (+0, +1, −1) relevés face à la table JBUS du cahier des charges.
Added
- Zone système « IHM » (17ᵉ zone) supervisée : la zone occupant la tête des tables JBUS de zones de l'INIS-E16 est désormais lue (feu, dérangement, hors service, test) et exposée comme zone à part entière, marquée « système ».
- Point système « Point INIS » supervisé : le « bit 0 fantôme » des tables de points, jusqu'ici lu puis ignoré, est reconnu comme l'état du point interne INIS et exposé comme point supervisé, marqué « système ».
- Rapport d'analyse
RAPPORT-ZONE-IHM.md: modèle structurel unifié des décalages du firmware (index interne = numéro physique + 1), désalignements latents identifiés (tables feu/défaut points, tables évac/émission/DM) et protocole de validation terrain E1–E6.
Changed
- Offsets du profil INIS documentés comme structurels :
CommandTargetOffsetetPointReadBitOffsetdérivent de la présence des entités système en tête de table ; les adresses fil des zones et points physiques validées au banc restent inchangées. - Commandes vers les entités système : la zone IHM et le point INIS utilisent la cible fil 1 (index interne de tête de table), conformément à la loi de ciblage validée au banc pour les entités physiques.
- Nombre de zones du
GenericModbusAdapteraligné sur la configuration réelle de la centrale (repli sur le profil), au lieu d'une valeur de profil figée.
Fixed
- Suite de tests front indépendante du runtime Node : le
localStorageexpérimental de Node 22.4+/25 ne fait plus échouer les tests (implémentation mémoire rétablie dans le setup de test).
[0.18.2] - 07-07-2026
Rétablissement de la diffusion sonore des alarmes et fiabilisation des défauts système en présence d'une alarme feu.
Fixed
- Diffusion sonore des alarmes rétablie : le service retrouve les fichiers son (alarme, défaut, évacuation, émission, DM) lors d'une exécution depuis les sources, où ils ne sont pas copiés dans
wwwroot. - Défauts système conservés sous alarme feu : un défaut système (secteur, batterie, UC, inter-coffret) reste affiché lorsque la centrale est simultanément en feu, au lieu de disparaître jusqu'à la résolution du feu — l'alarme et le défaut généraux sont traités comme des états indépendants.
- Acquittement de la synthèse générale reflété dans l'interface : le bouton d'acquittement d'une alarme ou d'un défaut général passe à l'état acquitté au lieu de rester figé sur « Acquitter ».
[0.18.1] - 07-07-2026
Localisation des types de notification et source unique partagée des profils Modbus INIS/AVISS.
Changed
- Profils Modbus INIS-E16 et AVISS pilotés par une source unique partagée : les adresses de registres et les codes de commande sont déclarés dans le projet
shared(StandardPanelProfiles). Le backend et le simulateur en dérivent leur configuration ; il n'y a plus de jeu d'adresses à synchroniser à la main entre les deux.
Fixed
- Types de notification localisés : le libellé de type d'une notification (info, succès, attention, erreur, alarme) suit la langue de l'interface au lieu d'un texte français figé.
[0.18.0] - 07-07-2026
Configuration métier typée en code, couche d'interface partagée (tableaux, modales, chargement unifié), réorganisation du dépôt et fiabilisation (état déconnecté, éditeur de plans, démarrage backend).
Added
- Test de connexion des centrales : notification de chargement avec délai avant l'affichage du résultat.
- Vérification CI des types générés : le pipeline régénère
vue/src/config/generated/enums.tsdepuis les enums C# et échoue si le fichier versionné n'est pas à jour.
Changed
- Configuration métier typée en code : les profils Modbus standard (INIS-E16, AVISS) et les clés métier (incidents, commandes, sons, rôles) sont définis en C# fortement typé — enums (source unique) + registry — et validés au démarrage (clé inconnue, doublon ou son inexistant fait échouer le boot avec un message clair). Les types partagés backend↔frontend sont générés automatiquement depuis les enums.
- Validation des profils Modbus à la création et à l'édition via l'API : un profil incohérent est rejeté (HTTP 400) au lieu d'être persisté.
- Paramètres de supervision en options typées liées à
appsettings.jsonet validées au démarrage. - Couche d'interface partagée : tableaux avec tri, filtre et pagination, modales et sélecteurs réutilisables ; indicateur de chargement unifié et barre de progression de navigation.
- Barre latérale réorganisée par groupes d'usage ; vue des rapports alignée sur la mise en page des autres vues et liste des modèles migrée sur le tableau partagé.
- Fenêtres natives (client, gestionnaire) : refonte visuelle Desautel et interface bilingue FR/EN.
- Dépôt réorganisé : projets .NET sous
dotnet/, frontend sousvue/, documentation regroupée sousdocs/.
Fixed
- État système : les zones et points d'une centrale déconnectée s'affichent comme « inconnus » et non plus « normaux ».
- Client bureau : la fenêtre reste en plein écran (mode kiosque) lorsqu'on la déplace.
- Éditeur de plans : glissement de sommet et changement de plan fluidifiés ; écran « indisponible sur mobile » réactif au redimensionnement.
- Démarrage backend : nettoyage des données de démonstration idempotent (plus d'échec sous stratégie de reconnexion).
- Sauvegarde : import de base de données exécuté dans la stratégie d'exécution EF (résilience aux reconnexions).
- Configuration : remontée de répertoires fiabilisée pour localiser le fichier de configuration.
- Scripts PowerShell : BOM UTF-8 restauré (accents et analyse syntaxique corrects).
Performance
- Carte : glissement de sommet et changement de plan nettement plus fluides (index des équipements placés, rectangle mis en cache pendant le glissement, rejet par boîte englobante avant le test de survol d'arête, retrait des flous d'arrière-plan sur les grands panneaux).
[0.17.0] - 03-07-2026
Profils d'incidents et de commandes pilotés par les données, mode démonstration complet, refonte visuelle (connexion, tableau de bord, plans) et fiabilisation temps réel.
Added
- Profils d'incidents data-driven : les types d'incident, leur priorité, leur couleur, leur icône, leur son et leur sévérité de journalisation sont désormais déclarés par centrale dans
app.config.json(Incidents,SystemSounds). Le backend et le frontend dérivent tout leur comportement de ces profils au lieu de valeurs figées dans le code. - Commandes de centrale data-driven : les commandes Modbus (reset, silence, activation/désactivation zone/point, mode manuel, essai zone) sont déclarées par profil (
Commands) avec code de fonction, portée, libellé, icône et variante. Migration automatique des configurations existantes et résolveur dédié. - Commandes Modbus par type dans la barre latérale : accès direct aux commandes de centrale depuis la sidebar (navigateur + flyout), pilotées par le profil actif.
- Précédence sonore par clé de son (
AudioKey) : la priorité audio entre incidents est déterminée par les données du profil, avec réglages de son en 3 niveaux et onglets par profil de centrale dans les paramètres. - Mode démonstration complet : jeu de données de démonstration (centrales, historique long terme sur plusieurs années, utilisateurs, jusqu'à 16 plans architecturaux SVG par bâtiment) généré de façon idempotente, réinitialisé automatiquement au démarrage, avec profil de lancement backend dédié et centrales en ligne par défaut.
- Simulateur — mode charge : centrales miroir instanciées depuis
demo-fixtures.json, centrales en ligne sans action manuelle et panneau de logs replié par défaut. - Export complet de la base : génération d'un export exhaustif (flux CSV + PDF) avec indicateur de progression.
- Animations du tableau de bord : apparition, acquittement et résolution des incidents animés ; glisser-déposer animé des onglets de plans (SortableJS) et fondu des zones de plan.
- Splash screen d'authentification : écran de transition contextuel connexion → tableau de bord et déconnexion, avec logo intégré au panneau de marque.
- Filtre par modèle de centrale dans l'en-tête de l'État système.
- Réponses d'erreur homogènes : les erreurs serveur (500) sont renvoyées au format
ProblemDetails.
Changed
- Type de centrale dérivé des profils chargés : le frontend ne code plus en dur la liste des types de centrale ; elle provient des profils Modbus disponibles.
- Refonte visuelle : page de connexion repensée en landing sobre et responsive, barre latérale et paramètres restylés, tokens de couleurs unifiés et uniformisation des vues, layout global et transitions harmonisés.
- Navigation fluide entre les pages (perception de réactivité améliorée).
- Réglages Modbus : infobulles explicatives ajoutées, retrait du réglage de timeout SignalR et d'un paramètre de parallélisme sans effet.
- Statistiques : graphes bornés, survol correct sous zoom et refonte des cartes de types d'événement.
- Documentation : guide de configuration data-driven des profils Modbus (description des clés JSON).
Fixed
- Reconnexion des centrales détectée en ~10 s au lieu de ~32 s (supervision).
- Reconnexion SignalR persistante et suppression des toasts en double à la reconnexion.
- Notifications : déduplication par clé, sanitisation du contenu et fin des cumuls de notifications.
- Point acquitté par drapeau : un point acquitté par type d'incident est conservé après retour à Normal (au lieu de disparaître à la résolution).
- Tableau de bord : cartes apparaissant de façon fiable, nom de centrale non tronqué, incident général subsumé par le détail de zone, état « aucun incident » sobre et centré.
- Plans : sélection d'onglet au clic/molette, scrollbar personnalisée déplaçable, changement de plan sans scintillement, drag relâché hors zone corrigé, tooltips avec nom complet des centrales, résolution de centrale par numéro de série ou identifiant avec repli sur les dimensions du plan.
- Génération PDF : police IBM Plex Sans embarquée pour un rendu identique hors ligne.
- Accès réseau local : affichage du port réel du navigateur et de l'IP principale de la machine (
/network-info). - Éditeur de profil Modbus : codes de mode manuel et d'essai zone complets.
- Simulateur : repli AVISS aligné sur l'offset 0 et l'adresse « Hors service point » 953.
- i18n : traduction des incohérences réseau INIS.
Security
- Anti-zip-slip à l'import : les entrées d'archive pointant hors du dossier de destination sont rejetées lors de la restauration de sauvegarde.
[0.16.1] - 30-06-2026
Correction de l'adressage Modbus du profil AVISS et rapport d'analyse des registres.
Changed
- Profil Modbus AVISS : les adresses de la table d'échange sont des adresses fil JBUS brutes ; l'offset d'adressage passe de
-1à0(lecture aux adresses documentées du cahier des charges) et l'adresse « Hors service point » est alignée sur sa valeur hexadécimale (953). Le profil INIS-E16, déterminé sur matériel, reste inchangé.
Added
- Rapport d'analyse Modbus (
RAPPORT-MODBUS-ADRESSAGE.md) : comparaison des adresses du cahier des charges et de l'application, diagnostic des divergences et pistes de validation pour les centrales INIS-E16 et AVISS DABUS.
[0.16.0] - 30-06-2026
Lisibilité de l'interface, robustesse de la session, conformité des licences et migration du moteur PDF.
Added
- Accès réseau local : l'adresse IP du poste et le port d'accès à l'interface sont affichés dans Paramètres → Profil, et documentés dans la notice (port 5000,
http://<ip>:<port>). - Documentation technique : guide d'architecture et d'onboarding (
ARCHITECTURE.md). - Conformité open source : notices des composants tiers (
THIRD-PARTY-NOTICES.md+ attribution npm complète) et licences SIL OFL des polices embarquées.
Changed
- Police : passage à IBM Plex Sans, embarquée localement (rendu identique sans accès Internet), avec tailles et poids des petits textes renforcés pour la lisibilité.
- Échelle de l'interface : zoom automatique plafonné à 90 % (rendu plus net) ; cartes KPI resserrées ; pages de paramètres élargies pour afficher les tableaux en entier.
- État système : hiérarchie visuelle revue (anomalies mises en couleur, section « Zones » titrée avec aperçu compact et détail dépliable fluide).
- Rapports PDF : sections réordonnées (journal détaillé en fin de document), titres avec explications de méthode, niveaux du journal alignés sur l'Historique (Critique / Avertissement / Information) et vocabulaire accessible.
- Session de supervision : le poste ne se déconnecte plus automatiquement (session longue durée, résilience aux coupures réseau) ; seul le bouton Déconnexion ferme la session.
- Génération PDF : moteur migré de QuestPDF vers PDFsharp/MigraDoc (licence libre, sans contrainte commerciale).
Removed
- Indicateurs MTBF et disponibilité des rapports (méthode de calcul non fiable) ; les chiffres factuels (défauts, déconnexions, communication Modbus) sont conservés.
Fixed
- Chevauchement de l'en-tête avec le contenu dans les rapports PDF.
- Zoom incontrôlé de la carte des plans sous Chrome (molette).
- Statistiques affichées en « N/A » (calcul des variations par rapport à la période précédente).
- Libellé incohérent au-dessus des zones dans l'État système.
- Persistance des affectations de réseau INIS et incohérences d'occupation de slots.
[0.15.0] - 29-06-2026
Centre de rapports unifié : génération modulaire, archive consultable, automatisation et télémétrie Modbus.
Added
- Page « Rapports » dédiée (sidebar, sous les paramètres) regroupant en un seul endroit la génération à la volée, l'archive consultable et la configuration de l'automatisation — auparavant éparpillées entre Historique, Statistiques et Paramètres.
- Rapports modulaires : choix des sections à inclure (centrales & configuration Modbus, résumé + journal des événements, statistiques de communication Modbus, utilisateurs & activité), période et langue (FR/EN). Toutes les sections sont incluses par défaut, la date de fin est préremplie à la date du jour et la langue suit l'interface.
- Génération PDF + CSV systématique : chaque génération produit toujours les deux formats, et tout rapport est automatiquement archivé.
- Modèles de rapports réutilisables : enregistrement d'un ensemble nommé de sections/options, applicable à la volée ou par la planification automatique.
- Archive des rapports : les rapports générés (automatiques et manuels) sont conservés et consultables depuis l'interface, avec recherche, tri par date, téléchargement et suppression.
- Planification active par défaut : un rapport mensuel (~30 jours) est généré automatiquement dès l'installation.
- Télémétrie de communication Modbus : collecte agrégée par centrale (latence moyenne/min/max, taux de succès, reconnexions/déconnexions), persistée périodiquement et exploitable dans les rapports.
Changed
ReportServicerefondu en orchestrateur modulaire (un composeur par section, rendu PDF et CSV) ; l'ancien rapport d'événements et l'endpointGET /api/reports/generaterestent inchangés (compatibilité interne).- Centralisation des exports : les boutons d'export PDF/CSV de l'Historique et des Statistiques sont supprimés ; toute génération passe désormais par la page Rapports.
- Planification des rapports : peut désormais s'appuyer sur un modèle, et les rapports planifiés sont automatiquement archivés et consultables.
- La configuration de la planification quitte la page Paramètres au profit d'un renvoi vers la page Rapports.
- Saisie des dates par calendrier (sélecteur de période) sur la page Rapports.
Fixed
- Libellés de la barre latérale : ils suivent désormais le changement de langue sans rechargement de page (auparavant figés jusqu'à un F5).
[0.14.0] - 23-06-2026
Version de durcissement (sécurité et fiabilité temps réel) issue d'une revue de code.
Security
- Clé de signature des licences renouvelée et sortie du code : la clé privée RSA n'est plus présente dans le dépôt. Elle est fournie hors dépôt (variable d'environnement ou fichier non versionné) ou embarquée dans le générateur au moment de la compilation.
- Empreinte matérielle de licence portée à 256 bits (SHA-256 complet) pour empêcher collisions et falsification.
- Plus de secret applicatif par défaut : le service refuse de démarrer si
Security:SuperAdminPasswordn'est pas configuré (suppression d'un secret connu potentiellement exploitable). - Endpoints sensibles protégés : les commandes du signal sonore et le test de connexion des centrales exigent désormais une authentification.
- Clé de signature JWT persistée : elle n'est plus régénérée à chaque démarrage, supprimant la déconnexion de tous les utilisateurs au redémarrage du service.
- Anti-débogage du client rendu cohérent (politique fail-closed).
Fixed
- Sons/notifications d'alarme en double après un cycle déconnexion → reconnexion : l'initialisation temps réel est rendue idempotente et la reconnexion unifiée.
- Acquittement d'alarme : l'état temps réel n'est plus écrasé par un instantané REST plus ancien.
- Reconnexion des centrales (notamment AVISS sur tube nommé) accélérée par un test de vivacité avant réutilisation d'une connexion morte.
- Course de données sur l'état de connexion des centrales (supervision) supprimée.
- Simulateur : correction d'une course de données sur le datastore Modbus et des redémarrages intempestifs du serveur.
Changed
- Générateur de licence autonome et portable (exe « tout dedans » pour les techniciens) ; secret applicatif désormais déployé avec l'application.
- Configuration des centrales : l'obfuscation interne est documentée honnêtement (ce n'est pas un chiffrement) ; l'accès aux détails passe par l'authentification.
- Diagnostics auparavant silencieux désormais journalisés.
Removed
- Code mort supprimé côté client, manager, interface et simulateur.
[0.13.0] - 23-06-2026
Added
- Migration PostgreSQL embarqué : le stockage applicatif passe sur PostgreSQL (Npgsql), installé et initialisé automatiquement par l'installateur. Le mot de passe du rôle PostgreSQL est dérivé du secret applicatif unique.
- Système sonore complet : refonte de l'alerte sonore (NAudio) — sons distincts par type d'incident, gestion du relais sonore et reprise cohérente après acquittement.
- Accès distant : prise en charge de l'accès distant à la supervision, accompagnée d'une fiabilisation générale de l'application.
- Support multi-drop RTU : plusieurs centrales peuvent partager un même bus Modbus série. Le client physique est mutualisé (comptage de références) et n'est libéré qu'au départ de la dernière centrale du bus.
- Simulateur RTU réaliste : le simulateur émule un vrai bus RTU multi-drop via Named Pipe et démarre par défaut avec 2 centrales INIS (ports 502/503) et 3 centrales AVISS.
- Refus des cibles de connexion en doublon : une nouvelle centrale est rejetée si son couple cible (IP:port ou port série + Slave ID) est déjà utilisé, évitant les conflits de bus.
- Identité visuelle des centrales : attribution automatique d'une teinte par centrale (roue de couleurs limitée à un spectre pastel sûr), pour les distinguer entre elles sans les confondre avec les incidents vifs.
- Plans enrichis : incidents détaillés directement sur les plans, contour de défaut système, et tooltips complets avec ancrage dynamique.
- Zoom dynamique sur la carte et les plans, accompagné d'une refonte du chrome applicatif, du dashboard et des tooltips.
- Mode configuration : les alertes de perte de connexion sont supprimées tant qu'une centrale est en cours de configuration.
- Abstraction des types de centrale : introduction d'une classe de base d'adaptateur Modbus et d'une fabrique par registre (profil, particularités de timing, constructeur déclarés par type), facilitant l'ajout de futurs types de centrale.
- Documentation & aide : notice d'utilisation technique (
NOTICE_UTILISATION.md) et page d'aide intégrée à l'application. - Tests d'intégration end-to-end : nouvelle couverture bout-en-bout et finalisation du plan de test.
Changed
- Centralisation du secret applicatif : un secret unique (
Security:SuperAdminPassword) sert à la fois au compte SuperAdmin et au rôle PostgreSQL, résolu viaSecurityDefaults. - Fiabilisation du cœur Modbus : amélioration des stratégies de connexion (retry à back-off exponentiel, circuit-breaker par connexion, délais d'auto-réarmement adaptés aux liaisons locales).
- CI GitHub Actions : optimisation du déclenchement des workflows (tests + build).
- Améliorations d'interface : divers ajustements d'ergonomie et de cohérence visuelle.
Fixed
- Reconnexion AVISS après redémarrage backend : une centrale AVISS simulée (Named Pipe RTU) se reconnecte désormais correctement — détection de la fermeture côté pair (EOF) et recréation propre de l'instance de pipe.
- Message du circuit-breaker : affichage du délai réel d'auto-réarmement (3 s en local, 30 s réseau) au lieu d'une valeur figée.
- Bouton « Appliquer » AVISS : redevenu visible grâce à une configuration enroulable dans l'en-tête.
- Ligne de liaison du tooltip (carte) : visibilité et ancrage de zone dynamique corrigés.
- Requêtes PostgreSQL : correction de la configuration des requêtes après la migration.
- Diagrammes Mermaid : correction du rendu dans la documentation.
[0.12.1] - 18-06-2026
Changed
- Alignement normes SSI (NF S 61-970/EN 54) : séparation des types Évacuation, Émission et DM Extinction du compteur Défauts. Fire/GlobalFire → Critique, Disconnected → Erreur, Test → Avertissement.
- Refonte visuelle StatisticsView : ajout de filtres par type d'événement avec conteneur scrollable horizontal, flèches de navigation, et alignement des boutons Actualiser/CSV/PDF.
Fixed
- ReportService CSV header : correction "EVENT LOG" → "LOGS" pour matcher les assertions de test.
- Bouton Actualiser StatisticsView : style aligné avec boutons CSV/PDF (même padding, background, border-radius).
- 15 warnings analyse code backend : résolution des avertissements CS8602, CS8604, CS8625, CA2022, xUnit1031.
[0.12.0] - 18-06-2026
Added
- Refonte visuelle premium : 5 vues alignées sur le style industriel (glass/blur,
backdrop-blur-xl, palette slate cohérente) — LoginView, HistoryView, PanelManagementView, UsersView, ModbusProfilesView. - Refonte page Réseau INIS : suppression de la mini sidebar et du sub-header, remplacement par des cards flottantes en grille (8 slots), sélecteur réseau dropdown, section incohérences détaillée avec badges Error/Warning.
- Modale Parc centrales partagée : la KPI "Parc" ouvre désormais la même modale fleet sur toutes les pages (Home, Status, etc.), centralisée dans
SystemKpiGrid. - Migration localStorage → API backend (INIS Networks) : les réseaux, assignations de slots et configurations sont désormais persistés côté serveur (
inis-networks.json). Le localStorage n'est plus la source de vérité. Migration automatique des données existantes au premier chargement. - Détection d'incohérences améliorée : vérification cross-réseaux (une centrale dans Réseau1 n'est plus signalée comme "non assignée" depuis Réseau2), slots dupliqués, XML manquants.
- 13 nouvelles clés i18n FR/EN : localisation complète de la page Réseau INIS (matrixLoaded, noMatrix, unlinkSlot, viewRawJson, etc.).
Changed
- Store INIS Networks : refonte complète — toutes les opérations CRUD passent par l'API backend,
clearSlotappelleassignPanelToInisNetwork(null)(fix manquant),globalDatacentralisé dans le store. - Indicateurs "état vide" : placeholders "aucun plan sélectionné" et "aucun incident" redesignés (icônes plus visibles, ombres réduites, sous-textes explicatifs).
- Palette couleurs unifiée : migration
gray-*→slate-*dans StatusView, PanelManagementView, HierarchicalAlertList.
Fixed
- Lint global : suppression des imports/variables inutilisés dans 5 fichiers (HistoryView, HomeView, AlertItem, IncidentCard, map.utils).
- Nettoyage réseaux fantômes : suppression automatique des réseaux sans nom et sans panels au chargement backend.
- Sélecteur réseau : masqué quand un seul réseau existe, bordure visible et style clair quand multi-réseaux.
- Incohérences cross-réseaux : les centrales assignées à un autre réseau ne sont plus faussement signalées comme "non assignées".
[0.11.0] - 18-06-2026
Added
- Acquittement par type d'incident : chaque type d'événement (feu, dérangement, hors-service, évacuation, etc.) est désormais acquitté indépendamment sur chaque zone et chaque point. Un acquittement feu sur une zone ne touche plus au dérangement actif sur cette même zone.
- Multi-flags sur les points : les détecteurs peuvent désormais afficher plusieurs états simultanés (feu + dérangement + hors-service) lus depuis les tables Modbus séparées, avec un cycle de vie indépendant par type.
- Champ
PointAllFlagsdans le snapshot Modbus : les adaptateurs INIS-E16 et AVISS construisent désormais la liste complète des drapeaux actifs par point (même logique queZoneAllFlagspour les zones). - Champ
FlagAckStatusesdans les DTOs : les zones et points exposent un dictionnaire d'acquittement par type d'incident vers le frontend, supprimant le besoin de suivi côté client. - Cascade hiérarchique par type : l'acquittement d'un type d'incident sur une zone propage automatiquement ce même type aux points enfants, sans affecter les autres types actifs.
- Tests unitaires per-flag : couverture complète des scénarios multi-flags, cycles de vie indépendants, cascade hiérarchique et réapparition d'incidents (backend + frontend).
- README illustré : refonte complète de la documentation principale avec 7 diagrammes Mermaid expliquant le fonctionnement du système en français non technique.
Changed
- Modèle domaine Zone et Point : remplacement du
AckStatusunique par un dictionnaireFlagAckStatuses(par type d'incident). La propriétéAckStatusest conservée en lecture seule pour compatibilité. - Services ZoneManagement et PointManagement : réécriture des transitions d'état pour gérer chaque flag indépendamment (apparition, latching, résolution, réapparition).
- API d'acquittement : le endpoint
POST /api/Panels/{id}/acknowledgeaccepte un paramètre optionnelflagpour cibler un type d'incident précis. - Refonte visuelle IncidentCard : suppression du texte « ✓ Acquitté » séparé, intégration de l'état d'acquittement directement dans le badge (couleurs atténuées + icône check). Boutons plus lisibles avec espacement amélioré.
Removed
- localStorage d'acquittement : suppression complète du suivi d'acquittement côté navigateur (
ack-{stationId}-{index}-{flag}). L'état backend est désormais la source de vérité unique.
[0.10.0] - 17-06-2026
Added
- Simulateur v2 : refonte complète avec adresses Modbus alignées sur
app.config.json, 7 états zone, 3 états point, modes Cascade et Chaos, réception de commandes backend, compteur de lectures temps réel. - Affichage hiérarchique des incidents : nouvelle liste Centrale → Zones → Points sur le dashboard (composants
HierarchicalAlertList,IncidentCard). - Multi-états par zone : affichage simultané de plusieurs drapeaux actifs (Feu + Évac + DM) sur la même carte d'incident grâce au champ
ZoneAllFlags/ActiveFlags. - Composable
useIncidentStyling: factorisation des fonctions de couleur/icônes partagées entre composants d'alertes. - Labels multi-détecteurs : prévisualisation de 2 noms de points dans le label d'alerte + bouton « Voir tout » avec modale.
- 13 tests
processGrouped: couverture complète du pipeline de groupement hiérarchique.
Fixed
- Acquittement silencieux : les zones Normal avec points actifs (HS/Disabled) sont désormais correctement acquittées via propagation aux points enfants.
- Latch zombie : le status de zone/point est maintenant mis à Normal lors du latch
HardwareCleared, éliminant l'état zombie aux polls suivants. - SQLite
Journal Mode=Wal: remplacé parSqlitePragmaInterceptor(PRAGMA viaDbConnectionInterceptor) car le keyword n'est pas supporté parMicrosoft.Data.Sqlite. - Simulateur RTU : garde anti-double-start,
StopServer()robuste avec try/catch par ressource.
[0.9.0] - 17-06-2026
Fixed
- SupervisionWorker : Correction d'une fuite critique de scope DI dans
GetStateService()(remplacé par un pattern thread-safe disposant proprement le scope à chaque appel). - SupervisionWorker : Observation des exceptions dans les tâches de supervision fire-and-forget pour éviter la perte silencieuse d'erreurs.
- SupervisionWorker : Journalisation des exceptions lors du chargement initial de configuration.
- frontend : Configuration d'un timeout de 30 secondes pour les requêtes HTTP Axios (
httpClient.ts) afin d'éviter le gel de l'interface. - frontend : Capture et journalisation correcte des erreurs d'initialisation SignalR dans
signalr.service.ts. - frontend : Ajout de gestionnaires de rejets de promesses (
.catch()) sur tous les imports dynamiques designalr.service.tset lors de l'appel àpanelStore.initialize()dans la garde du routeur. - frontend : Nettoyage des
console.logde debug en production au profit deconsole.debug. - ModbusConnectionManager : Journalisation des exceptions au lieu de les avaler silencieusement lors de l'invalidation et de la libération des clients TCP/RTU.
[0.8.0] - 17-06-2026
Added
- Tests résilience Modbus : 30 tests de robustesse couvrant pannes partielles de batch, garbage data, déconnexion mid-séquence, priorité multi-état (Fire > Evacuation > Fault), circuit-breaker half-open, backoff exponentiel et concurrence de connexions.
- Tests acquittement : 10 tests edge-case sur la machine d'états AckStatus — réapparition d'alarme, ack hiérarchique zone→points, changement de type, auto-clear summary faults, latching MainsFailure.
- Tests concurrence SQLite : 3 tests de charge (10 writers parallèles, deadlock DB+API, retry DbUpdateException).
- Tests connexion TCP : 4 tests de résilience (dispose safety, disconnect concurrent, IsConnected après dispose).
- Tests timeout sémaphore : 1 test validant le timeout 10s sur SharedModbusClient.
Fixed
- Bug critique acquittement : réapparition d'alarme zone/point pendant HardwareCleared restait bloquée en état latché au lieu de redevenir active. Corrigé dans ZoneManagementService et PointManagementService.
- Concurrence SQLite : activation du mode WAL + busy_timeout 5000ms pour éliminer les erreurs SQLITE_BUSY sous charge concurrente multi-centrales.
- AuditLogService : retry 3 tentatives sur DbUpdateException au lieu d'avaler silencieusement les erreurs de persistance.
- Race condition IsConnected : ModbusTcpClient et ModbusRtuClient capturent désormais les références localement pour éviter les NullReferenceException concurrentes.
- TOCTOU connexions Modbus : null-check déplacé dans le verrou sémaphore pour les 10 méthodes Read/Write (TCP + RTU).
- Fuite mémoire sémaphores : SharedModbusClient nettoie les sémaphores dans InternalDispose.
- Blocage infini sémaphore : timeout 10s sur toutes les acquisitions WaitAsync de SharedModbusClient.
[0.7.0] - 17-06-2026
Added
- Tests frontend : couverture complète des Phases A→D du roadmap — composables map (useMapInteraction, useMapControls), composants map (MapEditor, MapTooltip, UnifiedMap), réseau INIS (InisNetworkView, NetworkMatrixGrid, NetworkMatrixLinkBadge), écrans admin (PointsGrid, ProfileView, ModbusProfilesView, ModbusProfileDialog, InstallationContent, PanelDetailModal, NetworkMatrixModal), composants UI (NotificationItem, NotificationStack). Total : 821 tests frontend.
- Tests backend : couverture de la Phase E — AuthController, MapsController, ConfigController, GlobalParametersController, HubModbusLogger. Total : 627 tests backend.
Fixed
- Correction de 4 clés i18n manquantes en français (
profile.usernameUpdated,profile.title,profile.generalTitle,settings.descriptions.Modbus.SignalRTimeout). - Correction de clés i18n incorrectes dans PanelDetailModal (
zones.status.*→panels.zones.status.*). - Correction de toutes les erreurs TypeScript bloquant le build CI (types Ref, BuildingMap.zones, wrapper.vm typings, modbusScenarios status types, global-config mock types).
- Correction de 12 erreurs ESLint préexistantes dans les tests frontend.
[0.6.2] - 10-06-2026
Added
- Modbus / Incidents : Ajout de propriétés runtime
SystemFireAcketSystemFaultAckpour le suivi persistant en mémoire des acquittements d'alarmes et défauts généraux. - Modbus / Incidents : Mécanisme de suppression dynamique des alarmes et défauts de synthèse Modbus ("Points Disabled", "Zone In Test", "General Fire", "General Fault") sur les centrales adressables (INIS-E16, AVISS) si des incidents plus granulaires (zones/points) sont présents.
- Documentation : Intégration de 100% de la documentation du code en français avec des commentaires XML pour le backend C# et des annotations TSDoc/JSDoc pour le frontend.
- Documentation : Compilation multi-projets unifiée sous DocFX et intégration automatique du
toc.ymlracine pour l'arborescence.
Changed
- Modbus / Incidents : Refactoring de
UpdateFaultStatusAsyncetHandleSystemAcknowledgmentAsyncpour unifier le cycle de verrouillage/latching et la journalisation dynamique selon la sévérité (Erreur pour le Feu, Avertissement pour les Défauts, Info pour Test/Désactivé). - Interface Admin : Retrait de la gestion obsolète des profils Modbus et amélioration visuelle globale de la vue de création et configuration des centrales.
Fixed
- Modbus / Incidents : Résolution des écarts d'indexation Modbus pour l'acquittement des alarmes et défauts de synthèse.
- Documentation / CI : Configuration du runner Linux de la CI (
EnableWindowsTargeting) pour compiler sans erreur les projets dépendants de WPF (DocFX). - Documentation / CI : Correction des redirections 301/404 Netlify et des liens brisés vers la référence d'API
/backend/index.html.
[0.6.1] - 27-05-2026
Changed
- Documentation : Suppression des boutons hero (doublons des cartes de navigation) et de la tagline de la page d'accueil.
- Documentation : Correction du carré noir dans la navbar — suppression du
target: _blanksur le lien "API C#". - CI/CD : Ajout du déploiement automatique vers Netlify à chaque push sur
main.
[0.6.0] - 27-05-2026
Added
- Documentation : Migration du portail de documentation vers VitePress — portail unifié avec guides techniques, référence API TypeScript (TypeDoc → markdown) et référence API C# (DocFX) accessibles depuis un seul serveur local.
- Documentation : Nouveau script
generate-docs.ps1avec pipeline en 4 étapes (TypeDoc → VitePress → DocFX → packaging) et paramètres-SkipBackend,-SkipFrontend,-SkipPortal,-Serve,-Package. - Documentation : 9 pages de guides VitePress avec rechargement à chaud (
npm run docs:dev) et thème industriel rouge/sombre.
Changed
- Documentation :
frontend/typedoc.jsonreconfiguré pour sortie markdown au lieu de HTML, sortie dansdocs-src/api/. - Documentation :
docfx.jsonréduit à la référence API C# uniquement (docs/backend/). - Documentation : Pipeline CI/CD (
docs.yml) mis à jour avec les nouvelles étapes de build. - Sécurité :
DbInitializer— hash BCrypt par défaut hardcodé pour le comptedesautel;Security:SuperAdminPassworddansappsettings.Crypto.jsondevient optionnel (mot de passe en clair hashé au démarrage si renseigné). - Configuration :
appsettings.Crypto.exemple.jsonrestructuré avec champs_doc_explicatifs. - Ressources : Fichiers PDF et XML de référence déplacés dans
Resources/.
[0.5.0] - 13-05-2026
Added
- Configuration : Ajout d'un modèle d'exemple
appsettings.Crypto.exemple.jsondécrivant les clés et schémas cryptographiques attendus en production.
Changed
- Matrices Réseau : Optimisation visuelle de l'interface des matrices INIS avec intégration de lignes diagonales pour le marquage clair des auto-références de centrales, et finalisation du mode de rendu Backup.
- Sécurité : Durcissement et sécurisation renforcée des jetons JWT et des flux de session.
- Documentation : Traduction intégrale et enrichissement du fichier
README.mdet de la notice d'utilisation en français, incluant les instructions de workflow et de gestion sémantique du versioning. - CI/CD : Automatisation des flux de publication avec extraction dynamique des notes de version depuis le
CHANGELOG.mdvia GitHub Actions.
Fixed
- Statistiques et Journaux : Restauration du calcul d'historique sur la page de statistiques via l'assouplissement du filtrage des anciens logs (analyse sémantique textuelle et sévérité) et réactivation de l'audit de transition d'états dans
SystemManagementService. - Disponibilité API : Ouverture de l'accès public (anonyme) sur l'endpoint
/api/modbus/statuspour éliminer le faux positif "Serveur Déconnecté" sur la page de connexion. - Qualité du Code : Nettoyage et correction de 100% des erreurs et avertissements ESLint / TypeScript dans le frontend.
- Tests Unitaires : Stabilisation des tests unitaires d'authentification (
auth.store.test.ts) et de la configuration de mock globale pourhttpClient.
[0.4.0] - 11-05-2026
Added
- Système Réseau INIS : Introduction de la gestion multi-centrales pour les systèmes INIS E16.
- Moteur de Parsing : Support natif du déchiffrement et de la désobfuscation des fichiers XML INIS.
- Matrices de Commande : Gestion complète des matrices d'Extinction, Sirènes et Panneaux LED au niveau global.
- Interface Reseau : Nouvelle vue dédiée avec grille matricielle interactive et gestion des slots (C1-C8, CM).
- Service Backend : Implémentation de InisNetworkService et InisNetworkController pour la logique métier réseau.
- Migration BDD : Ajout du champ AssignedSlot aux configurations de centrales.
Changed
- Sauvegarde et Restauration : Intégration des configurations réseau (inis-networks.json) dans les exports de site.
- Parser de Configuration : Extension majeure pour supporter les relations complexes inter-centrales.
- Localisation : Ajout de plus de 100 clés de traduction pour les fonctionnalités réseau.
Fixed
- Authentification : Correction des erreurs 401 lors du chargement initial des données.
- Stabilisation i18n : Correction des clés de traduction manquantes (common.refresh).
- Robustesse : Amélioration de la gestion des erreurs lors de l'importation de fichiers XML corrompus.