diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100755 index a252473..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,90 +0,0 @@ -# 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 `CalcCrossing` → `SimulationCrossing` — 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.png` → `icon.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. diff --git a/CLAUDE.md b/CLAUDE.md index 649e9c1..03bc99a 100755 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -7,7 +7,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co - **Toujours répondre et écrire en français** - **Ne jamais modifier les fichiers de tests sans le signaler explicitement** à l'utilisateur avant de le faire - **Toujours écrire des tests** (unitaires + fonctionnels/régression) lors de toute correction de bug ou ajout de feature — les tests font partie de la livraison, pas une étape optionnelle -- **Toujours mettre à jour `algorithmes.md`** quand un algorithme ou une formule de calcul change +- **Toujours mettre à jour `docs/algorithmes.md`** quand un algorithme ou une formule de calcul change - **Ne jamais utiliser de taux fixe pour les jauges** — toujours utiliser `gainedIn` / `timeToGain` avec traversée des tiers (erreur historique du monolithe) - **Signaler explicitement** tout changement qui touche aux snapshots du timer (`snapGauges`, `snapStats`, `gaugeRecharges`) car cela peut affecter tous les calculs en cours de session - **Les tests ne tournent pas en WSL** — toujours rappeler à l'utilisateur de lancer `npm test` depuis un terminal Windows diff --git a/algorithmes.md b/docs/algorithmes.md similarity index 100% rename from algorithmes.md rename to docs/algorithmes.md diff --git a/findings.md b/findings.md deleted file mode 100755 index c6071f5..0000000 --- a/findings.md +++ /dev/null @@ -1,28 +0,0 @@ -# Findings — Audit technique - -## Variables CSS existantes (lignes 9-14) -``` ---bg:#0b0b14 --bg2:#111120 --bg3:#181828 --bg4:#20203a ---border:#2a2a45 --text:#dddaf8 --muted:#6868a0 ---ser:#c060ff --end:#f0bf30 --mat:#28c8f0 --amour:#ff5070 --xp:#ffa040 ---ok:#28e888 --warn:#ff9820 --r:10px -``` -La majorité du CSS utilise déjà `var()`, mais il y a ~320 occurrences de couleurs inline dans le JS (rgb/rgba dans les templates littéraux). Les couleurs de jauges (--ser, --end, etc.) devront rester saturées même en mode clair. - -## Progression enclos — données disponibles -`enclosGlobalState(enc)` retourne `{globalMax, allDone, started, el, ddDone}`. -- `ddDone / enc.dragodindes.length` = % progression simple -- Fonctionne déjà, juste pas affiché visuellement sur les tabs - -## Timer pause — détection retard -- `enc.timer.pausedAt` = timestamp de mise en pause -- `Date.now() - enc.timer.pausedAt` = durée de pause en ms -- Seuil suggéré : 5 minutes (300 000 ms) - -## Raccourcis clavier -- Aucun listener keyboard existant -- Attention aux inputs focus : vérifier `document.activeElement.tagName !== 'INPUT'` - -## Animations -- Transitions CSS existent sur tabs, gauges, pills (partielles) -- Aucune transition de contenu (#enclos-content) lors du changement d'onglet diff --git a/progress.md b/progress.md deleted file mode 100755 index 57405d4..0000000 --- a/progress.md +++ /dev/null @@ -1,12 +0,0 @@ -# Progress Log - -## Session 2026-03-26 -- [x] Audit technique terminé -- [x] Plan rédigé et soumis à validation -- [ ] Phase 1.1 — Tooltips pills -- [ ] Phase 1.2 — Indication retard -- [ ] Phase 2.1 — Barre progression tabs -- [ ] Phase 2.2 — Animations transition -- [ ] Phase 4.1 — Raccourcis clavier -- [ ] Phase 3.1 — Thème clair/sombre -- [ ] Phase 5.1 — Planificateur journalier diff --git a/task_plan.md b/task_plan.md deleted file mode 100755 index 0eec5a0..0000000 --- a/task_plan.md +++ /dev/null @@ -1,114 +0,0 @@ -# Plan — Polish UI & Features v1.2.0 - -## Vue d'ensemble -7 améliorations validées par l'utilisateur pour le Minuteur Dragodinde. - ---- - -## Phase 1 — Fondations visuelles (rapide, 0 risque) - -### 1.1 Tooltips sur les pills de stats -- **Quoi** : Ajouter un `title="Sérénité"`, `title="Endurance"` etc. sur chaque pill -- **Impact** : Ligne ~1654 (PILL_DEFS forEach) — ajouter un champ `label` et l'injecter en `title=` -- **Complexité** : Très faible (~5 min) -- **Risque** : Aucun - -### 1.2 Indication visuelle "en retard" (pause longue) -- **Quoi** : Si un timer est en pause depuis > 5 min, colorer le tab en orange/rouge -- **Impact** : - - Lignes 1386, 1985 (updateTabDots) — ajouter classe `.paused-long` - - Détection : `enc.timer.pausedAt && (Date.now() - enc.timer.pausedAt) > 300000` - - CSS : nouveau style `.tab.paused-long` -- **Complexité** : Faible (~15 min) -- **Risque** : Aucun - ---- - -## Phase 2 — Barre de progression & animations (~1h) - -### 2.1 Barre de progression sous chaque tab d'enclos -- **Quoi** : Fine barre colorée (3-4px) sous chaque onglet montrant le % d'avancement global -- **Impact** : - - Lignes 1341-1420 (renderTabs) — ajouter un `