From 38cf62826e69722c1a808efb4b87a88c2802ac2a Mon Sep 17 00:00:00 2001 From: Siphonight Date: Fri, 11 Sep 2026 16:27:56 +0200 Subject: [PATCH] =?UTF-8?q?Docs=20:=20audit=20doc=E2=86=94code=20=E2=80=94?= =?UTF-8?q?=20arbre=20=C2=A74=20complet,=20le=C3=A7ons=2012/13=20(=C2=A711?= =?UTF-8?q?),=20132=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Constats de l'audit systématique : - arbre §4 sans les fichiers conteneurisation (Dockerfile, nginx.conf, compose, .dockerignore) ni container-test.sh / publish-release.py - check.sh décrit 1→6 (actualisé : + mode --release 7→9) - suite lab-trajectory absent de l'arbre tests/ - mentions « 121 tests » périmées → 132 (statut/démarrage/§2/§8/footer) - leçons de portage v1.5.0 ajoutées au §11 (12 : clé LAB skippée de la légende, miroir #63 Android ; 13 : imports ESM = modules exacts) --- README.md | 2 +- docs/DEVELOPPEMENT.md | 35 +++++++++++++++++++++++++++++------ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 2c0f761..3f3c52d 100644 --- a/README.md +++ b/README.md @@ -182,7 +182,7 @@ in-app s'affiche quand même à l'heure du rappel, page ouverte). ## Doc de développement Architecture, portage fichier par fichier, format du backup, processus de -test (121 tests Node + E2E navigateur), processus de push et pièges connus : +test (132 tests Node + E2E navigateur), processus de push et pièges connus : **[docs/DEVELOPPEMENT.md](docs/DEVELOPPEMENT.md)**. ## Licence diff --git a/docs/DEVELOPPEMENT.md b/docs/DEVELOPPEMENT.md index 597bce5..0ac5541 100644 --- a/docs/DEVELOPPEMENT.md +++ b/docs/DEVELOPPEMENT.md @@ -60,7 +60,7 @@ Règles du portage, fixées au départ : | Choix | Décision | Pourquoi | |---|---|---| -| Langage | JavaScript ES modules natifs (pas de TS, pas de build) | zéro chaîne de compilation → le déploiement = copier le dossier ; les types critiques sont documentés en JSDoc et épinglés par 121 tests | +| Langage | JavaScript ES modules natifs (pas de TS, pas de build) | zéro chaîne de compilation → le déploiement = copier le dossier ; les types critiques sont documentés en JSDoc et épinglés par 132 tests | | Framework UI | Aucun — DOM via un helper `el()` (`ui/components.js`) | même philosophie que la v1 Android (pas de ViewModel/DI) ; une seule abstraction à connaître | | Rendu graphique | Canvas 2D natif (portage de `CurveChart.kt`) | pas de lib de charts : fidélité du rendu, zéro dépendance | | Persistance | `localStorage` (clés préfixées `hormonetrack.`) | données petites (JSON) ; backend INJECTABLE → testable en Node (`store.setBackend(new Map())`) | @@ -140,6 +140,10 @@ HormoneTrack-web/ (dépôt séparé) ├── index.html page unique (SPA) — shell construit par app.js ├── css/style.css thème (couleurs = Color.kt Android), mobile-first ├── LICENSE GPL-3.0 (copie de l'Android — dépôt autonome) +├── Dockerfile image de déploiement (nginx-unprivileged, §10) +├── nginx.conf server block no-cache/gzip/sécurité (§10) +├── docker-compose.yml run durci (read_only + tmpfs, §10) +├── .dockerignore runtime seulement (docs/ INCLUS — changelog) ├── .gitignore node_modules, package-lock, local-test-data ├── assets/pk_profiles.json COPIE de l'asset Android (tables Estrannaise) ├── js/ @@ -219,9 +223,17 @@ HormoneTrack-web/ (dépôt séparé) │ └── CHANGELOG.md journal web (lu par le dialog « Nouveautés ») ├── scripts/ │ ├── serve.py serveur statique de dev (no-cache, MIME ok) -│ ├── check.sh vérifications 1→6 (syntaxe, i18n, tests, E2E, HTTP) +│ ├── check.sh vérifications 1→6 (syntaxe, i18n, tests, E2E, +│ │ smoke HTTP) + mode --release : 7→9 (cohérence +│ │ version↔changelog↔tag, arbre propre, test +│ │ conteneur si daemon — §10) │ ├── i18n-check.mjs cohérence FR/EN + clés utilisées -│ └── e2e.mjs E2E playwright (Firefox headless, ?demo=1) +│ ├── e2e.mjs E2E playwright (Firefox headless, ?demo=1 ; +│ │ mode conteneur via HRT_E2E_BASE) +│ ├── container-test.sh build + run DURCI + headers/gzip/MIME + +│ │ E2E contre le conteneur ([port] [platform]) +│ └── publish-release.py publie la release Gitea (zip = git archive +│ AU TAG, vérifié par téléchargement) ├── tests/ ── node --test (miroirs des suites Kotlin) ── │ ├── helpers.js fixtures (makeTreatment/makeDose/makeLab, asset) │ ├── pk-profiles.test.js ← PKProfileStoreTest.kt (pics ODS, casse #22…) @@ -230,6 +242,8 @@ HormoneTrack-web/ (dépôt séparé) │ ├── pk-engine.test.js ← PharmacokineticEngineTest.kt (+ #35, §6.bis) │ ├── calibration.test.js ← CalibrationPerModel/ScaleFactorWhsahRepro/ │ │ V120Features (fixes #60/#61, périodes d'ester) +│ ├── lab-trajectory-model.test.js ← LabTrajectoryModelTest.kt (v1.5.0 +│ │ « Tracé labs » — passage exact, garde #61) │ ├── backup.test.js ← BackupGsonTest.kt + exports Android RÉELS │ │ (local-test-data/ si présent, sinon skip) │ ├── chart-helpers.test.js ← ChartZoomTest.kt (#53/#54/#55/#58/#62) @@ -362,7 +376,7 @@ Pièges rencontrés : |---|---|---|---| | Syntaxe | `node --check` | tous les modules ES | `bash scripts/check.sh` | | i18n | `scripts/i18n-check.mjs` | clés FR/EN synchronisées + clés utilisées | (dans check.sh) | -| Unitaires | `node --test` | **121 tests** : noyau PK, calibration, backup, store, helpers, alertes, rappels, changelog | `npm test` | +| Unitaires | `node --test` | **132 tests** : noyau PK, calibration, backup, store, helpers, alertes, rappels, changelog, tracé labs (v1.5.0) | `npm test` | | E2E navigateur | playwright-core + build Firefox | app réelle : rendu, canvas peint (pixels), navigation, dialog changelog, langue | `npm run e2e` | | Smoke HTTP | curl | ressources clés en 200 | `check.sh --with-serve` | @@ -469,7 +483,7 @@ fonctionnalités (sauf impossibilités structurelles §12). **v1.4.10 = la première release web publiée (8 sept. 2026, cloudyfy)** : tag + release Gitea avec l'archive zip de déploiement, APRES validation -complète (121 tests unitaires + E2E navigateur local + container-test réel +complète (132 tests unitaires + E2E navigateur local + container-test réel en configuration durcie). Le dépôt farewell reste en attente de la création du repo (one-shot côté Gitea). @@ -667,6 +681,15 @@ Trouvés pendant l'écriture (à ne pas réintroduire) : 11. **`getSettings()` fusionne les défauts** : un stockage partiel ne doit jamais exposer des champs `undefined` (les gardes `!== null` deviennent fausses autrement). +12. **Miroir du fix #63 Android** (v1.5.0) : la clé `'LAB'` (Tracé labs) + dans la liste `curves` est SKIPPÉE de la boucle de légende (légende + dédiée à part) — même bug qu'Android : le `else` (TFS) imprimerait la + légende TFS en doublon. Quand une liste clé→série reçoit une clé, + grepper chaque consommateur de la liste (légende, stats, styles). +13. **Imports ESM = noms de modules EXACTS** (v1.5.0) : `labIsSignificant` + vit dans `pk-calibration.js` (pas `pk-engine.js`) — un import du + mauvais module = SyntaxError AU CHARGEMENT, l'app entière ne démarre + pas ; attrapé par `node --check` + l'E2E « aucune erreur console ». ## 12. Limites connues & non-portés @@ -701,7 +724,7 @@ Structurels (plateforme), pas des bugs : --- *Doc mise à jour le 11 sept. 2026 (web v1.5.0 — sync Android, dépôt séparé -HormoneTrack-web) — portage de l'Android v1.4.10, 121 tests verts + E2E, +HormoneTrack-web) — sync Android v1.5.0, 132 tests verts + E2E, backup compatible bidirectionnel, historique propre (aucune donnée de santée, aucune dette de confidentialité), versions alignées sur l'Android.*