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