Docs : audit doc↔code v1.5.0 — effectifs réels + leçon #63 (§14)

Constats de l'audit systématique (leçon #44 : toute affirmation doit être
vérifiée dans le fichier réel) :
- effectifs de régression RÉELS : 4 classes = 6/6/6/5 = 23 tests (doc
  disait 4 pour la classe 4) → « 160 sans les données locales » (183−23)
  corrigé dans §8, §8.bis, §16, footer et README ; les vieux chiffres
  (44/87 v1.3.x, 150/172 v1.4.x) épinglés comme historiques
- §14 : entrée #63 ajoutée à l'historique des bugs (elle était citée en
  §7.10 mais absente de la liste « à ne pas réintroduire »)
This commit is contained in:
Siphonight 2026-09-11 16:27:46 +02:00
parent 04f6b8bd64
commit dd5a9e3013
2 changed files with 25 additions and 9 deletions

View File

@ -16,7 +16,7 @@ sauvegarde JSON. **100 % local, aucun compte, aucun serveur.**
> à titre informatif — ce ne sont pas des mesures. Fie-toi toujours à tes analyses de
> sang et aux consignes de ton endocrinologue.
- **Statut** : v1.5.0 — build Android ✅, **lint vert** ✅, **183 tests unitaires** ✅ (161 sans les données de test locales ; régressions épinglées sur données réelles **non versionnées**), intégration montre = notifications ✅, **dépôt Gitea privé + releases avec APK** ✅
- **Statut** : v1.5.0 — build Android ✅, **lint vert** ✅, **183 tests unitaires** ✅ (160 sans les données de test locales ; régressions épinglées sur données réelles **non versionnées**), intégration montre = notifications ✅, **dépôt Gitea privé + releases avec APK** ✅
- **Journal des versions** : [docs/CHANGELOG.md](docs/CHANGELOG.md)
- **Guide utilisateur** : [docs/GUIDE_INSTALLATION.md](docs/GUIDE_INSTALLATION.md)
- **Doc de développement** (architecture, maths, décisions, bugs) : [docs/DEVELOPPEMENT.md](docs/DEVELOPPEMENT.md)
@ -100,7 +100,7 @@ par AGP si les licences sont signées). Le wrapper télécharge Gradle 9.7.1.
git clone <repo> && cd HormoneTrack
echo "sdk.dir=/chemin/vers/android-sdk" > local.properties # ou ANDROID_HOME
./gradlew assembleDebug # APK : app/build/outputs/apk/debug/app-debug.apk
./gradlew testDebugUnitTest # 172 tests (150 sans les données locales)
./gradlew testDebugUnitTest # 183 tests (160 sans les données locales)
./gradlew lint # lint vert obligatoire avant release
```

View File

@ -514,9 +514,9 @@ MAIS passant par tous les points ».
## 8. Tests unitaires
**183 tests JVM, tous verts** (`./gradlew testDebugUnitTest`) — **161 sans
les données de test locales** (cf §8.bis : les 3 classes de régression,
6 tests chacune, sont skippées via `Assume`). Dépendance : JUnit 4.13.2.
**183 tests JVM, tous verts** (`./gradlew testDebugUnitTest`) — **160 sans
les données de test locales** (cf §8.bis : les 4 classes de régression,
6/6/6/5 tests, sont skippées via `Assume`). Dépendance : JUnit 4.13.2.
Emplacement : `app/src/test/java/com/hormonetrack/`. Répertoire de travail d'exécution =
`app/` → l'asset est lu via `src/main/assets/pk_profiles.json` (fallback `app/src/…`).
@ -589,7 +589,8 @@ dépôt (ni maintenant, ni si le repo devient public un jour).
dans le code (le scanner refuserait, et ce serait une fuite).
- 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 87 ;
exécute 160 tests au lieu de 183 (v1.5.0 ; chiffres historiques : 44/87 à v1.3.x,
150/172 à v1.4.x) ;
- 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
@ -1343,6 +1344,21 @@ l'exemple) :**
seulement au boot/save). Leçon : toute logique de scheduling doit vivre
au MOTEUR (testable JVM), pas dans les composants Android.
63. **Légende du graphique dupliquée + chip coupé hors fenêtre** (v1.5.0,
constat émulateur §16.ter) : l'ajout de la série « Tracé labs »
(clé `"LAB"` dans la liste `curves`) tombait dans le `else` de la
boucle de légende → la légende « E2/T Transfem Science » s'imprimait
une 2ᵉ fois ; et le 4ᵉ chip de la rangée modèles sortait de la
fenêtre sur écran 1080 px (rangée à largeur fixe, absent du dump
uiautomator — même famille que #57 : un ajout de rangée doit être
testé par dump, pas seulement par le code). FIX : (a) branche
explicite `"LAB" -> {}` dans la boucle de légende (légende dédiée
plus bas) ; (b) `horizontalScroll(rememberScrollState())` CONFINÉ à
la RANGÉE de chips (le pan/pinch du graphique reste sur le Card — le
fix #62 visait un scroll VERTICAL parent ; ici le scroll est local,
pas de conflit). Leçon : quand une liste clé→série reçoit une nouvelle
clé, GREPPER chaque consommateur de la liste (légende, stats, styles).
**Leçons** : (a) ne jamais croire un build « probablement bon » sans l'avoir lancé ;
(b) les tests sémantiques attrapent ce que la compilation ne voit pas ; (c) se méfier des
constantes stdlib « de mémoire » (`ln2`), des mélanges Float/Double, et des APIs M3
@ -1492,8 +1508,8 @@ vérifie pas en tests JVM).
1. **Bumper la version** dans `app/build.gradle.kts` : `versionCode = N+1`,
`versionName = "X.Y.Z+1"` (SemVer : fix = Z, feature = Y).
2. **Tests verts obligatoires** : `./gradlew testDebugUnitTest` — 183 au
total, 161 si `local-test-data/` est absent (les 3 classes de régression
réelles sont skippées via `Assume`, 6 tests chacune) ; **lint vert
total, 160 si `local-test-data/` est absent (les 4 classes de régression
réelles sont skippées via `Assume`, 6/6/6/5 tests) ; **lint vert
obligatoire** : `./gradlew lint` (v1.3.4 — `StringFormatMatches` aurait
attrapé les crashs #47/#48 dès v1.3.1). Paliers de test du projet :
chaque commit = tests + lint ; release = + scan confidentialité + APK au
@ -1840,7 +1856,7 @@ Sur le téléphone de test (à compléter par l'utilisatrice) :
tap ; et TOUTES les courbes affichées reflètent la calibration (test)
---
*Doc mise à jour le 11 sept. 2026 (v1.5.0) — build OK, lint vert, 183/183 tests verts (161 sans
*Doc mise à jour le 11 sept. 2026 (v1.5.0) — build OK, lint vert, 183/183 tests verts (160 sans
les données locales), dépôts Gitea (cloudyfy + farewell) avec releases APK, aucune donnée
de santé dans le dépôt ni l'historique. Fil des corrections : v1.3.3 = reprise de
maintenance (permissions agenda, export logs IO, bump de version) ; v1.3.4 = 2 crashs