- predictedE2 : valeur brute au creux × facteur du ester actif — fournie
par Home/Labs quand l'auto-calibration est ON (sinon null : la carte
n'affiche rien, une valeur brute serait trompeuse). Miroir web.
- Régime POOLÉ (pooledRegimeDoses) : les doses de tous les traitements
partageant (ester effectif, mg) forment UNE séquence — le re-parenting
d'historique (« 6d-old », v1.12.0) ne fait plus redémarrer la
stabilisation. Garde-fous : ester ≠ jamais poolé (régression n°3) ;
dose ≠ exclue (le 8 mg casse via le trou). Régression n°7 data-driven
sur le nouvel export (backup-v1.12.0.json).
- Cible de creux E2 (opt-in) : DataStore + carte settings (hint croisé
« distinct des seuils d'alerte — jamais de notification ») + coloration
carte reco (primaire/hors cible tertiary) + backup rétrocompatible (un
backup ancien n'efface pas la cible locale). Système à 3 niveaux
documenté §7.11. Miroir web complet.
284 tests JVM (250 sans données locales) + 14 UI + lint verts ; web 199
tests + E2E verts (check.sh). Validé émulateur sur données réelles :
« Expected at this trough: ≈ 208 pg/mL — outside your target », régime
poolé = stable depuis le 12 août, 0 crash.
- FIX#70 : generateForecastDoses garde !isActive — un injectable archivé
avec Posologie et de l'historique projetait encore ses injections
(graphique Prévision, extension de fenêtre, horizon LabTiming) ; le chip
Prévision s'activait sur des Posologies inactives. FIX : garde moteur +
horizon/chip sur les ACTIFS. §6.bis inchangé : l'historique reste simulé,
seul le FUTUR s'arrête (comme les rappels v1.4.0). Miroir web. 3 tests
ForecastDosesGuardTest + 3 miroirs web.
- Icônes de forme de prise dans Doses : routeIcon pur (pilule/seringue
IM+SC teinte tertiary pour la SC/goutte/sparadrap/compte-gouttes ;
⚠️ MedicationLiquid absent d'icons-extended 1.7.8 → Colorize).
- Marqueurs « prise de sang le même jour » : labMarkersForDose pur (jour
calendaire LOCAL, lab à l'heure exacte = APRÈS) → encart 🧪↑/🧪↓ en bout
de ligne. 7 tests DosesExtrasTest + 10 miroirs web.
274 tests JVM + 14 UI + lint verts ; web 194 tests + E2E verts (check.sh).
Validé émulateur sur APK RELEASE avec données réelles seedées + scénario du
bug (2 inactifs à Posologie 7 j) : Prévision on/off 0 crash, glyphes et
marqueurs en place.
- Demande : « les traitements inactifs sont peu discernables — les placer
à la fin (tout en bas), et peut-être les rendre plus distincts ».
- Helper pur treatmentsForDisplay (tri STABLE : actifs d'abord, inactifs
après, ordre relatif conservé dans chaque groupe).
- LazyColumn en 3 sections : actifs / en-tête inactive_section (seulement
si des inactifs existent) / inactifs — cartes alpha 0.55 en plus du
badge, lisibles et tappables (l'édition d'un archivé reste possible).
- Miroir web : treatmentsForDisplay dans js/data/models.js + rendu
sections + opacity 0.55 + i18n inactive_section FR/EN (web v1.11.0 sync).
- 5 tests JVM TreatmentsDisplayTest + 4 tests web (miroir).
264 tests JVM + 14 UI + lint verts ; web 184 tests + E2E verts (check.sh).
Validé émulateur sur APK RELEASE avec données réelles seedées (5 actifs en
haut, en-tête + EV-old/EEn-old tout en bas, 0 crash).
- #68 : le « creux » était le minimum de la fenêtre entière — pour un ester à
montée lente (EEn, pic ~J+5 ≈ intervalle 7 j) il tombait juste après
l'injection PRÉCÉDENTE : date antérieure à la stabilisation affichée sur la
même carte, « juste avant ton injection du … » faux de plusieurs jours
(réel : creux 5 oct 02:32 < stab 7 oct 04:03). FIX : creux = niveau
PRÉ-INJECTION du créneau (principe v1.8.0 restauré ; EV inchangé). Miroir
web appliqué. Régression n°6 data-driven (backup-v1.9.8.json, balayage de
now ±60 j) ; les 17 LabTimingTest passent inchangés.
- #69 : tap notification → dialog ; le fermer + changer d'onglet + revenir sur
l'accueil le rouvrait à chaque fois (demande au niveau activité,
consommation dans les remember de Home). FIX : MutableState<Long?> dans
MainActivity consommé UNE fois + extras retirés de l'intent ; bonus : tap
notification app-ouverte ouvre aussi le dialog. Test UI LogDoseRequestTest.
- Rappel sauté si dose déjà loggée (demande) : garde au déclenchement —
hasDoseLoggedOnDay (pur, jour calendaire LOCAL) dans ReminderReceiver,
re-programmation du créneau suivant dans tous les cas. 6 tests JVM +
vérification A/B émulateur (EEn dose-du-jour → 0 notif, Fluoxetine → 1).
259 tests JVM + 14 UI + lint verts ; web 180 tests + E2E verts (check.sh).
Validations émulateur §16.ter sur APK RELEASE avec données réelles seedées
(reco : creux 11 oct 20:08 ≥ stab 7 oct 06:03 ; dialog 1× puis plus jamais ;
changelog 1.10.0 affiché ; 0 crash).