From dd220e8933c2a02e62f63ff574e1c4e2cbb9f726 Mon Sep 17 00:00:00 2001 From: Siphonight Date: Fri, 18 Sep 2026 14:32:44 +0200 Subject: [PATCH] =?UTF-8?q?Docs=20:=20compl=C3=A9ments=20de=20l'audit=20v1?= =?UTF-8?q?.8.2=20(commentaire=20cl=C3=A9=20labResults=20+=20pistes=20diff?= =?UTF-8?q?=C3=A9r=C3=A9es)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ChartScreen : one-liner sur la clé « labResults entière » (le pourquoi du fix #66, là où on lit le code). - §20.bis : les 4 pistes d'optimisation écartées/différées de l'audit (importJson batch, BootReceiver goAsync, fusion generateForecastDoses, cache terminalDecayParameters) — avec la raison de chaque report, pour qu'une future session ne redécouvre pas et ne re-pose pas les questions. --- .../hormonetrack/ui/screens/ChartScreen.kt | 5 +++- docs/DEVELOPPEMENT.md | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hormonetrack/ui/screens/ChartScreen.kt b/app/src/main/java/com/hormonetrack/ui/screens/ChartScreen.kt index 8463de2..4b65ee0 100644 --- a/app/src/main/java/com/hormonetrack/ui/screens/ChartScreen.kt +++ b/app/src/main/java/com/hormonetrack/ui/screens/ChartScreen.kt @@ -276,7 +276,10 @@ fun ChartScreen() { val curves by produceState( emptyList>>(), autoByModel, doseLogs, startMs, endMs, showEse, showTfs, showWhs, showForecast, - showLabTrack, showLabTrackExtend, labResults + showLabTrack, showLabTrackExtend, + // Clé = la liste ENTIÈRE des labs (pas .size, fix #66) : éditer la + // VALEUR d'une analyse doit recalculer les courbes + labResults ) { withContext(Dispatchers.Default) { val list = mutableListOf>>() diff --git a/docs/DEVELOPPEMENT.md b/docs/DEVELOPPEMENT.md index b0cda0a..d36ba61 100644 --- a/docs/DEVELOPPEMENT.md +++ b/docs/DEVELOPPEMENT.md @@ -1981,6 +1981,32 @@ E2+T en une entrée (v1.2.2), migration Room v1→v2 sans fallback destructif (push session). 8. Phase 2 montre : watchface `.hwt` custom, puis mini-app Lite Wearable (cf §17) +### 20.bis Pistes d'optimisation écartées ou différées (audit v1.8.2) + +L'audit complet de v1.8.2 a relevé 4 pistes **délibérément NON appliquées** +(gain réel mais risque/effort hors critère « comportement identique, sûr ») — +pour ne pas les redécouvrir et re-reposer les mêmes questions : + +1. **`importJson` par lots** : les inserts ligne à ligne = une transaction + Room par ligne. `@Insert` en liste préserverait l'ordre (IDs) et + accélérerait l'import d'un gros historique. Différé : surface DAO + + repository à modifier, validation manuelle (aucun test Room auto). +2. **`BootReceiver` : consolidation `goAsync` + une seule lecture** : + les deux `runBlocking` séquentiels peuvent fusionner trivialement ; le + passage complet au pattern `goAsync`+coroutine de ReminderReceiver est + équivalent mais re-testé sur émulateur (boot). Différé. +3. **Double évaluation de `generateForecastDoses`** dans ChartScreen + (producer `forecastDoses` vs producer `curves`) : NE PAS fusionner tel + quel — le premier utilise `System.currentTimeMillis()`, le second le + `nowMs` figé au tick ; unifier change l'ensemble des créneaux + « strictement futurs » à la frontière de la minute (observable). + À unifier UNIQUEMENT avec une décision explicite sur le nowMs de référence. +4. **Cache `terminalDecayParameters`** (PKProfileStore) : le scan O(8 001) + recalculé à chaque `sample()` extrapolé pourrait être mémoïsé (tables + immuables après init) — coût réel modeste (l'extrapolation ne sert que + pour dt ≥ 8 001 h) ; introduit de l'état mutuel → à ne faire que si un + profilage le justifie. + ## 21. Checklist de test manuel Sur le téléphone de test (à compléter par l'utilisatrice) :