-
v1.10.0 Stable
released this
2026-09-27 23:11:04 +02:00 | 11 commits to main since this releaseCorrigé — la recommandation de prise de sang précédait la stabilisation (#68)
- Remontée : « la recommandation suggère une date antérieure à la
stabilisation des taux » (données réelles de la remontée → 6ᵉ régression
épingléelocal-test-data/backup-v1.9.8.json, gitigné). - Cause (double) : le « creux » était le minimum de la fenêtre entière
(créneau N−1 → créneau N). Pour un ester à montée lente (EEn : pic ~J+5 ≈
intervalle 7 j), ce minimum tombe juste après l'injection PRÉCÉDENTE
(creux d'absorption, ~3 h) — pas juste avant la suivante : la date proposée
était gouvernée par l'injection N−1, elle-même antérieure à la
stabilisation, et le texte « juste avant ton injection du … » était faux de
plusieurs jours. Balayage sur ±60 jours denow(test) : creux 5 oct 02:32
vs stabilisation 7 oct 04:03. - Fix : le creux = niveau PRÉ-INJECTION du créneau (dernier point de
courbe avant l'injection) — restaure le principe v1.8.0 documenté (« juste
avant l'injection suivante, le moment le plus comparable »), rend la carte
cohérente (creux 46 min avant le créneau étiqueté) et le garde de
stabilisation s'exprime sur l'instant réellement proposé. Pour les esters à
t½ courte (EV), le point pré-injection EST le minimum de fenêtre :
comportement inchangé. Miroir web appliqué (js/pk/lab-timing.js). - Tests : régression n°6 data-driven (4 tests dont un balayage de
nowsur
±60 j — l'invariant « creux ≥ stabilisation » doit tenir À TOUT INSTANT) ;
les 17 LabTimingTest passent inchangés (leur sémantique était celle du fix).
Corrigé — le dialog de dose se rouvrait à chaque retour sur l'accueil (#69)
- Remontée : tap sur la notification de rappel → le dialog de saisie
s'ouvre ; le fermer puis changer d'onglet et revenir sur l'accueil le
ROUVRAIT à chaque fois (reproduit et revérifié sur émulateur). - Cause : la demande vivait au niveau ACTIVITÉ (paramètre d'intent) mais
la consommation vivait dans unLaunchedEffectde Home — quitter l'onglet
détruit lesrememberlocaux, le paramètre survivait → à chaque
ré-entrée en composition, le dialog se rouvrait. - Fix : la demande est un état
MutableState<Long?>détenu par
MainActivity (survit aux onglets), consommé UNE fois par HomeScreen ;
les extras sont retirés de l'intent après lecture (un recreate ne doit
jamais rouvrir une notification traitée) ; et un tap notification quand
l'app est déjà ouverte ouvre désormais aussi le dialog (avant :
silencieusement perdu). - Tests : nouveau test UI instrumenté
LogDoseRequestTest(ouverture 1× +
plus jamais après aller-retour d'onglets) + vérification émulateur.
Ajouté — la notification de rappel saute un créneau déjà honoré
- Demande : si la dose prévue du jour est saisie AVANT l'heure de
rappel, la notification ne doit pas sonner pour une prise déjà faite ; le
rappel suivant repart au créneau suivant (idem pour le quotidien des
oraux sans Posologie). - Implémentation : garde au moment du déclenchement —
PharmacokineticEngine.hasDoseLoggedOnDay(pur, jour calendaire LOCAL,
testable) consultée parReminderReceiver: dose loguée aujourd'hui →
notification sautée (AppLog) + re-programmation du créneau suivant dans
tous les cas. Robuste quel que soit le moment de la saisie. - Tests : 6 tests JVM (
ReminderLoggedDayTest: même jour, veille,
frontière minuit, autre traitement, liste vide, mélange) + vérification
A/B sur émulateur (EEn dose-loguée-ce-jour → 0 notif ; Fluoxetine sans
dose → 1 notif).
Vérifié : 259 tests unitaires (dont régression n°6 sur données réelles)
- 14 tests UI + lint vert ; web miroir : 180 tests + E2E verts
(check.sh). Version web alignée au moment de la release (checklist 4.bis).
Downloads
- Remontée : « la recommandation suggère une date antérieure à la