- docs/CHANGELOG.md : entrée v1.2.0 complète - docs/DEVELOPPEMENT.md : versions épinglées à jour, note Material Expressive (API encore internal), migration Room v1→v2, §7.3b (override modèle/prévision/ auto-cal), §8 (36 tests), §10/§11 (panoramique, multi-séries), §16 (workflow git), §18 (disque), historique des sessions - README : statut v1.2.0, features à jour, section Git (tags de release) - GUIDE : nouvelle section « Fonctions du graphique » (panoramique, toggles modèles, prévision, calibration auto)
88 lines
5.1 KiB
Markdown
88 lines
5.1 KiB
Markdown
# Changelog — HormoneTrack
|
||
|
||
Format : [Keep a Changelog](https://keepachangelog.com/fr-FR/1.1.0/).
|
||
Versionnage : [SemVer](https://semver.org/). Releases taguées dans git (`v1.2.0`, …).
|
||
|
||
## [1.2.0] — 2026-09-05 (versionCode 3)
|
||
|
||
### Ajouté
|
||
- **Panoramique du graphique** : fais glisser le graphique vers la droite pour
|
||
remonter dans le passé (fenêtre glissante sur tout l'historique) ; bouton
|
||
« Revenir à maintenant ».
|
||
- **Les deux modèles PK superposables** : Estrannaise (bleu) et Transfem Science
|
||
(turquoise) tracées simultanément sur le même graphique, avec toggles
|
||
indépendants (override de modèle dans le moteur, indépendant du modèle stocké
|
||
par traitement).
|
||
- **Simulation prévisionnelle** : nouvelle section « Fréquence d'injection » dans
|
||
l'éditeur de traitement (intervalle en jours) → chip « Prévision » du graphique
|
||
qui projette les doses à venir (2× l'intervalle, borné 7–30 j) à partir de la
|
||
dernière injection réelle ; les doses projetées ne sont jamais sauvegardées et
|
||
conservent l'ester override de la dernière injection.
|
||
- **Calibration automatique (optionnelle)** : dans les Paramètres, option
|
||
« Calibration automatique » — ajuste à la volée (affichage seul) les facteurs
|
||
d'échelle et le modèle T depuis les labs ; désactivée par défaut, les valeurs
|
||
stockées ne sont jamais modifiées.
|
||
- **Intervalle entre dosages** : l'écran Doses affiche Δ (jours) entre chaque dose
|
||
et la précédente du même traitement (colonne « Interval (d) » du `.ods`).
|
||
- 6 nouveaux tests (`V120FeaturesTest`) → **36 tests**.
|
||
|
||
### Modifié
|
||
- **Montée des toolchains** : Gradle 9.7.1, **AGP 9.4.0** (Kotlin intégré — plus de
|
||
plugin `org.jetbrains.kotlin.android`, `kotlinOptions` supprimé), Kotlin 2.3.21,
|
||
KSP 2.3.11, **Compose BOM 2026.08.00** (Compose 1.12), Room 2.8.4,
|
||
Navigation 2.10.0, Activity 1.13.0, AppCompat 1.8.0, DataStore 1.2.1, Gson 2.14.0,
|
||
compileSdk/targetSdk **37**.
|
||
- Note Material You / Expressive : la BOM récente apporte composants et comportements
|
||
Material You ; `MaterialExpressiveTheme` reste **internal** dans la ligne material3
|
||
pinnée (vérifié par compilation) → `MaterialTheme` standard conservé, à basculer
|
||
dès que l'API devient publique (commenté dans `ui/theme/Theme.kt`).
|
||
|
||
### Corrigé
|
||
- **Horloge du TimePicker décentrée** (partait vers la gauche dans les dialogs de
|
||
saisie) : centrage explicite (Box + Center) dans `DateTimeField` et l'éditeur de
|
||
traitement.
|
||
- Migration Room **v1 → v2** propre (colonne `forecastIntervalDays`) avec
|
||
suppression du `fallbackToDestructiveMigration()` — les données réelles sont
|
||
protégées : une migration manquante plante bruyamment au lieu d'effacer.
|
||
|
||
## [1.1.0] — 2026-09-05 (versionCode 2)
|
||
|
||
### Corrigé
|
||
- **Courbes EEn plates à zéro** (le bug rapporté : « les graphiques ne se génèrent pas »).
|
||
Cause : casse des clés de profils — l'asset JSON (verbatim du `.ods`) contient
|
||
`"EEn_ese"`/`"EEn_tfs"` (n minuscule) alors que la constante `Esters.EEN = "EEN"` ;
|
||
le lookup exact échouait silencieusement → `sample() = 0` pour **tous** les traitements
|
||
EEn (EV et EU marchaient, ce qui masquait le bug). Fix : lookup **insensible à la casse**
|
||
dans `PKProfileStore` (`lookup()`), test de régression épinglé sur les données réelles
|
||
de l'utilisatrice (`RegressionUserCaseTest`, export v1.0.0 fourni).
|
||
- **Unités de testostérone** : les labs T pouvaient être saisis en ng/dL (cas réel :
|
||
33 et 44 ng/dL). L'axe T du chart mélangeait alors des ng/dL avec des estimations en
|
||
ng/mL (erreur ×100, courbe T invisible) et la calibration T aurait été faussée d'un
|
||
facteur 100. Fix : `PharmacokineticEngine.convertTToNgMl()` (ng/dL → ×0,01 ;
|
||
ng/L → ×0,001 ; nmol/L → ×0,2884 ; ng/mL inchangé), appliqué à la calibration **et
|
||
au rendu du chart**.
|
||
|
||
### Ajouté
|
||
- **Édition des doses** (le bug rapporté : « on ne peut pas modifier les entrées
|
||
d'injection ») : appuyer sur une ligne de l'écran Doses ouvre le dialog en mode
|
||
édition (traitement, dose, date/heure, notes) → enregistre sans recréer.
|
||
- **Choix de l'ester par injection** dans le dialog de dose (comme dans le `.ods`) :
|
||
« Défaut (EEn) », EV, EU, EEn — override stocké par dose, utilisé par le moteur PK.
|
||
- 6 tests de régression sur les données réelles de l'utilisatrice (30 tests au total).
|
||
|
||
### Technique
|
||
- `versionCode 2`, `versionName 1.1.0` ; APK debug régénérée.
|
||
|
||
## [1.0.0] — 2026-09-05 (versionCode 1)
|
||
|
||
Première version fonctionnelle :
|
||
- Courbes estimées E2/T heure par heure (24 h / 7 j / 30 j), modèles **Estrannaise** et
|
||
**Transfem Science** (tables horaires extraites de `Estrogen.ods` : EV/EU/EEn)
|
||
- Modèle Bateman paramétrable (gel/patch/oral)
|
||
- Log des doses, analyses de sang, calibration (facteur d'échelle médian lab÷prédiction)
|
||
- Estimation T empirique calibrable
|
||
- Rappels quotidiens (alarmes exactes) avec actions « Pris » / « Reporter 1 h »,
|
||
notifications remontant sur Huawei Watch GT 3 (Gadgetbridge ou Huawei Health)
|
||
- Sauvegarde/Restauration JSON (SAF), FR/EN (langue par app), 100 % local
|
||
- 24 tests unitaires (moteur PK, profils ODS, round-trip backup)
|