dd-timer/CHANGELOG.md
POL Mickaël 3e485fd09b chore: normalise fins de ligne CRLF → LF dans tout le repo
Applique .gitattributes sur tous les fichiers existants.
Élimine les différences fantômes entre WSL et Windows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 08:55:10 +02:00

6.8 KiB
Executable File

Changelog

v1.1.6

Mise à jour automatique

  • Migration electron-updater : remplacement du système custom (download HTTP + script batch) par electron-updater (generic provider)
    • Vérification sha512 automatique des mises à jour
    • Installation NSIS native (plus de script batch hack)
    • Restart automatique après installation
    • Code simplifié (~60 lignes vs ~200)
    • Compatible Gitea : découverte via API + latest.yml uploadé en asset de release
    • Nouveau workflow de release : uploader le .exe ET latest.yml sur Gitea

Architecture

  • Migration complète vers une architecture DDD hexagonale (Vite + TypeScript)
    • Couche domain : entités, value objects, services purs, ports
    • Couche application : CQRS (CommandBus / QueryBus), handlers
    • Couche infrastructure : LocalStorage, Electron notifications, WebAudio alarm
    • Couche presentation : composants, helpers, UIState
  • Suppression du monolithe legacy, Vite est désormais le seul build
  • Setup Vitest avec alias de chemins (@domain, @application, etc.)

Nouvelles fonctionnalités

  • Timer : session robuste (pause/reprise fiable), alarme unique, ETA niveau 200
  • Accouplement : images des dragodindes (66 races en base64), barre de recherche par nom, filtres par génération (AND logique)
  • Réapprovisionnement : barre de recherche, sauvegarde de workflow depuis les résultats de calcul
  • Inventaire : barre de recherche, simulation proportionnelle multi-générations, bouton sauvegarder le workflow
  • Workflows : filtre par génération, barre de recherche sur les noms
  • Mises à jour en temps réel : barres de progression du workflow, compteur DD en stock de l'inventaire — se mettent à jour pendant la frappe

Corrections de bugs

  • Recette Ebène : les parents étaient inversés (Amande et Rousse → corrigé en Amande et Dorée + Dorée et Rousse)
  • Simulation inventaire : l'algorithme glouton épuisait tout le stock pour le premier croisement. Remplacé par une allocation proportionnelle dynamique (chaque parent est divisé équitablement entre les croisements qui l'utilisent)
  • Dirty flag sur tous les écrans (accouplement, réappro, inventaire, workflows) : le rAF loop à 60fps reconstruisait le DOM à chaque frame, détruisant les event listeners et empêchant les clics/inputs de fonctionner
  • Persistance inventaire : update-settings ne gérait pas le champ inventaire — le stock était perdu à chaque changement d'écran
  • Chargement inventaire : get-inventaire retournait un résultat de simulation au lieu du stock brut — l'écran se chargeait avec des données corrompues
  • Comportement focus/blur des inputs : uniformisé sur tous les écrans — focus vide le champ, blur sans valeur restaure l'ancienne, blur avec valeur applique la nouvelle
  • ReapproView : constructeur corrigé (commandBus manquant), bouton save-workflow branché sur la commande
  • CSP : ajout de img-src 'self' data: pour les images base64 des dragodindes
  • Inventaire : import RACES_DATA manquant + type CalcCrossingSimulationCrossing — l'écran ne s'affichait plus
  • Baffeur/Caresseur : exclusion mutuelle (activer l'un désactive l'autre), bouton opposé grisé dans l'UI, contrainte de signe sur la cible sérénité (négatif pour baffeur, positif pour caresseur) — corrige le timer qui affichait "terminé" avec des cibles positives + baffeur
  • Paramètres : écran refait à l'identique du monolithe (boutons compacts avec emojis, modal ntfy avec QR codes et génération automatique du topic)
  • Sons d'alarme : fréquences et types d'oscillateurs corrigés pour correspondre au monolithe (arpège 440/554/659/880, fanfare triangle 6 notes, cloche 440/880/1320/1760, pulsation 5 pulses)
  • Bouton Test son : ne fonctionnait pas (passait par IPC sans écouteur) — joue maintenant directement via WebAudio
  • CSP : ajout de img-src https://api.qrserver.com pour les QR codes ntfy

Tests

  • Tests unitaires pour StockSimulator (simulation proportionnelle : 13 cas)
  • Tests unitaires pour SaveWorkflow et UpdateSettings avec inventaire
  • Tests de régression pour la simulation inventaire (scénario du monolithe)
  • Test de la recette Ebène corrigée
  • Mise à jour des tests GetInventaire (stock brut au lieu de résultat calculé)

Refonte graphique "Obsidienne" (MD3)

  • Design system Obsidienne : glassmorphism, tokens Material Design 3 (primary, secondary, surface, outline…), polices Manrope/Inter/Plus Jakarta Sans
  • Nouveau fichier obsidienne.css (~2100 lignes) : design MD3 pour tous les composants
  • Migration emojis → Material Symbols Outlined : toutes les icônes (stats, navigation, actions)
  • Variables CSS MD3 : 37 tokens ajoutés dans variables.css (--md-primary, --md-surface-container, etc.)
  • Sidebar : refonte complète avec logo Obsidienne, sections organisées (Principal, Enclos, Outils, Paramètres), icônes Material Symbols, pastille de statut timer, version dans le footer — ouvert par défaut
  • App Shell : nouveau layout app-shell (sidebar + main-area), header avec hamburger, suppression de l'overlay sidebar
  • Dashboard : grille KPI (bébés, DD actives, couples, taux de réussite, races), bouton reset stats intégré, aperçu enclos
  • EnclosView : barres de jauge visuelles avec gradient par tier, bouton timer Material (DÉMARRER/PAUSE/REPRENDRE), zone "Alarme dans" réorganisée, bouton reset timer ajouté
  • DragodindeCard : stats avec icônes Material, jauge XP restructurée avec niveau + % + ETA
  • Accouplement : refonte de wizard 3 étapes → layout single-page (Parent 1 | Coeur+inputs | Parent 2 + grille de races en dessous), glassmorphism, chips génération pill, preview du bébé au centre
  • UpdateBanner : aligné sur le nouveau design MD3
  • Drag & drop accouplement : les cartes de race sont glissables vers les zones Parent 1 / Parent 2, avec feedback visuel (halo violet), vérification de compatibilité partenaire au drop
  • Numérotation smart des enclos : la création comble les trous (supprimer Enclos 2 puis créer → "Enclos 2" au lieu de "Enclos N+1")
  • Icône Windows native : migration icon.pngicon.ico pour la fenêtre et la tray
  • 10 tests de régression level-target-timer : vérifient que levelTarget affecte correctement le countdown mangeoire, enclosGlobalState, calcLevelEtaLive, et le flag done
  • Auto-scroll drag & drop : le conteneur remonte automatiquement quand on drag une race vers le haut de l'écran
  • Correction scroll petit écran : compensation du zoom CSS pour que le scroll atteigne le bas de la grille
  • Retrait des labels "MÂLE REQUIS" / "FEMELLE REQUISE" des panneaux parent

v1.1.5

  • Ajout de nouvelles features.

v1.1.4

  • Ajout de nouvelles features et correction de bugs.

v1.1.3

  • Correctif de bug mineur + features.