Skip to content

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.

[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:SuperAdminPassword n'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 via SecurityDefaults.
  • 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, clearSlot appelle assignPanelToInisNetwork(null) (fix manquant), globalData centralisé 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 PointAllFlags dans le snapshot Modbus : les adaptateurs INIS-E16 et AVISS construisent désormais la liste complète des drapeaux actifs par point (même logique que ZoneAllFlags pour les zones).
  • Champ FlagAckStatuses dans 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 AckStatus unique par un dictionnaire FlagAckStatuses (par type d'incident). La propriété AckStatus est 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}/acknowledge accepte un paramètre optionnel flag pour 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é par SqlitePragmaInterceptor (PRAGMA via DbConnectionInterceptor) car le keyword n'est pas supporté par Microsoft.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 de signalr.service.ts et lors de l'appel à panelStore.initialize() dans la garde du routeur.
  • frontend : Nettoyage des console.log de debug en production au profit de console.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 SystemFireAck et SystemFaultAck pour 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.yml racine pour l'arborescence.

Changed

  • Modbus / Incidents : Refactoring de UpdateFaultStatusAsync et HandleSystemAcknowledgmentAsync pour 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: _blank sur 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.ps1 avec 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.json reconfiguré pour sortie markdown au lieu de HTML, sortie dans docs-src/api/.
  • Documentation : docfx.json ré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 compte desautel ; Security:SuperAdminPassword dans appsettings.Crypto.json devient optionnel (mot de passe en clair hashé au démarrage si renseigné).
  • Configuration : appsettings.Crypto.exemple.json restructuré 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.json dé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.md et 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.md via 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/status pour é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 pour httpClient.

[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.

Documentation Technique