# Delta 0.3.1-0-pre.3 ## Base Base déclarée : `0.3.1-0-pre.2.fix.3`, validée par l'utilisateur le 2026-09-20. ## Objet Cette tranche transforme le host Tauri Android minimal en POC Snake visuellement jouable : Canvas, boucle de simulation fixed-step, contrôles clavier/touch, assets canoniques et shell responsive. Elle enregistre aussi la décision issue du smoke précédent : Tauri Android est conservé comme POC de référence, mais la voie Android de production reste SDL3 natif tant qu'un besoin fonctionnel explicite ne justifie pas la WebView. ## Frontend Tauri Snake Le host ajoute des modules propriétaires séparés : ```text frontend/ts/assets.ts validation des assets common/game frontend/ts/game.ts projection Canvas + fixed-step WASM frontend/ts/input.ts clavier + pointer/touch frontend/ts/provenance.ts device/input observés pour le host Tauri ``` `main.ts` reste l'orchestrateur frontend et ne réimplémente aucune règle Snake. Le gameplay continue de résider dans `game-snake-poc` et le même `game-snake-poc-wasm` reste consommé par le navigateur direct et la WebView Tauri. Le shell reste volontairement léger : CSS local, aucun Bootstrap/SimpleBar/ResizeObserver ajouté. Le Canvas conserve le ratio logique `3 / 5` du Snake et les boutons directionnels sont utilisables au tactile/pointer. ## Assets `vite-plugin-static-copy` est ajouté au package Tauri pour exposer exactement les deux assets canoniques : ```text assets/common/data/runtime.json -> common/data/runtime.json assets/game-snake-poc/data/game.json -> game/data/game.json ``` Les assets restent hors des crates Rust et aucun duplicat runtime n'est créé sous `frontend/` ou `gen/android`. ## Provenance Le backend Rust fournit toujours les dimensions statiques `Android / TauriWebView / Wasm`. Le frontend observe désormais la classe de device et les sources d'input pour configurer l'adapter partagé avec `phone/tablet/desktop/unknown` et `touch/keyboard-mouse/mixed/unknown`. La stabilisation lifecycle/background/foreground appartient encore à `0-pre.4`. ## Vite dev La configuration WebSocket garde `server.ws`, mécanisme Vite 8 courant. Sur l'émulateur sans `TAURI_DEV_HOST`, le client HMR utilise le même port `1436` que le serveur dev/forwarding Tauri ; avec un host réseau explicite, le port HMR séparé `1437` reste utilisé. Cette correction vise le warning HMR observé au smoke précédent mais n'est pas un critère fonctionnel du gameplay. ## Positionnement Tauri après le POC minimal La documentation durable et la roadmap sont réconciliées : - Tauri Android reste un POC de référence ; - SDL3 natif reste la cible Android productive par défaut ; - les futurs jeux ne reçoivent pas automatiquement une app Tauri Android ; - la saisie texte/WebView reste une hypothèse à comparer aux capacités SDL réelles ; - Tauri Desktop devient une évaluation conditionnelle, notamment selon la viabilité d'une monétisation publicitaire WebView. Aucune extraction Web/Tauri commune n'est créée dans cette tranche. Le statut de POC de référence réduit au contraire la valeur d'une abstraction qui n'aurait pas au moins deux consommateurs durablement retenus. ## Historique créé Conformément à `DOC-HIST-002/003`, la tranche crée : ```text history/0.3.1/0-pre.2.fix.3.md ``` qui enregistre uniquement les validations réellement fournies pour le jalon précédent. ## Fichiers principaux modifiés - `Cargo.toml` ; - `README.md` ; - `ROADMAP.md` ; - `docs/architecture/015-PLATFORM_POC_ARCHITECTURE.md` ; - `docs/plans/002-V0_3_1_TAURI_ANDROID_SNAKE_PLAN.md` ; - `crates/apps/game-snake-poc-tauri/README.md` ; - `crates/apps/game-snake-poc-tauri/USAGE.md` ; - `crates/apps/game-snake-poc-tauri/frontend/main.html` ; - `crates/apps/game-snake-poc-tauri/frontend/css/main.css` ; - `crates/apps/game-snake-poc-tauri/frontend/ts/main.ts` ; - `crates/apps/game-snake-poc-tauri/package.json` ; - `crates/apps/game-snake-poc-tauri/vite.config.ts` ; - `scripts/audit_distribution_layout.py`. ## Fichiers ajoutés - `crates/apps/game-snake-poc-tauri/frontend/ts/assets.ts` ; - `crates/apps/game-snake-poc-tauri/frontend/ts/game.ts` ; - `crates/apps/game-snake-poc-tauri/frontend/ts/input.ts` ; - `crates/apps/game-snake-poc-tauri/frontend/ts/provenance.ts` ; - `history/0.3.1/0-pre.2.fix.3.md` ; - `deltas/0.3.1/0-pre.3.md`. ## Gate utilisateur Conserver JDK 17 pour les commandes Tauri Android : ```bash export JAVA_HOME=/usr/lib/jvm/temurin-17-jdk-amd64 "$JAVA_HOME/bin/java" -version ``` Le package Tauri possède une nouvelle dépendance frontend ; mettre à jour ses dépendances sans lancer manuellement son build : ```bash (cd crates/apps/game-snake-poc-tauri && npm install) ``` Puis exécuter : ```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 ``` Le smoke frontend reste possédé par Tauri : ```bash (cd crates/apps/game-snake-poc-tauri && cargo tauri android dev) ``` Ne pas exécuter `npm run dev` ou `npm run build` manuellement. ## Critère d'acceptation Sur l'AVD Android : - le Canvas Snake est visible avec un ratio `3 / 5` ; - le Snake avance automatiquement ; - score et longueur sont visibles ; - les quatre boutons directionnels répondent au pointer/tactile ; - le clavier fonctionne lorsqu'il est disponible ; - `Assets` affiche `snake / engine-v1` ; - la provenance est `android / tauri-webview / wasm / / ` et évolue après une entrée ; - aucune règle gameplay n'est dupliquée dans TypeScript ; - aucun fichier sous `gen/android` n'est modifié par le projet. Le background/foreground, la reprise sans catch-up, la rotation consolidée et Back restent les objectifs explicites de `0-pre.4`.