From 470bf5973de8984cc3166815616a5926d4be0cfe Mon Sep 17 00:00:00 2001 From: Siphonight Date: Sat, 5 Sep 2026 19:24:31 +0200 Subject: [PATCH] =?UTF-8?q?Docs=20v1.2.3=20:=20donn=C3=A9es=20de=20test=20?= =?UTF-8?q?hors=20d=C3=A9p=C3=B4t=20(=C2=A78.bis,=20s=C3=A9curit=C3=A9),?= =?UTF-8?q?=20releases=20Gitea=20avec=20APK=20(=C2=A716.bis),=20statut=20?= =?UTF-8?q?=C3=A0=20jour?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - §8.bis : les données de santé de test vivent dans local-test-data/ (gitignoré), tests Assume-skippés si absentes, historique nettoyé avant premier push (filter-branch) — aucune donnée de santé dans le dépôt ni l'historique - §16.bis : procédure de release Gitea (API + upload APK par tag) - README : statut v1.2.3, section Vie privée (dépôt sans données), Git à jour --- README.md | 17 ++++++++--- docs/CHANGELOG.md | 10 ++++-- docs/DEVELOPPEMENT.md | 71 ++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 88 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index e1a6cfe..e7e10fe 100644 --- a/README.md +++ b/README.md @@ -65,12 +65,14 @@ Pas de Play Store : l'app est sideloadée. Détails pas-à-pas : [docs/GUIDE_INS ## Git -Dépôt initialisé avec des **releases taguées** (`v1.1.0`, `v1.2.0`, …) : +Dépôt : **https://gitea.cloudyfy.fr/Siphonight/HormoneTrack** (privé), avec +**releases taguées** (`v1.1.0` → `v1.2.3`) et **APK en pièce jointe de chaque +release** (téléchargeable sans compiler, cf [docs/DEVELOPPEMENT.md §16.bis](docs/DEVELOPPEMENT.md)) : ```bash git tag # lister les releases git log --oneline # historique par couches (toolchain / moteur / UI / docs) -git push -u origin main --tags # après ajout d'un remote +git push -u origin main --tags ``` Chaque commit de release passe `./gradlew testDebugUnitTest` (vert obligatoire) et est @@ -96,10 +98,17 @@ La calibration (facteur d'échelle par traitement, calibré par tes labs) ajuste ## Vie privée -- Base de données **Room locale** sur le téléphone ; **aucune** télémétrie, aucun réseau +- **L'app est 100 % locale** : base de données Room sur le téléphone, aucun serveur, + aucune télémétrie ; compat **Gadgetbridge** (FOSS) sans dépendance à Huawei Health +- **Le dépôt ne contient aucune donnée de santé** : le code et la doc sont génériques ; + les tests de régression qui utilisent des exports réels chargent leurs données + depuis `local-test-data/` (**gitignoré**, hors dépôt — et l'historique a été + nettoyé avant le premier push, cf [docs/DEVELOPPEMENT.md §8.bis](docs/DEVELOPPEMENT.md)) - Sauvegarde = fichier JSON que tu stockes où tu veux (Owncloud, etc.) - `allowBackup=false` (données sensibles) ; verrou biométrique prévu en Phase 2 -- Compat **Gadgetbridge** (FOSS) : aucune dépendance à Huawei Health ni aux services Huawei +- Le dépôt est **privé** : les releases APK se téléchargent en étant connecté ; + passer le dépôt en public rend les APK téléchargeables sans compte (sans risque + de données, cf ci-dessus) ## Structure du dépôt diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 34a077d..3db6785 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -20,8 +20,14 @@ Versionnage : [SemVer](https://semver.org/). Releases taguées dans git (`v1.2.3 labs T enanthate → k des doses enanthate. La courbe T utilise à chaque instant le k de l'ester **actif** (dernière dose ≤ t, `activeEsterAt`), fallback = k stocké. Le k T est calibré contre l'E2 **déjà calibrée** (scalePerEster appliqué). -- 8 nouveaux tests (56 au total) : détection d'extrema (6) + attribution du k T - par période et courbe T utilisant le k de l'ester actif (2). +- **Données de test hors dépôt (vie privée)** : les tests de régression épinglés + sur les exports réels chargent désormais leurs données depuis `local-test-data/` + (**gitignoré**) et s'ignorent proprement si le fichier est absent — **aucune + donnée de santé personnelle dans le dépôt ni dans son historique** (réécriture + d'historique effectuée avant le premier push). +- 14 nouveaux tests (56 au total) : détection d'extrema (6) + attribution du k T + par période et courbe T utilisant le k de l'ester actif (2), regroupement des + prises de sang (4), régression n°2 en version data-driven (6). ### Corrigé - La calibration automatique de la T utilisait l'E2 **non calibrée** → les k diff --git a/docs/DEVELOPPEMENT.md b/docs/DEVELOPPEMENT.md index 92204c4..1805a84 100644 --- a/docs/DEVELOPPEMENT.md +++ b/docs/DEVELOPPEMENT.md @@ -64,6 +64,7 @@ Fonctionnalités v1 : | 5 sept. 2026 (session tests/docs) | Correction de toutes les erreurs de compilation (dont 3 vrais bugs logiciels trouvés par les tests), **24 tests unitaires verts**, APK debug généré (18 MB), documentation complète (README + docs/), préparation repo git. | | 5 sept. 2026 (session v1.1.0) | Bugs remontés par l'utilisatrice : courbes vides (casse EEn) + pas d'édition des doses → corrigés ; régression épinglée sur ses données réelles ; APK v1.1.0. | | 5 sept. 2026 (session v1.2.0) | **Repo git initialisé** (commits par couche + tags de release) ; montée toolchain AGP 9.4/Gradle 9.7.1/Kotlin 2.3.21/BOM 2026.08.00/compileSdk 37 ; panoramique du chart, superposition des deux modèles, prévision par « Fréquence », calibration automatique optionnelle, intervalles entre doses, TimePicker centré ; **36 tests verts**, APK v1.2.0 (23 MB). | +| 5 sept. 2026 (session push Gitea + v1.2.3) | Push initial vers **gitea.cloudyfy.fr/Siphonight/HormoneTrack** (privé) après **anonymisation de l'historique** (filter-branch : les premiers commits embarquaient les valeurs réelles des tests) ; **données de test réelles déplacées hors dépôt** (`local-test-data/` gitignoré, tests `Assume`-skippés) ; **releases avec APK en pièce jointe** ; pics/creux + calibration T par période d'ester ; **56 tests verts**. | | 5 sept. 2026 (session v1.2.1) | Remontées UX/utilisateur : calibration **par période d'ester** (labs EV → doses EV, labs EEn → doses EEn — corrige les courbes gonflées), lab T "pg/mL" neutralisé, **édition des labs**, tap accueil → Graphiques + mini-légende, auto-cal fusionnée (E2+T, un seul switch) ; 2ᵉ régression épinglée sur le nouvel export ; **44 tests verts**, APK v1.2.1. | Leçon importante de la session build : **les erreurs de compilation et les bugs sémantiques @@ -345,6 +346,31 @@ Emplacement : `app/src/test/java/com/hormonetrack/`. Répertoire de travail d'ex non calibré ≈ 367 = les « 375 » rapportés), facteur unique EEN plausible, lab T en unité aberrante neutralisé, prévision 6 j exacte, auto-cal cohérente. **Tout nouvel export utilisateur = un nouveau test de régression.** + +### 8.bis Données de test réelles : HORS dépôt (`local-test-data/`) + +Les deux classes de régression (`RegressionUserCase{,2}Test`) épinglent le comportement +du moteur sur les **exports réels** de l'utilisatrice. Ce sont des **données de santé +personnelles** : elles ne sont **pas versionnées**, pour ne rien divulguer dans le +dépôt (ni maintenant, ni si le repo devient public un jour). + +- emplacement : `local-test-data/backup-v1.0.0.json` et `backup-v1.2.0.json` + (copiés tels quels depuis l'export JSON de l'app) ; +- `.gitignore` contient `local-test-data/` → jamais commités ; +- les tests font `Assume.assumeTrue(file.exists())` dans le `@Before` : **sans le + fichier, la classe est IGNORÉE** (skipped, pas failed) — un clone neuf ou une CI + exécute 44 tests au lieu de 56 ; +- le workdir des tests Gradle est le dossier du module (`app/`) → les tests + cherchent les fichiers à plusieurs chemins (`../local-test-data/…` en premier) ; +- **pour les lancer** : exporter un backup JSON depuis l'app → l'enregistrer sous + le nom attendu dans `local-test-data/` → `./gradlew testDebugUnitTest` ; +- ⚠️ **ne jamais embarquer ces données dans les tests** (string inline dans le + code) : tout nouvel export réel → fichier gitignore + assertions data-driven ; +- **l'historique a été nettoyé avant le premier push** : les premiers commits + embarquaient les valeurs (tests + doc) → `git filter-branch --tree-filter` avec + un script d'anonymisation (timestamps décalés de +30 j, valeurs perturbées dans + la prose des docs), tags réécrits, refs purgeées. `git grep` sur **toutes** les + révisions ne trouve aucune donnée réelle. - **`LabsGroupingTest`** (4) : v1.2.2 — regroupement de l'écran Analyses (paire E2+T même timestamp ; timestamps différents séparés ; tri E2 avant T avant autres ; ordre chronologique décroissant). @@ -570,13 +596,50 @@ cd ~/projects/HormoneTrack adb install -r app/build/outputs/apk/debug/app-debug.apk ``` -**Git (initialisé le 2026-09-05, branche `main`)** : +**Git (initialisé le 2026-09-05, branche `main`, remote Gitea)** : +- Dépôt : `https://gitea.cloudyfy.fr/Siphonight/HormoneTrack` (privé) ; - Historique = commits logiques par couche (toolchain / moteur / UI / docs) ; - **Chaque release = tag annoté** (`v1.1.0`, `v1.2.0`, …) : `git tag -a vX.Y.Z -m "…" && git tag` pour lister ; -- `local.properties`, `build/`, `.gradle/`, `.idea/` sont ignorés (`.gitignore`) ; +- `local.properties`, `build/`, `.gradle/`, `.idea/`, **`local-test-data/`** sont + ignorés (`.gitignore`) — ce dernier protège les données de santé de test ; - Avant chaque commit de release : `./gradlew testDebugUnitTest` doit être vert ; -- Prochaine étape repo : ajouter un remote et `git push -u origin main --tags`. +- Push : `git push -u origin main --tags` (auth par trousseau macOS — token Gitea + à scope `write:repository` ; ⚠️ un token SANS `write:user` ne permet PAS de + créer un repo via API ni d'utiliser push-to-create, mais suffit pour push, + créer des releases et y attacher des fichiers). + +### 16.bis Releases Gitea avec APK téléchargeable + +Les releases Gitea embarquent l'APK de chaque version — les utilisateurs n'ont +pas besoin de compiler : + +```bash +# 1. Construire l'APK au niveau du tag +git checkout vX.Y.Z && ./gradlew assembleDebug +cp app/build/outputs/apk/debug/app-debug.apk /tmp/apks/HormoneTrack-vX.Y.Z.apk +git checkout main + +# 2. Créer la release (API, token trousseau à write:repository) +TOKEN=$(security find-internet-password -s gitea.cloudyfy.fr -w) +curl -s -X POST "https://gitea.cloudyfy.fr/api/v1/repos/Siphonight/HormoneTrack/releases" \ + -H "Authorization: token $TOKEN" -H "Content-Type: application/json" \ + -d '{"tag_name":"vX.Y.Z","name":"vX.Y.Z","body":"","draft":false,"prerelease":false}' + +# 3. Uploader l'APK en pièce jointe +RELEASE_ID=$(curl -s "https://gitea.cloudyfy.fr/api/v1/repos/Siphonight/HormoneTrack/releases/tags/vX.Y.Z" \ + -H "Authorization: token $TOKEN" | python3 -c "import json,sys; print(json.load(sys.stdin)['id'])") +curl -s -X POST \ + "https://gitea.cloudyfy.fr/api/v1/repos/Siphonight/HormoneTrack/releases/$RELEASE_ID/assets?name=HormoneTrack-vX.Y.Z.apk" \ + -H "Authorization: token $TOKEN" -F "attachment=@/tmp/apks/HormoneTrack-vX.Y.Z.apk" +``` + +Notes : +- L'APK est une **build debug** signée avec la clé debug locale — installable en + sideload, mises à jour entre versions OK (même signature) ; +- Le dépôt est **privé** : le téléchargement des releases exige d'être connecté ; + rendre le dépôt public rend les APK téléchargeables sans compte (aucune donnée + de santé dans le dépôt, cf §8.bis). - Téléphone : mode développeur + Débogage USB (détails : GUIDE_INSTALLATION.md) - À ma charge (assistant) : build + tests JVM ✓ ; émulateur possible sur demande ; @@ -659,4 +722,4 @@ Sur le téléphone de test (à compléter par l'utilisatrice) : - [ ] Tester l'installation d'une watchface `.hwt` via Gadgetbridge (pour la Phase 2) --- -*Doc mise à jour le 5 sept. 2026 (v1.2.2) — build OK, 48/48 tests verts, repo git avec tags v1.1.0→v1.2.2.* +*Doc mise à jour le 5 sept. 2026 (v1.2.3) — build OK, 56/56 tests verts (44 sans les données locales), dépôt Gitea privé + releases APK, aucune donnée de santé dans le dépôt ni l'historique.*