Version actuelle: 1.1.1 🎉
Version prête pour test: 1.2.0
Déploiement: Prod - 21 février 2026
/admin/cleanup-duplicates⚡ - Puissance réelle des commandants : Ajout du calcul automatique de la puissance réelle des commandants (Puissance + Rang × 20)
📊 - Affichage puissance réelle : La puissance réelle s’affiche en gras entre parenthèses à côté de la puissance de base sur toutes les pages
🔄 - Tri par puissance réelle : Le tri par puissance dans l’inventaire utilise maintenant la puissance réelle pour les commandants
📍 - Affichage multi-pages : Puissance réelle visible sur Inventaire (grille/liste), Escouade, Meilleure Escouade, Classements, et modal de création de classement
✨ - Uniformisation complète des headers : Tous les headers de pages utilisent maintenant un style transparent cohérent avec border-bottom subtile, inspiré de la page MaisonLucie
🎨 - Suppression des fonds blancs : Fonds opaques remplacés par des backgrounds transparents sur toutes les pages (Capacites, Inventaire, Templates, Historique, etc.)
📐 - Espacement optimisé : Ajout de padding-top au main-content pour éviter les collisions avec la top bar
🎯 - Icônes cohérentes : Standardisation de la couleur des icônes (#667eea) et du texte (#1e293b) sur tous les headers
✏️ - Label “Dans l’équipe” : Remplacement du label “sélectionné” par “Dans l’équipe” avec checkbox inline
📏 - Optimisation de l’espace : Alignement de “Dans l’équipe” et “Niveau” sur la même ligne avec espacement optimisé
🔢 - Ajustements des inputs : Réduction de la largeur du champ Niveau (70px) et agrandissement du champ Puissance (120px)
🖼️ - Images des cartes : Ajustement de la hauteur des images (350px) avec object-fit cover pour éviter les troncatures et bandes blanches
✏️ - Édition des pièces : Possibilité de modifier les pièces directement dans l’interface avec mode édition interactif
💾 - Historisation : Toutes les modifications de pièces sont automatiquement enregistrées dans l’historique
🎯 - Champs éditables : Niveau, Puissance Tactique, Puissance Stratégique, et état Selectionnée
🖌️ - Feedback visuel : Bordure bleue sur les cartes en mode édition, boutons Sauvegarder/Annuler
🔤 - Nouvelle clé “Dans l’équipe” : Ajout de la clé inventory.inTeam en français (“Dans l’équipe”) et anglais (“In team”)
🔍 - Prévisualisation d’import : Nouveau workflow en 3 étapes avec pré-rapport avant intégration
📊 - Logs structurés : Logs d’import organisés par catégorie (Général, Classement, Commandant, Mercenaires, Androides, Lucie, Capacités) avec niveaux (Ok ✅ / Warning ⚠️ / Error ❌)
⚔️ - Détection de conflits : Identification automatique des conflits sur les historiques de modification (personnage, champ, date)
🛠️ - Résolution de conflits : Interface dédiée permettant de choisir pour chaque conflit entre nouvelle valeur ou ancienne valeur
📋 - Compteurs en temps réel : Affichage du nombre de conflits total, résolus et non résolus
✅ - Actions groupées : Boutons “Tout valider” et “Tout refuser” pour résoudre tous les conflits en un clic
🔒 - Validation stricte : Impossible d’appliquer l’import tant que tous les conflits ne sont pas résolus
📄 - Rapport final détaillé : Après import, affichage d’un rapport complet avec :
💾 - Nouveaux modèles de données :
ImportPreviewResult : Résultat de prévisualisation avec logs et conflitsImportConflict : Représentation d’un conflit avec anciennes/nouvelles valeursConflictResolutionApplied : Résolution appliquée avec indication si écrasée ou conservéeImportLogEntry : Log structuré avec niveau, catégorie, type de données et message📊 - Logs contextuels EF Core : Ajout de logs debug avec contexte avant les requêtes FirstOrDefault pour faciliter le diagnostic
🔧 - Services enrichis : PersonnageService, ProfileService et PmlExportService incluent maintenant des logs détaillés
⚙️ - Configuration Serilog : Niveau Debug activé pour CharacterManager.Server.Services
✅ - Fichiers JSON i18n : Correction des accolades fermantes manquantes dans fr.json et en.json
✅ - Structure HTML Capacites : Correction des balises div mal fermées causant des erreurs de build
✅ - CSS Cleanup : Suppression des overrides CSS locaux redondants, unification dans app.css
✅ - Tests unitaires mis à jour : Ajout des mocks ILogger dans PersonnageServiceTests et PmlImportServiceTests
✅ - Tous les tests passent : 78/78 tests réussis avec les nouvelles dépendances
✅ - Couverture de tests augmentée : Ajout de 2 nouveaux tests pour:
✅ - Total tests unitaires : 23/23 tests HistoriqueModificationServiceTests passent
Status: ✅ Prête pour test en environnement de validation
🔒 - Génération de mot de passe aléatoire sécurisé : Le compte admin par défaut utilise désormais un mot de passe aléatoire de 16 caractères (majuscules, minuscules, chiffres, symboles spéciaux)
🔒 - Affichage sécurisé au démarrage : Le mot de passe admin est affiché clairement dans la console au premier démarrage avec avertissement de changement obligatoire
🔒 - Suppression des credentials hardcodés : Section Admin retirée du fichier appsettings.json
📚 - README.md principal créé : Documentation complète à la racine du projet incluant :
✅ - Tests unitaires : 78/78 tests passent sans erreur
✅ - Build : Compilation réussie sans warnings
✅ - Validation sécurité : Aucune vulnérabilité critique identifiée
🎯 - Application stable : Prête pour déploiement en production
🎯 - Base solide : Architecture éprouvée (Blazor Server + EF Core + SQLite)
🎯 - Fonctionnalités complètes : Toutes les fonctionnalités core implémentées et testées
📜 - Nouvelle page: Historique des Modifications (/historique) avec suivi complet de toutes les modifications
✨ - Historisation: Enregistrement automatique de toutes les modifications sur les personnages (création, modification, suppression)
🔍 - Filtres: Filtres par type d’entité (Personnage/Pièce), type de modification (Création/Modification/Suppression), et plage de dates
📊 - Statistiques: Cartes récapitulatives affichant le nombre total et par type de modification
📥 - Export: Fonction d’export en JSON de l’historique filtré avec téléchargement direct
💾 - BDD: Nouvelle table HistoriquesModifications avec migration EF Core pour le stockage des modifications
⚡ - Service: HistoriqueModificationService avec méthodes async complètes (EnregistrerCreationAsync, EnregistrerModificationAsync, EnregistrerSuppressionAsync, GetHistoriqueAsync, ExporterAsync)
🔄 - Integration: PersonnageService enrichi avec AddAsync, UpdateAsync, DeleteAsync incluant l’enregistrement automatique dans l’historique
🎨 - UI/UX: Interface responsive avec timeline des modifications, badges colorés par type, et affichage des anciennes/nouvelles valeurs
🌍 - I18n: Ajout de nouvelles clés de traduction (fr/en) pour la page historique et les types d’entités/modifications
🐛 - Corrections: Résolution du problème de dependency injection avec constructeur optionnel, correction de l’ordre d’enregistrement des services
🐛 - Corrections: Résolution du problème de détection des modifications avec AsNoTracking() pour comparer avec les valeurs en base de données
🐛 - Corrections: Transformation des méthodes async void en async Task pour meilleure gestion des erreurs dans Inventaire.razor.cs
📦 - Assets: Fichiers CSS et JavaScript dédiés (historique.js avec fonction de téléchargement Blob, HistoriqueModifications.css)
🧭 - Navigation: Nouvel élément “Historique” dans le menu latéral avec icône clock-history
📊 - Nouvelle page: Page Statistiques (/statistiques) avec visualisation graphique complète des données mercenaires
✨ - Graphiques: Trois graphiques camembert interactifs (Type d’Attaque, Faction, Rang) utilisant Chart.js 4.4.1
📈 - Statistiques: Quatre cartes récapitulatives (Total, Puissance Moyenne, Plus Puissant, Moins Puissant)
🎨 - UI/UX: Design responsive avec grille adaptative (4/3/2/1 colonnes selon la taille d’écran)
🎨 - UI/UX: Utilisation complète de la largeur de la page, cartes avec effets glassmorphism et animations hover
🌍 - I18n: Ajout de 11 nouvelles clés de traduction (fr/en) pour la page statistiques
🧭 - Navigation: Nouvel élément “Statistiques” dans le menu latéral avec icône bar-chart-fill
🏠 - Accueil: Nouvelle carte dans la section Classements pour accès rapide aux statistiques
📦 - Assets: Module JavaScript charts.js pour gestion des graphiques avec chargement dynamique Chart.js
🎨 - CSS: Fichier Statistiques.css avec design cohérent et responsive (198 lignes)
⚡ - Performance: Optimisations avec lazy loading Chart.js, calculs statistiques uniques, et cleanup mémoire
🔐 - Sécurité: Page protégée par authentification avec filtre via PersonnageService
🐛 - BDD: Correction de l’erreur “NOT NULL constraint failed: Pieces.Puissance” lors du chargement de l’inventaire après import de capacités
🔧 - EF Core: Configuration de PuissanceLegacy avec ValueGeneratedNever() pour permettre le calcul côté application au lieu de la génération automatique par la base de données
🐛 - Import: Correction de l’erreur LINQ “could not be translated” lors de l’import de personnages avec capacités
🔧 - Services: Remplacement de StringComparison.OrdinalIgnoreCase par ToUpper() dans la recherche de capacités pour compatibilité avec SQLite
🏗️ - Architecture: Refactorisation majeure du service PML - Division en 3 fichiers distincts pour une meilleure maintenabilité
✨ - Services: Création de PmlServiceBase (385 lignes) - Classe de base avec code partagé (parsing, helpers, gestion dates)
✨ - Services: PmlImportService (770 lignes) - Service dédié aux imports (ImportPmlAsync, ImportCapacitesAsync)
✨ - Services: PmlExportService (646 lignes) - Service dédié aux exports (ExportPmlAsync, ExporterInventairePmlAsync, etc.)
🔧 - DI: Enregistrement des deux services PmlImportService et PmlExportService dans Program.cs
🔧 - Composants: Mise à jour de tous les composants pour injecter le service approprié (ImportExportPml, Inventaire, Templates, etc.)
🔧 - Tests: Adaptation des tests unitaires pour utiliser les deux services séparés
📦 - Publication: La base de données charactermanager.db est maintenant automatiquement incluse lors de la publication
🐛 - Import/BDD: Correction de l’erreur SQLite “NOT NULL constraint failed: Pieces.Puissance” en configurant PuissanceLegacy comme colonne calculée et utilisable par EF
🔧 - Import PML: Sécurisation de l’initialisation des pièces Lucie (valeurs par défaut tactique/stratégique) pour garantir des insertions sans rupture
✨ - Import/Export: Les personnages exportés depuis l’inventaire ou la modale Import/Export incluent désormais HasRelation et NivRelation
✨ - Import/Export: Les capacités associées aux personnages sont exportées/importées (inventaire, meilleure escouade, templates, historiques)
🔧 - PML: Ajout des balises Capacites/Capacite avec nom/description/icône par personnage
✨ - Modèle: Suppression de l’attribut Description du modèle Personnage (non utilisé)
✨ - BDD: Migration EF Core pour la suppression de la colonne Description de la table Personnages
✨ - UI/UX: Ajout d’une modale de sélection des capacités pour les personnages avec liste scrollable et recherche
✨ - Modale: PersonnageCapacitesModal - Sélection et gestion des capacités assignées à un personnage
✨ - Service: Méthode UpdateCapacitesAsync pour la mise à jour des capacités d’un personnage en base
✨ - Architecture: Conversion de ManageUsers en modale ManageUsersModal accessible depuis la top bar (admin uniquement)
✨ - Architecture: Conversion de ImportExportPML en modale ImportExportPmlModal accessible depuis la top bar
✨ - Architecture: Conversion de Settings en modale SettingsModal avec injection du ModalService
✨ - Navigation: Ajout d’icônes Material Symbols dans la top bar (settings, admin_panel_settings, cloud_upload)
✨ - UI/UX: Toutes les modales affichent désormais l’icône Material Symbols correspondante dans leur en-tête
✨ - UI/UX: Ajout de titres localisés “Notes de version” et “Feuille de route” dans les modales Changelog/Roadmap
🔧 - Navigation: Suppression des entrées de menu pour “Import/Export PML” et “Gestion des utilisateurs” (déplacées en top bar)
🔧 - Refactorisation: Suppression des boutons close redondants dans les modales (ModalHost gère déjà la fermeture)
🔧 - Modal: Simplification de l’en-tête d’ImportExportPmlModal (titre affiché une seule fois)
🔧 - Code: Nettoyage des méthodes Close() inutilisées dans les composants modaux
✨ - Modèle: Ajout des attributs HasRelation (bool) et NivRelation (int) au modèle Personnage pour les mercenaires
✨ - BDD: Migration EF Core pour l’ajout des colonnes HasRelation et NivRelation à la table Personnages
✨ - UI/UX: Système complet de relations mercenaires (affichage lecture, édition avec bounds 1-30)
✨ - Import/Export: Support des relations HasRelation/NivRelation dans le format d’import/export PML
✨ - Modale: Consolidation - Une seule modale DetailPersonnageModal pour tous les accès (image + édition)
✨ - UI/UX: Capacités affichées en tuiles style Home (dark theme #273449, icônes bleues, grille 9/ligne)
✨ - UI/UX: Pièces Maison Lucie affichées en tuiles style Home (alignement gauche, 320px fixes)
🔧 - Refactorisation: Suppression de la page dupliquée DetailPersonnage.razor (conservée uniquement la modale)
🔧 - Inventaire: Clic “Modifier” ouvre maintenant la modale directement en mode édition (paramètre StartInEdit)
🔧 - Inventaire: Clic image affiche la modale de détail en mode lecture
🔧 - Modal: Contrainte max-height 350px sur l’image du personnage dans la modale
🔧 - CSS: Page Capacités calée à gauche, conteneur full-width (sans max-width)
🔧 - CSS: Page Maison Lucie utilise classes hub pour cohérence visuelle avec Home
🐛 - Export/Import: Correction du format d’export historique des classements (XML → PML)
🐛 - UI/UX: Fix style du bouton “Importer” Inventaire (btn-outline-info → btn-info)
🐛 - UI/UX: Suppression de l’alerte bloquante après édition de personnage
🐛 - UI/UX: Correction largeur chips d’affection Lucie (affichage 3 chiffres)
✨ - Architecture: Migration complète éditeur de templates vers page Templates (380+ lignes)
📦 - Documentation: Tous fichiers .md déplacés dans dossier docs/
🔧 - Standardisation: Format PML devient standard pour tous les exports
✨ - Architecture: DLL CharacterManager.Resources.Personnages avec 126 images embarquées
✨ - API: Endpoint /api/v1/resources/personnages/{personnage}/{fichier} pour servir les images
✨ - Services: PersonnageResourceManager pour accès aux ressources
✨ - Utilities: PersonnageImageUrlHelper pour génération d’URLs
📊 - 86 personnages uniques organisés avec ~130 MB d’images
🏗️ - Architecture: Images organisées par dossier de personnage
🏗️ - Architecture: Création du projet CharacterManager.Resources.Interface pour intégrer les images d’interface
🏗️ - Architecture: Service InterfaceResourceManager pour accéder aux ressources embedded
🔧 - API: Ajout du contrôleur ResourcesController pour servir les images depuis la DLL
📦 - Configuration: Images d’interface packagées comme ressources embedded dans l’assembly
🗺️ - Documentation: Plan de migration des ressources pour les versions futures
En cours: Migration progressive des fichiers images depuis wwwroot/images/interface vers CharacterManager.Resources.Interface/Images
✨ - Création de la page “Capacités” avec gestion CRUD complète des capacités
✨ - Ajout d’une tuile “Capacités” sur le tableau de bord avec compteur
✨ - Import/Export des capacités via fichier PML
✨ - 28 capacités pré-importées avec icônes Bootstrap Icons
🔧 - Refactorisation de la méthode ExportPmlAsync avec classe PmlExportOptions pour meilleure extensibilité
🔧 - Ajout de constantes pour les types d’export (INVENTORY, TEMPLATES, BEST_SQUAD, HISTORIES, LEAGUE_HISTORY, CAPACITES)
🔧 - Remplacement de toutes les icônes Material Symbols par Bootstrap Icons dans le tableau de bord
🔧 - Réduction de la largeur minimale des hub-cards de 600px à 500px pour layout plus responsive
🐛 - Migration appliquée : Correction colonne PuissanceTotale dans table HistoriquesClassement
🐛 - Correction du rendu des icônes Bootstrap Icons avec le format correct bi bi-{iconname}
✨ - Création page “Maison de Lucie” avec affichage complet des pièces et de l’affection
✨ - Ajout entrée menu “Maison de Lucie” avec navigation
✨ - Tuile d’accueil “Maison de Lucie” avec aperçu rapide des pièces
🔧 - Harmonisation des largeurs de tuiles sur le tableau de bord
🔧 - Synchronisation des icônes de menu avec les pages correspondantes
🔧 - Normalisation du système de grille CSS pour le layout responsive
🐛 - Correction tests unitaires pour les méthodes Lucie House
🔧 - Alimentation roadmap à partir d’un fichier
🐛 - fix import des pieces
✨ - Suppression d’un classement de l’historique
✨ - Refonte fenetres modales
✨ - Refonte layout
🔨 - En cours - historique de classement 🔨 - En cours - page d’accueil
✨ - Ajout init par fichier PML par défaut lorsque l’inventaire est vide
✨ - Ajout Export fichier PML pour config
✨ - L’inventaire est triable par puissance également. Tri par défaut puissance décroissante
✨ - L’inventaire peut filtrer par catégorie (Commandants, Mercenaires, Androides et Lucie rooms)
🐛 - Fix image du personnage dans l’écran détail n’apparait pas pour les mercenaires non sélectionnés
🐛 - Fix mineurs
✨ - Renommage pages et menu
✨ - Création d’un classement via la page classement avec une fenetre modale
✨ - Ajout Roadmap
✨ - Ajout Releases notes
✨ - Ajout localisation notes de versions
✨ - Script d’automatisation
🔧 - Reprise de chaines en dur par des constantes
🐛 - Fix chargement des puissances dans les pieces de lucy
🐛 - Top commandant ne tenait pas compte du rang
🐛 - Meilleure escouade, le commandant affiché est Alexa au lieu de Dragana qui est la meilleure. le score est bien calculé
✨ - Implémentation complète de la Maison de Lucie
✨ - Export Lucie inclus dans l’inventaire
✨ - Calcul de puissance incluant les bonus de Lucie
✨ - Nouvelle page dédiée à la gestion de la maison
🔧 - Mise à jour des tests unitaires
🔧 - Ajout d’un script de gestion de version automatique
🐛 - Fix affichage détail des personnages
🐛 - Fix localisation
🐛 - Correction affichage androïdes et top commandant
🐛 - Corrections mineures et optimisations diverses
🐛 - Corrections majeures des localisations (français/anglais)
🐛 - Correction des warnings de localisation
✨ - Amélioration de la gestion multilingue
🐛 - Correction import/export avec localisation
✨ - Correction de l’affichage du seuil par rapport au max escouade
✨ - Amélioration des icônes dans les templates
🔧 - Corrections des tests unitaires
🐛 - Fix emplacement des cards
🐛 - Fix détail incorrect
🎯 - Refonte complète des imports/exports vers le nouveau format PML
🎯 - Format XML standardisé pour l’application
✨ - Meilleure compatibilité et extensibilité
🔧 - Nouvelle fonction limite de puissance (en travaux)
🔧 - Refonte des pages de gestion
✨ - Refonte des pages
✨ - Adaptation des traductions
✨ - Déplacement du bouton paramètres en haut à gauche
✨ - Correction de la casse du titre historique
🔧 - Mise à jour des références vers le nouveau dossier interface
🔧 - Corrections Docker
🔧 - Fix workflow environment et notifications Slack
🔧 - Ajout d’un job de vérification des secrets
🔧 - Guide de setup CI/CD
🔧 - Création automatique du repo distant
🔧 - Corrections YAML de build
🎯 - Nouvelle navigation complète
🎯 - Mise en page revue de toute l’application
✨ - Layout modernisé
✨ - Meilleure organisation des pages
✨ - Refonte de l’ergonomie générale
✨ - Déploiement Google Cloud (GCP)
✨ - Configuration pour cloud
✨ - Scripts de déploiement automatisés
✨ - Ajout du champ puissance pour les personnages
✨ - Upload d’image select
✨ - Calcul de puissance intégré
✨ - Système d’upload d’images pour personnages
✨ - Gestion des ressources visuelles
✨ - Release notes automatiques
✨ - Génération automatisée de la documentation de version
🔧 - Localisation améliorée
✨ - Système de profils utilisateur
✨ - Authentification complète
✨ - Gestion des sessions
✨ - Localisation multilingue complète (Français et Anglais)
✨ - Page de classement localisée
✨ - Amélioration majeure de l’historique des classements
✨ - Interface template revue
🔧 - Réorganisation : CSS séparé, CS séparé (meilleure architecture)
🐛 - Correction du login
🐛 - Correction de l’affichage des classements
🐛 - Correction des warnings
✨ - Page inventaire complète
✨ - Page détail des personnages
✨ - Intégration SQLite
✨ - Système d’import de personnages
✨ - Système de templates d’escouade
✨ - Drag-and-drop pour organisation
✨ - Nouvelle page Meilleur Escouade
✨ - Ajout de la puissance dans l’interface
✨ - Implémentation des méthodes de calcul de puissance
✨ - Dockerisation de l’application
✨ - Refonte de la page “À propos”
✨ - Ajout de l’export de données
✨ - Mise en place des tests unitaires
✨ - Mode adulte (filtrage de contenu)
🔧 - Clean up : Suppression des binaires
🔧 - Ajout d’un .gitignore approprié
🔧 - Gestion propre du versioning Git