-
released this
2026-04-06 11:15:34 +02:00 | 2 commits to main since this releasev1.1.6
Architecture
- 🏗 Refonte architecture DDD hexagonale — migration complète du monolithe
index.htmlvers une architecture en couches (domain / application / infrastructure / presentation) avec Vite + TypeScript + Vitest- Domain : entités (
Enclos,Dragodinde), value objects (GaugeType,Tier,XpTable,Race), services purs (GaugeCalculator,BreedingService) - Application : CQRS —
CommandBus,QueryBus, 15+ commandes, 8+ requêtes - Infrastructure :
LocalStorageRepository,ElectronNotification,WebAudioAlarm - Presentation : composants TypeScript, helpers live, CSS modulaire
- Tests : suites unitaires, fonctionnelles et de régression (Vitest)
- Domain : entités (
Design Obsidienne
- 🎨 Refonte graphique complète "Obsidienne" — nouveau design system glassmorphism avec tokens Material Design 3, polices Manrope/Inter/Plus Jakarta Sans
obsidienne.css(~4500 lignes) : feuille de styles MD3 complète, 37+ variables CSS tokens- Material Symbols Outlined : migration de tous les emojis vers des icônes vectorielles
- Sidebar : logo, sections organisées (Principal, Enclos, Outils), pastille de statut timer, Paramètres dans le footer
- App Shell : layout
app-shell(sidebar + main-area), header hamburger - Dashboard : grille KPI (bébés, DD actives, couples, taux de réussite, races)
- EnclosView : barres de jauge visuelles avec gradient par tier, bouton timer Material
- DragodindeCard : stats avec icônes Material, jauge XP (niveau + % + ETA)
- Accouplement : layout single-page (Parent 1 | Coeur+inputs | Parent 2 + grille de races), glassmorphism, chips génération, drag & drop
- Réapprovisionnement : arbre de reproduction redesigné avec cartes glassmorphism
- Inventaire : grille de stock ♂/♀ redesignée, simulateur avec résultats visuels
- Workflows : cartes workflow avec barres de progression, export/import sélectif
- Statistiques : écran complet avec graphiques, donut, heatmap, avatars de races
- Paramètres : cartes son avec sélection visuelle, toggle notifications, modal ntfy redesignée
- UpdateBanner : aligné sur le design MD3
Nouvelles fonctionnalités
- ✨ Toast notifications — feedbacks visuels success/error en bas à droite avec glassmorphism, auto-dismiss (3s/5s/10s), bouton d'action optionnel (ex: Annuler)
- ✨ Modale de confirmation glassmorphism — remplace tous les
confirm()etalert()natifs par une modale stylisée, clic extérieur = annulation - ✨ Undo actions destructives — snapshot/restore 1 niveau avec expiration 10s, bouton Annuler dans le toast + raccourci Ctrl+Z
- ✨ Backup/export global — export JSON avec métadonnées (app, version, date), import avec validation et confirmation, accessible depuis Paramètres
- ✨ Écran Statistiques — naissances par jour (barres), répartition des races (donut), naissances par génération, activité par jour de la semaine (heatmap), taux de réussite par race, meilleurs couples (top 10), races manquantes groupées par génération, détail par race
- ✨ Filtres de période sur les statistiques — 7j, 14j, 30j, 3 mois, tout l'historique avec comparaison delta (+/−) par rapport à la période précédente
- ✨ Export/Import de workflows — sélection individuelle ou globale, dialogue natif Windows, import avec déduplication des IDs
- ✨ Drag & drop accouplement — cartes de race glissables vers Parent 1 / Parent 2, feedback visuel et vérification de compatibilité
- ✨ Images des dragodindes (66 races en base64) sur tous les écrans
- ✨ Barres de recherche sur accouplement, réapprovisionnement, inventaire et workflows
- ✨ Sauvegarde de workflow depuis les résultats de réappro et d'inventaire
- ✨ Simulation proportionnelle inventaire — allocation dynamique multi-générations
- ✨ Filtres par génération sur les workflows + mises à jour en temps réel
- ✨ Numérotation smart des enclos — comble les trous lors de la création
Timer & Jauges
- ✨ Calcul de jauge multi-segments — gère les recharges intermédiaires et le gel au cap absolu
- ✨ Recharge de jauge en cours de session — bouton rechargement avec snapshot
{ atSec, level } - ✨ Session timer robuste — continue en temps réel après complétion automatique
- ✨ Alarme unique — se déclenche une seule fois quand toutes les cibles sont atteintes
- ✨ Détection de complétion via
setInterval— fonctionne même en arrière-plan - ✨ Jauges débloquées après session — sélection de nouvelles jauges avant la session suivante
- ✨ Commande
nouvelle-fournee— réinitialise timer + jauges + DD - ✨ ETA niveau 200 — barre de progression et pourcentage en temps réel
- ✨ Boutons reset cibles — réinitialise sérénité ou niveau depuis la card DD
Corrections
- 🐛 Recette Ebène — parents inversés corrigés
- 🐛 Simulation inventaire — algorithme glouton → allocation proportionnelle
- 🐛 Dirty flag — le rAF loop ne reconstruit plus le DOM inutilement
- 🐛 Persistance inventaire —
update-settingsgère le champinventaire - 🐛 Baffeur/Caresseur — exclusion mutuelle, contrainte de signe sur cible sérénité
- 🐛 Sons d'alarme — fréquences corrigées, bouton Test fonctionnel via WebAudio
- 🐛 CSP — ajout
img-src data:ethttps://api.qrserver.com - 🐛 Statistiques — les races Gen 1 (Rousse, Dorée, Amande) ne sont plus comptées car non créables (63 races au lieu de 66)
- 🐛 Export workflows — dialogue de sauvegarde pointe vers Documents par défaut
- 🐛 Sidebar footer — corrigé le footer masqué par la barre des tâches Windows (
calc(100vh / 1.15)pour compenser le zoom global) - 🐛 Notifications ntfy — migration de l'API headers vers l'API JSON pour le support UTF-8 (corrige les caractères accentués "pr?tes" → "prêtes")
- 🐛 Redémarrage timer — empêche le redémarrage d'un timer quand toutes les cibles sont déjà atteintes (évite l'alarme en boucle après complétion)
- 🐛 Nouvelle fournée — le bouton n'apparaît que si toutes les DD ont 20000 en maturité, endurance et amour
- 🐛 Timer jauges vides — interdit le démarrage du timer quand toutes les jauges actives sont à 0
- 🐛 Jauge vide en cours de session — affichage ∞ dans le countdown, alerte visuelle "⚠ Rechargez la jauge" avec animation pulsante, badge jauge vide sur le dashboard
- 🐛 Recharge jauge temps réel — le countdown "Alarme dans" et les stats se mettent à jour en temps réel pendant la saisie (event
inputen plus dublur), avec consolidation des recharges proches (< 2s) pour éviter la pollution du tableau - 🐛 Recharge en pause — les recharges de jauge sont maintenant acceptées quand le timer est en pause (pas uniquement pendant l'exécution)
Sécurité & Robustesse
- 🔒 Sandbox Electron —
sandbox: truedans webPreferences pour isoler le renderer - 🔒 HTTPS forcé pour ntfy — rejet des URLs HTTP, seules les connexions chiffrées sont acceptées
- 🔒 Suppression de
executeJavaScript— badge DEV migré vers IPC sécurisé (dev-mode) - 🔒 Validation structurelle import — vérification complète du schéma (id, name, dragodindes, gaugeLevels, timer) avant import
- 🔒 Sanitisation XSS —
esc()sur toutes les données utilisateur +textContentdans Toast/ConfirmModal - 🛡 try/catch sur tous les appels electronAPI — export, import, workflows (plus de crash silencieux)
- 🛡 Erreurs de sauvegarde loggées —
LocalStorageRepository.save()ne masque plus les erreurs - 🛡 Promesse Sidebar catchée —
getVersion()ne génère plus d'erreur non gérée - 🛡 Nettoyage Ctrl+Z listener —
removeEventListenerdansdestroy()pour éviter les memory leaks - 🛡 Toast stale container — protection
isConnectedcontre les conteneurs DOM détachés
UI
- 🐛 Double cercle blanc inventaire — les images de dragodindes dans l'inventaire utilisent maintenant le même style carré arrondi que l'accouplement et le réappro
Renommage
- 🏷 Renommage "Minuteur Dragodinde" → "Obsidienne" — nouveau nom d'application, raccourcis, titre, tray, notifications
- 🔄 Migration automatique des données — copie transparente du fichier de sauvegarde depuis l'ancien dossier
%APPDATA%\Minuteur Dragodinde\au premier lancement - 🔄 GUID NSIS fixe — l'installeur reconnaît l'ancienne version et la remplace proprement (pas de doublon)
- 🔄 Rétrocompatibilité import — les backups exportés avec
app: 'minuteur-dragodinde'restent importables
Nettoyage
- 🗑 Suppression scripts build.bat / build.ps1 —
npm run buildsuffit - 🗑 Suppression maquettes graphiques du suivi Git (refonte_graphique/)
Technique
- ⬆ Migration electron-updater — vérification sha512 via
latest.yml, installation NSIS native, restart auto - 🎨 Icône Windows native — migration
icon.png→icon.ico - 🧪 366 tests (unitaires, fonctionnels, régression, sécurité) — couverture 94% via Vitest + v8
- 🧪 24 tests E2E Playwright + Electron — navigation, timer, recharge jauge, accouplement, persistance, toast, modale de confirmation, undo
Downloads
- 🏗 Refonte architecture DDD hexagonale — migration complète du monolithe