• v1.10.0 Stable

    Siphonight released this 2026-09-27 23:11:04 +02:00 | 11 commits to main since this release

    Corrigé — 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ée local-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 de now (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 now sur
      ±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 un LaunchedEffect de Home — quitter l'onglet
      détruit les remember locaux, 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 par ReminderReceiver : 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