ADR 0009 proposé (PWA en TypeScript) ; plan de l'étape 0d.1

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-02 20:04:49 +01:00
co-authored by Claude Opus 5.5
parent 14d1186e84
commit 03b26ccba7
5 changed files with 157 additions and 2 deletions
@@ -46,3 +46,9 @@ construire ou tester ; rien n'est embarqué dans l'application.
| Python 3 | PSF | `ustagammon/build-c` | Comparateur des références |
| jq | MIT | `ustagammon/build-c` | Lecture du JSON dans les tests |
| Emscripten | MIT / NCSA | `emscripten/emsdk:3.1.64` | Compilation du moteur en WebAssembly (étape 0b) |
### 2026-11-02 — Outils de l'application web (étape 0d)
Validés par Pierre avec l'ADR 0009, dans Docker, jamais embarqués :
TypeScript (`tsc`, Apache-2.0), Biome (MIT ou Apache-2.0),
`@cucumber/cucumber` (MIT), `dependency-cruiser` (MIT).
+53
View File
@@ -0,0 +1,53 @@
# 0009. Socle : PWA en TypeScript, moteur en WebAssembly
- **Statut** : proposé
- **Date** : 2026-11-02
- **Décideurs** : Pierre (langage, outils), sur proposition de Claude Code ;
le socle sera accepté après les mesures sur le Fairphone 4
## Contexte
L'étape 0 doit trancher entre une PWA (moteur en WebAssembly) et une
application Android native (`docs/etape-0.md`). L'étape 0b a produit le moteur
en WebAssembly (MR !9) : même suite de contrat qu'en natif (écart maximal
9,5e-4 pour une tolérance de 0,002), 7,3 Mo compressés à télécharger (seuil
40 Mo). Sur le PC de développement (i5-2450M, 2011), le meilleur coup à 2 plis
prend au plus 0,3 s sous Chromium et 2,3 s sous Firefox (seuil sur le
téléphone : 3 s). Les mesures sur le Fairphone 4 restent à faire.
L'ADR 0007 renvoyait au choix du socle le langage de l'interface et l'outil de
vérification des dépendances.
## Décision
Sous réserve des mesures sur le Fairphone 4 :
- **Socle : PWA**, installable et utilisable hors ligne, moteur en WebAssembly
dans un Web Worker. L'étape 0c (Android natif) n'est pas faite.
- **Langage : TypeScript**, compilé par `tsc` en modules JavaScript standard,
sans framework d'interface ni empaqueteur.
- **Lint et formatage : Biome.**
- **Scénarios exécutés** (ADR 0008) par `@cucumber/cucumber`, sous Node, sur le
domaine branché au vrai moteur WebAssembly.
- **Règles d'architecture vérifiées** (ADR 0007) par `dependency-cruiser` :
le domaine n'importe ni l'interface, ni le stockage, ni le moteur ; aucun
écran n'importe le moteur.
- Tous ces outils tournent dans Docker et ne sont jamais embarqués dans
l'application.
## Alternatives écartées
- **Android natif (Kotlin, NDK)** : un seul système, une chaîne de build lourde
(Gradle, NDK) sur une machine de 2011, et aucun gain mesuré à ce stade sur
les temps de calcul. Reste le plan B si les mesures du téléphone échouent.
- **JavaScript annoté (JSDoc) vérifié par TypeScript** : pas d'étape de build,
mais des types moins lisibles ; Pierre a choisi TypeScript.
- **Un framework d'interface** (React, Vue…) : inutile pour un plateau et
quelques écrans, et contraire à la règle de simplicité (ADR 0007).
## Conséquences
- La distribution sur F-Droid et le Play Store demandera plus tard une
enveloppe Android minimale autour de la PWA (à décider à l'étape 1).
- Si les mesures du Fairphone 4 dépassent les seuils, cet ADR passe au statut
« obsolète » et l'étape 0c est lancée.
+1
View File
@@ -15,3 +15,4 @@ l'ancien passe au statut « remplacé par NNNN ». Voir l'ADR 0001.
| [0006](0006-merge-requests-systematiques.md) | Merge requests systématiques, fusionnées par Claude Code | accepté |
| [0007](0007-architecture-et-conventions-de-code.md) | Architecture et conventions de code | accepté |
| [0008](0008-glossaire-et-scenarios-source-unique.md) | Glossaire et scénarios : une source unique pour le code, l'aide et les tests | accepté |
| [0009](0009-socle-pwa-typescript.md) | Socle : PWA en TypeScript, moteur en WebAssembly | proposé |