-
v1.13.0 Stable
released this
2026-10-07 09:58:52 +02:00 | 0 commits to main since this releaseAjouté — recommandation de prise de sang : valeur prédite, régime poolé, cible de creux
- Valeur E2 attendue au creux recommandé : la carte affiche désormais
« ≈ X pg/mL » quand l'auto-calibration fournit ses facteurs (sinon rien —
une valeur brute non calibrée serait trompeuse). Miroir de
LabRecommendation.predictedE2. - Régime poolé (
pooledRegimeDoses, miroir du Kotlin) : les doses de
tous les traitements partageant (ester effectif, mg) forment UNE séquence
— un re-parenting d'historique (« … - old » créé a posteriori) ne
redémarre plus la stabilisation. Garde-fous : ester ≠ → jamais poolé ;
dose ≠ → exclue (le trou qui suit casse la séquence, conservateur). - Cible de creux E2 (opt-in, Paramètres) : référence personnelle pour la
prochaine prise de sang — la valeur prédite est colorée dans/hors cible.
⚠️ DISTINCT des seuils d'alerte (surveillance continue + notifications) :
la cible ne notifie jamais. Voyage dans le backup (champs optionnels,
rétrocompatibles).
Vérifié : 198 tests + E2E verts (
check.sh).Downloads
- Valeur E2 attendue au creux recommandé : la carte affiche désormais
-
v1.12.0 Stable
released this
2026-09-29 23:24:18 +02:00 | 2 commits to main since this releaseCorrigé — un traitement inactif à Posologie projetait encore ses injections (#70)
- Miroir de l'Android v1.12.0 (remontée : « un traitement mis en inactif ne
devrait plus être pris en compte pour les futures prédictions ») :
generateForecastDoses(js/pk/pk-engine.js) garde!isActive— et
l'horizon du chip Prévision du graphique (js/ui/chart.js) ne considère
que les Posologies ACTIVES. - §6.bis inchangé : l'historique d'un inactif reste simulé — seul le FUTUR
s'arrête. 3 tests miroirs (inactif vide, actif inchangé, avant/après
archivage).
Ajouté — page Doses : glyphes de forme de prise + marqueurs « prise de sang le même jour »
- Chaque ligne de dose porte le glyphe de sa forme (💊 oral, 💉 injection
IM/SC, 💧 gel, 🩹 patch, 🧴 autre — helper purrouteGlyphdans
js/data/models.js, miroir derouteIcon). - Une analyse de sang LE MÊME JOUR qu'une dose affiche un encart latéral
🧪↑ (avant la dose) et/ou 🧪↓ (après) — helper purlabMarkersForDose
(js/util/format.js, jour calendaire LOCAL ; lab à l'heure exacte =
APRÈS, convention documentée). - 10 tests (
tests/doses-extras.test.js, miroirs de DosesExtrasTest.kt).
Vérifié : 194 tests verts + E2E (
check.sh).Downloads
- Miroir de l'Android v1.12.0 (remontée : « un traitement mis en inactif ne
-
v1.11.0 Stable
released this
2026-09-29 07:30:59 +02:00 | 3 commits to main since this releaseAjouté — les traitements inactifs regroupés en bas de la page Traitements
- Miroir de l'Android v1.11.0 (demande : « les traitements inactifs sont
peu discernables — les placer à la fin, et peut-être les rendre plus
distincts ») : les ACTIFS d'abord, les INACTIFS regroupés tout en bas
sous un en-tête « Traitements inactifs » (seulement s'il en existe),
cartes atténuées (opacity 0,55) en plus du badge. - Tri STABLE : l'ordre relatif à l'intérieur de chaque groupe est conservé.
Helper purtreatmentsForDisplaydansjs/data/models.js(miroir du
Kotlin, node-safe) — 4 tests (tests/treatments-display.test.js,
miroir de TreatmentsDisplayTest.kt).
Vérifié : 184 tests verts + E2E (
check.sh).Downloads
- Miroir de l'Android v1.11.0 (demande : « les traitements inactifs sont
-
v1.10.0 Stable
released this
2026-09-27 23:10:10 +02:00 | 5 commits to main since this releaseCorrigé — la recommandation de prise de sang précédait la stabilisation (#68)
- Miroir de l'Android v1.10.0 (remontée + données réelles → 6ᵉ régression
épinglée côté Android) : 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) — la date proposée était gouvernée
par l'injection N−1, antérieure à la stabilisation, et le texte « juste
avant ton injection du … » était faux de plusieurs jours. - Fix : le creux = niveau PRÉ-INJECTION du créneau (dernier point de
courbe avant l'injection) — restaure le principe v1.8.0 documenté et rend
la carte cohérente. Pour les esters à t½ courte (EV), le point
pré-injection EST le minimum de fenêtre : comportement inchangé. - Tests : la suite lab-timing (12) passe inchangée — sa sémantique épinglée
(« creux juste avant l'injection, écart ≤ 2 h ») était déjà celle du fix ;
180 tests + E2E verts (check.sh).
Les autres changements de la v1.10.0 Android (dialog fantôme #69, rappel
sauté si dose déjà loggée) n'ont pas d'équivalent web (notifications et
intents de notification sont spécifiques Android).Downloads
- Miroir de l'Android v1.10.0 (remontée + données réelles → 6ᵉ régression
-
v1.9.7 Stable
released this
2026-09-21 22:20:21 +02:00 | 6 commits to main since this releaseCorrigé — la suggestion de prise de sang « change tout le temps » à chaque injection
- Miroir de l'Android v1.9.7 (remontée + données réelles) : la règle de
stabilisation comparait l'écart inter-doses EXACTEMENT à l'écart
précédent — un log 30 min plus tard cassait le régime et repoussait la
stabilisation de 5 × t½ à chaque injection (creux recommandé fuyant). - Fix (tolérance) : chaque écart doit rester dans l'intervalle de
Posologie ± 24 h (GAP_TOLERANCE_MS, fenêtre vs l'intervalle
THÉORIQUE). Un vrai changement de créneau (2 j au lieu de 7 j) reste
hors fenêtre. Tests : « interval change » ré-épinglé (+21 j) + 2 tests
de tolérance miroirs (12 verts lab-timing).
Downloads
- Miroir de l'Android v1.9.7 (remontée + données réelles) : la règle de
-
v1.9.6 Stable
released this
2026-09-21 21:57:04 +02:00 | 7 commits to main since this releaseModifié — la carte de l'accueil liste TOUTES les prochaines prises
- Miroir de l'Android v1.9.6 (remontée : le rappel quotidien CPA masquait
le rappel hebdomadaire EEn — « je ne le vois quasiment pas ») : la carte
« Prochaine dose » devient « Prochaines doses » (titre pluriel dès 2
lignes) — une ligne par traitement, TRIÉES par prochaine prise ;
la 1ʳᵉ ligne (la plus proche) reste mise en avant. Format de ligne
inchangé (Xj Yh · sam. 26 10:00 (nom),XhMM · HH:mm,N min). - Moteur : helper PUR
nextDoseLineTextdansformat.js(miroir du
KotlinnextDoseLine) — 3 tests miroirs dans misc.test.js. - Les NOTIFICATIONS de rappel sont inchangées.
Downloads
- Miroir de l'Android v1.9.6 (remontée : le rappel quotidien CPA masquait
-
v1.9.5 Stable
released this
2026-09-20 12:55:51 +02:00 | 8 commits to main since this releaseCorrigé — revue de code post-v1.9.4 (audit lecture-seule des deux dépôts)
- Garde de
cutoffHourspour ESE (parité du Kotlin) : la branche ESE ne
vérifiait pashasModel(ester)— un traitement IMPORTÉ (le backup accepte
toute string de pkModel/ester) avec un ester non couvert (ex. ECS/PEP en
ESE) levaitTypeErroret laissait un écran vide. Retombe maintenant sur
la garde Bateman (≥ 24 h), comme TFS/WHS le faisaient déjà. - min/max en UNE passe : les spreads
Math.min(...allPoints)(≈ 5 par
frame) lèventRangeErrorau-delà de ~10⁵ arguments — atteignable avec
le Nuage actif × zoom max (≈ 230 000 points) — et allouaient un tableau
intermédiaire par appel. Remplacés par une boucle (chart.js +
chart-canvas.js). - Init MCMC non bloquante : le démarrage n'attend plus le fetch de
l'asset (seul le nuage lit le posterior, qui renvoie[]proprement) ;
l'init re-rend à la fin et posedata-ready— la garantie E2E
« data-ready ⇒ asset chargé » est maintenant RÉELLE (le commentaire
antérieur était faux : le marqueur était posé avant le fetch). - Portage des optimisations Android v1.8.2 (la dérive de miroir était
réelle) : contexte moteur pré-calculé (prepareE2Context/e2AtCtx—
doses groupées, cutoffs par traitement, Bateman paresseux),
computeCurvene recalcule pluscutoffHoursPAR POINT × traitement ni
le scan complet de doseLogs. Résultats identiques (175 tests verts). - E2E version paramétrée : les asserts lisent
data-versionposé par
l'app au lieu de strings codées en dur à bump à chaque release (l'oubli a
produit le bug v1.9.3).
Documenté — miroir nettoyé
- En-tête de
pk-engine.jsà jour (ESE analytique v1.9.0, plus de tables
ODS) ; JSDoc « troncature » depk-calibration.jsalignée sur
Math.round(fix v1.9.2) ;dialogs.js(ESE=6) ; import mort et JSDoc
orpheline delab-timing.jsretirés ; couleurs de l'accueil via
COLORS(source unique avec le canvas). pk_profiles.jsonexclu du zip de release (.gitattributes
export-ignore, −548 Ko livrés) : plus fetché au runtime depuis v1.9.0 —
l'asset ne survit que pour le test de fidélité RMS (miroir Android),
pk-profile-store.jsdocumenté test-only.
Downloads
- Garde de
-
v1.9.4 Stable
released this
2026-09-19 23:29:41 +02:00 | 9 commits to main since this releaseAjouté — les presets du modèle ESE couvrent ses 6 esters injectables
- Remontée : depuis l'ajout du modèle source Estrannaise (v1.9.0), les
presets de création n'offraient toujours que EV/EU/EEn — « les presets
n'ont pas été mis à jour lors de l'ajout du modèle source pour ESE ». - Presets : 3 presets ESE ajoutés (25 entrées, miroir de
PKPresets.kt) — EC huile (5 mg IM), EB (1 mg IM), EUCS undécylate
suspension cristalline (10 mg SC, ester exclusif à ce fit). Champs
Bateman informatifs = t½ terminales des fits (pas utilisés au calcul). - Éditeur : la liste des esters suit la couverture RÉELLE du modèle
choisi (choicesForModel, parité Android v1.9.0) — ESE liste ses 6
esters injectables ; au changement de modèle, si l'ester courant sort de
la couverture (ex. EUCS + TFS), il rebascule sur EV (garde anti
« 0 pg/mL ») et le formulaire se re-rend. - Corrigé (portage v1.9.0 incomplet) :
Esters.EUCSmanquait dans
pk-engine.js(le preset référençaitundefined) etchoicesForModel
(js/data/models.js) était resté sur la couverture des tables ODS
(3 esters) avec sa KDoc obsolète « produirait 0 pg/mL ». - Tests :
tests/presets.test.js(nouveau, 6 tests) — couverture des
6 esters ESE, unicité, clés i18n EN/FR, TFS (7) / WHSAH (6) inchangés,
choicesForModelaligné sur les dispatchs. Suite web : 175 tests.
Downloads
- Remontée : depuis l'ajout du modèle source Estrannaise (v1.9.0), les
-
v1.9.3 Stable
released this
2026-09-19 22:22:57 +02:00 | 12 commits to main since this releaseCorrigé — le numéro de version annoncé
- Le dialog « Nouveautés » et Paramètres annonçaient 1.9.1 au lieu de
1.9.2 (le commit de fix du nuage n'incluait pas la mise à jour de
WEB_VERSION) — méta-correction de version, aucune autre différence
avec 1.9.2 (mêmes fonctionnalités que l'Android 1.9.2).
Downloads
- Le dialog « Nouveautés » et Paramètres annonçaient 1.9.1 au lieu de
-
v1.9.2 Stable
released this
2026-09-19 22:16:13 +02:00 | 14 commits to main since this releaseCorrigé — le nuage d'incertitude exigeait un traitement STOCKÉ en ESE
- Miroir du fix Android v1.9.2 : le filtre du nuage testait le
pkModel
STOCKÉ du traitement, alors que la courbe ESE affichée redessine
toutes les doses E2 avecmodelOverride = "ESE"— le nuage restait vide
dès qu'aucun traitement n'était stocké en ESE. - Fix : le nuage couvre toutes les doses E2 à profil injectable dont
l'ester effectif (override compris) est couvert par le fit
Estrannaise — indépendamment du modèle stocké. L'exclusivité ESE
reste portée par le chip. L'oral Bateman reste hors nuage. - Test réécrit : « les doses d'un traitement TFS sont couvertes quand ESE
est affiché » (épinglé des deux plateformes) ; oral seul → vide.
Downloads
- Miroir du fix Android v1.9.2 : le filtre du nuage testait le