# Delta 0.3.1-0-pre.2 ## Base requise `0.3.1-0-pre.1`, validée par l'utilisateur le 2026-09-20. ## Objectif Créer le host Tauri Android minimal de Snake sans dupliquer le gameplay, sans créer un second adapter WASM et sans réintroduire de build orchestré par Python. Cette tranche vise le premier démarrage Android et la validation des frontières Tauri/WASM/tracing. Le Canvas, les contrôles, les assets et le lifecycle complet restent réservés à `0-pre.3` et `0-pre.4` conformément au plan vivant. ## Audit Tauri KSP direct L'archive fournie `khadhroony-solana-project-v0.3.15.zip` a été extraite et les six crates `ksp-app-*-desk` ont été vérifiées directement. Elles possèdent toutes les frontières structurantes retenues pour games.sasedev : ```text src/lib.rs src/tauri.rs package.json vite.config.ts tauri.conf.json capabilities/default.json tauri-plugin-tracing côté Rust @fltsci/tauri-plugin-tracing côté frontend ``` Le nouveau host Snake reprend cette organisation, avec un scope volontairement plus petit. Le Tauri Reflex historique reste seulement une référence de compatibilité : son orchestration Python n'est pas reproduite. ## Changements Rust et WASM - passage du workspace à `0.3.1-0-pre.2` ; - ajout de `game-snake-poc-tauri` au workspace ; - création de la façade `src/lib.rs`, de l'assemblage `src/tauri.rs` et du module propriétaire `src/runtime.rs` ; - ajout du point d'entrée mobile `#[cfg_attr(mobile, tauri::mobile_entry_point)]` ; - initialisation du subscriber partagé via `game-logging-lib` avant le premier événement Rust ; - installation de `tauri-plugin-tracing` ; - généralisation minimale de `game-snake-poc-wasm::configure_runtime_provenance` afin que le même adapter accepte explicitement la famille et le host observés ; - conservation de `ExecutionModel::Wasm` dans l'adapter ; - adaptation du Web direct pour fournir explicitement `web / browser` ; - ajout d'un test ciblé `android / tauri-webview / wasm` ; - généralisation de la rustdoc `RuntimeHost::TauriWebView`, qui n'est plus décrite comme Desktop uniquement. ## Frontend et build Tauri La nouvelle app contient : - `package.json`, `tsconfig.json` et `vite.config.ts` ; - un frontend minimal sous `frontend/` ; - un bridge IPC vers le descriptor runtime Rust ; - le chargement des bindings produits depuis `game-snake-poc-wasm` ; - le tracing frontend via `@fltsci/tauri-plugin-tracing` ; - `tauri.conf.json` et `capabilities/default.json` ; - un icon POC cohérent avec le host Tauri historique ; - `README.md` et `USAGE.md` initiaux. Les hooks Tauri exécutent eux-mêmes le build Cargo WASM, `wasm-bindgen` puis Vite. Les outputs restent sous `../builds/sasedev-games/`. Aucun script Python n'est impliqué dans ce chemin. `cargo tauri android init` reste une opération locale de la gate : son répertoire `gen/` est généré et ignoré, donc il n'est pas distribué dans le delta. ## NDK et JDK La machine de validation possède plusieurs NDK sous `$ANDROID_HOME/ndk/`; `NDK_HOME` n'est donc pas imposé globalement par le dépôt. Si la CLI Tauri exige une valeur explicite pendant `android init/dev`, utiliser ponctuellement le chemin exact de la version NDK concernée. `JAVA_HOME` reste également facultatif tant que `java` est résolu correctement par la CLI dans l'environnement courant. Les deux variables deviennent des outils de diagnostic local, pas des invariants source du projet. ## Audit de distribution `audit_distribution_layout.py` couvre désormais le host Tauri Snake minimal : fichiers requis, hooks Tauri, outputs WASM externes au dépôt, point d'entrée mobile, bridge tracing, provenance Android/TauriWebView et interdiction de Python/`console.*` dans le chemin touché. ## Fichiers ajoutés ```text crates/apps/game-snake-poc-tauri/Cargo.toml crates/apps/game-snake-poc-tauri/README.md crates/apps/game-snake-poc-tauri/USAGE.md crates/apps/game-snake-poc-tauri/build.rs crates/apps/game-snake-poc-tauri/capabilities/default.json crates/apps/game-snake-poc-tauri/frontend/css/main.css crates/apps/game-snake-poc-tauri/frontend/main.html crates/apps/game-snake-poc-tauri/frontend/ts/bridge.ts crates/apps/game-snake-poc-tauri/frontend/ts/logging.ts crates/apps/game-snake-poc-tauri/frontend/ts/main.ts crates/apps/game-snake-poc-tauri/icons/icon.png crates/apps/game-snake-poc-tauri/package.json crates/apps/game-snake-poc-tauri/src/lib.rs crates/apps/game-snake-poc-tauri/src/main.rs crates/apps/game-snake-poc-tauri/src/runtime.rs crates/apps/game-snake-poc-tauri/src/tauri.rs crates/apps/game-snake-poc-tauri/tauri.conf.json crates/apps/game-snake-poc-tauri/tsconfig.json crates/apps/game-snake-poc-tauri/vite.config.ts history/0.3.1/0-pre.1.md ``` ## Fichiers modifiés ```text Cargo.toml README.md Web/game-snake-poc/frontend/ts/provenance.ts crates/apps/game-snake-poc-wasm/src/runtime.rs crates/apps/game-snake-poc-wasm/unit_tests/runtime.rs crates/engines/engine-v1-platform-api/src/environment.rs docs/plans/002-V0_3_1_TAURI_ANDROID_SNAKE_PLAN.md scripts/audit_distribution_layout.py ``` ## Validation générateur Les audits statiques applicables sont exécutés avant livraison. Aucun `cargo`, `npm`, `wasm-bindgen`, Gradle, Tauri Android ou smoke n'est déclaré validé par le générateur. ## Gate utilisateur Appliquer d'abord la gate workspace : ```bash python3 scripts/audit_rust_workspace_rules.py python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates Android Web deltas history python3 scripts/audit_distribution_layout.py cargo fmt --all cargo fmt --all -- --check cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings cargo test -p game-snake-poc-wasm --all-targets --all-features ``` Comme l'API de provenance partagée est utilisée par le Web direct, reconstruire ses bindings et son frontend : ```bash cargo build -p game-snake-poc-wasm --target wasm32-unknown-unknown wasm-bindgen ../builds/sasedev-games/target/wasm32-unknown-unknown/debug/game_snake_poc_wasm.wasm --target web --out-dir ../builds/sasedev-games/game-snake-poc-web/wasm --out-name game_snake_poc_wasm (cd Web/game-snake-poc && npm install && npm run build) ``` Puis initialiser et lancer le nouveau host par Tauri, sans exécuter ses scripts npm de build directement : ```bash (cd crates/apps/game-snake-poc-tauri && npm install) (cd crates/apps/game-snake-poc-tauri && cargo tauri android init) (cd crates/apps/game-snake-poc-tauri && cargo tauri android dev) ``` Critères du smoke `android dev` : - l'app démarre sur l'appareil/AVD choisi ; - le frontend affiche `android / tauri-webview / wasm / unknown / unknown` ; - le bridge Rust répond ; - le frontend charge `game-snake-poc-wasm` ; - les logs Rust et frontend atteignent le pipeline tracing/logcat ; - aucune erreur runtime bloquante n'est visible. `cargo tauri android build` reste reporté au jalon de packaging prévu par le plan. ## Suite après validation Si la gate est propre, passer automatiquement à `0.3.1-0-pre.3` pour intégrer le Canvas Snake, les inputs et les assets dans le WebView Tauri. Tout défaut source de `0-pre.2` produit d'abord un `0-pre.2.fix.N` borné.