Docs v1.2.3 : données de test hors dépôt (§8.bis, sécurité), releases Gitea avec APK (§16.bis), statut à jour

- §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
This commit is contained in:
Siphonight 2026-09-05 19:24:31 +02:00
parent fd7e61b1a2
commit e1b155b7fc
3 changed files with 88 additions and 10 deletions

View File

@ -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

View File

@ -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

View File

@ -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":"<extrait du CHANGELOG>","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.*