Files
games/deltas/0.3.1/0-pre.3.md
2026-09-21 01:13:37 +02:00

153 lines
6.0 KiB
Markdown

<!-- file: deltas/0.3.1/0-pre.3.md -->
<!-- version: 1 -->
# 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 / <device> / <input>` 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`.