# Plan v0.3.1 — second host Snake Tauri Android ## But de la version `0.3.1` doit ajouter un second host Snake réellement exécutable sous Tauri Android en réutilisant la baseline Web/WASM validée par `0.3.0`. La version ne doit ni déplacer le gameplay hors de `game-snake-poc`, ni créer un second adapter Snake, ni transformer immédiatement les similitudes Web/Tauri en framework générique. Base stable : `0.3.0`. Cadrage : [`../studies/024-V0_3_1_TAURI_ANDROID_SNAKE_AUDIT.md`](../studies/024-V0_3_1_TAURI_ANDROID_SNAKE_AUDIT.md). ## Décisions acquises - la nouvelle crate sera `crates/apps/game-snake-poc-tauri` ; - `0.3.1` valide uniquement sa cible Android ; - `game-snake-poc` reste inchangé sauf défaut réellement découvert ; - `game-snake-poc-wasm` reste l'unique adapter Snake WASM et recevra seulement la généralisation de provenance nécessaire au second host ; - le frontend Tauri part du comportement réellement validé dans `Web/game-snake-poc`, avec adaptation de lifecycle et logging ; - `lib.rs` est une façade/reexport et `tauri.rs` reste l'assemblage Tauri ; - le tracing frontend utilise `@fltsci/tauri-plugin-tracing` ; - les hooks Tauri possèdent le build frontend/WASM ; - aucun nouveau chemin de build n'est piloté par Python ; - `README.md` et `USAGE.md` seront créés avec l'app : architecture pour le premier, prérequis/commandes/smokes pour le second ; - `cargo tauri android init/dev/build` sont les commandes mobiles de référence ; - SimpleBar et `resize-observer-polyfill` ne sont pas ajoutés au host Tauri sans besoin démontré. ## Scope La version couvre : - création de la crate/app Tauri Snake ; - initialisation de la cible Android par Tauri ; - pipeline Rust/WASM + Vite/TypeScript possédé par Tauri sans Python ; - consommation de `game-snake-poc-wasm` ; - shell Canvas, contrôles touch et comportement responsive nécessaires au jeu ; - assets communs et spécifiques Snake ; - lifecycle mobile/WebView ; - provenance `Android / Wasm / TauriWebView` ; - tracing Rust/Tauri/frontend ; - politique de sortie/Back conforme au moteur ; - build/package et smoke sur AVD/appareil disponible aux jalons prévus ; - comparaison du code Web direct/Tauri après fonctionnement réel afin de décider s'il existe une extraction commune justifiée. Hors scope : Tauri Desktop Snake comme cible validée, iOS, Android SDL3 multi-ABI additionnel, réseau realtime, Uroburas, ads, billing, auth et leaderboard. ## Prévision souple ### `0-pre.1` — cadrage et règles Audit complet de l'archive stable, règles, baseline Web/WASM, Tauri Reflex, références Desk KSP accessibles, environnement Android historique et commandes Tauri mobiles actuelles. Livraison : étude `024`, présent plan, correction des règles Tauri Android, clarification `PlatformFamily`, index documentaires et ouverture de la version technique `0.3.1-0-pre.1`. Aucun scaffold Tauri Snake n'est créé. Tranche validée par la gate utilisateur du 2026-09-20. ### `0-pre.2` — host Tauri Android minimal Créer `game-snake-poc-tauri` avec : - manifest Cargo/build script/config Tauri/capabilities ; - `lib.rs` façade, `tauri.rs` assemblage et modules propriétaires minimaux ; - point d'entrée `run()` mobile annoté `#[cfg_attr(mobile, tauri::mobile_entry_point)]` dans le module propriétaire puis réexporté par `lib.rs` ; - frontend Vite/TypeScript minimal ; - bridge tracing initialisé ; - hooks de build natifs, sans Python ; - cible Android initialisée via Tauri ; - chargement du même adapter `game-snake-poc-wasm` après généralisation minimale de provenance ; - `README.md` et `USAGE.md` initiaux. La tranche vise un premier démarrage Tauri Android minimal, pas encore toute la finition input/lifecycle. État candidat livré : crate `game-snake-poc-tauri`, bridge Rust/Tauri, hooks WASM/Vite sans Python, frontend minimal, tracing frontend/Rust et provenance partagée `Android / TauriWebView / Wasm`. L'initialisation générée `cargo tauri android init` reste volontairement locale et fait partie de la gate utilisateur, car `gen/` n'est pas un artefact source distribué. Gate utilisateur : audits, Cargo workspace strict, test ciblé de l'adapter WASM, non-régression du build Web direct, `cargo tauri android init` puis `cargo tauri android dev` sur un AVD ou appareil disponible. `cargo tauri android build` reste reporté aux phases finales sauf besoin diagnostique. Le premier smoke `0-pre.2` a révélé deux défauts bornés : `build.rs` échouait sous Clippy strict à cause de la rustdoc manquante, et Java 25 ne pouvait pas exécuter le wrapper Gradle `8.14.3` généré par Tauri CLI `2.11.3`. `0-pre.2.fix.1` a tenté de migrer localement le scaffold généré vers Gradle 9 ; cette approche est abandonnée à partir de `0-pre.2.fix.2` car la branche stable Tauri 2.11.x n'a pas encore publié cette migration et le projet ne doit pas maintenir un fork implicite des templates Android Tauri. `0-pre.2.fix.3` fixe JDK 17 comme baseline Android reproductible pour la chaîne officielle Gradle `8.14.3` + AGP `8.11.0` et impose la régénération de tout `gen/android` touché par la tentative `fix.1`. Le Gradle global de la machine ne fait pas partie du contrat reproductible. ### `0-pre.3` — shell Snake, Canvas, input et assets Réutiliser sélectivement le host Web validé : - rendu Canvas et session fixed-step ; - shell responsive pertinent ; - contrôles directionnels touch/pointer et clavier lorsque disponible ; - resize/orientation ; - assets canoniques communs + Snake ; - absence de dépendances Web-only inutiles. Aucune extraction commune n'est réalisée uniquement pour éviter quelques fichiers similaires pendant la mise au point. ### `0-pre.4` — lifecycle, provenance, tracing et sortie mobile Stabiliser : - background/foreground et reprise sans rattrapage massif ; - rotation/resize ; - provenance `Android / Wasm / TauriWebView` + device/input observés ; - tracing Rust/Tauri/frontend ; - sorties applicatives conformes à `EngineGame::quit_requested` sans détourner le Back système Android ; - smokes AVD et, si disponible, appareil réel. Cette tranche doit rendre le second host fonctionnel de bout en bout. ### `0-pre.5` — extraction conditionnelle Créer uniquement si l'état `0-pre.4` montre une duplication réellement durable entre `Web/game-snake-poc` et le frontend Tauri. Une extraction possible doit rester bornée à une responsabilité clairement partagée, par exemple projection/rendu Canvas, mapping input Web ou helpers d'assets. Lifecycle et logging restent host-specific s'ils divergent réellement. Si aucune extraction n'est justifiée, cette tranche est omise. ### `2-beta.1` — validation large et packaging Android Prévoir : - audits statiques applicables ; - `cargo fmt --all -- --check` ; - `cargo check --workspace` ; - Clippy workspace strict ; - suite workspace complète à ce jalon planifié ; - build WASM release et bindings ; - `cargo tauri android build` ; - APK/AAB selon le livrable de validation ; - install/smoke AVD ; - install/smoke appareil ARM64 réel si disponible ; - vérification que les outputs restent hors racine du dépôt lorsqu'ils sont configurables par le projet. ### `2-beta.2` — consolidation documentaire conditionnelle Réserver seulement si les validations beta demandent une consolidation substantielle de `README.md`, `USAGE.md`, architecture, matrice de validation ou plan. Ne pas créer cette tranche par cérémonial. ### `3-rc.1` — candidate gelée Gel fonctionnel, reproductibilité, packaging Android RC et validation finale selon les règles RC applicables. Aucun nouveau framework ni nouveau host. ### `0.3.1` — release stable Promotion mécanique de la RC validée : versions stables, changelog, history et clôture du plan. Aucun ajout fonctionnel. ## Inventaire environnement requis avant `0-pre.2` La gate `0-pre.1` doit recevoir au minimum : ```bash rustc --version cargo --version cargo tauri --version rustup target list --installed node --version npm --version wasm-bindgen --version java -version printf 'JAVA_HOME=%s\nANDROID_HOME=%s\n' "$JAVA_HOME" "$ANDROID_HOME" adb version adb devices -l emulator -list-avds ``` L'absence d'un outil ne doit pas être masquée. Elle devient un prérequis concret de `0-pre.2` ou motive un fix borné de `0-pre.1`. La gate `0-pre.1` validée le 2026-09-20 a confirmé Rust `1.94.1`, Tauri CLI `2.11.3`, Node `24.21.0`, npm `11.19.0`, wasm-bindgen `0.2.128`, OpenJDK `25.0.4.1`, `ANDROID_HOME=/home/sinus/DEV/AndroidSDK`, un appareil ARM64 réel et trois AVD disponibles. `JAVA_HOME` était vide et Java 25 était résolu depuis le `PATH`. Les smokes `0-pre.2` ont confirmé que Tauri sélectionne lui-même le NDK side-by-side sous `$ANDROID_HOME/ndk/`. Le JBR de l'Android Studio local est également Java 25 ; il n'est donc pas compatible avec Gradle `8.14.3`. Pour `0.3.1`, `JAVA_HOME` doit pointer vers JDK 17 pendant `cargo tauri android init/dev/build`. ## Critères de fermeture de 0.3.1 La version peut entrer en RC lorsque : - Snake est jouable dans le WebView Tauri Android sans gameplay dupliqué ; - le même adapter WASM sert Web direct et Tauri Android avec provenance exacte ; - lifecycle/input/assets/tracing/Back ont un comportement explicite et validé ; - le chemin de build ne dépend d'aucun orchestrateur Python ; - le packaging Tauri Android est reproductible ; - les smokes prévus sur cible Android ont été exécutés ; - aucune extraction commune non prouvée n'a été introduite ; - la documentation opérateur et architecture reflète l'état réel. ## Version suivante `0.3.2` reste réservée à Tauri Desktop + Snake et à une éventuelle factorisation WebView seulement après deux consommateurs réels.