0.3.1-0-pre.4.fix.1
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 76
|
# version: 77
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
resolver = "3"
|
||||||
@@ -21,7 +21,7 @@ members = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.3.1-0-pre.4"
|
version = "0.3.1-0-pre.4.fix.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/games"
|
repository = "https://git.sasedev.com/Sasedev/games"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: README.md -->
|
<!-- file: README.md -->
|
||||||
<!-- version: 47 -->
|
<!-- version: 48 -->
|
||||||
|
|
||||||
# games.sasedev
|
# games.sasedev
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ Workspace expérimental puis productif pour des jeux multiplateformes principale
|
|||||||
|
|
||||||
Version stable de référence : `0.3.0`.
|
Version stable de référence : `0.3.0`.
|
||||||
|
|
||||||
Version de développement courante : `0.3.1-0-pre.4`.
|
Version de développement courante : `0.3.1-0-pre.4.fix.1`.
|
||||||
|
|
||||||
Les deux premiers jeux sont des POC structurels : `game-reflex-poc` et `game-snake-poc`. Ils existent d'abord pour valider les frontières du workspace, le moteur, les assets et le packaging multiplateforme.
|
Les deux premiers jeux sont des POC structurels : `game-reflex-poc` et `game-snake-poc`. Ils existent d'abord pour valider les frontières du workspace, le moteur, les assets et le packaging multiplateforme.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: crates/apps/game-snake-poc-tauri/README.md -->
|
<!-- file: crates/apps/game-snake-poc-tauri/README.md -->
|
||||||
<!-- version: 6 -->
|
<!-- version: 7 -->
|
||||||
|
|
||||||
# game-snake-poc-tauri
|
# game-snake-poc-tauri
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@ L'organisation Rust suit le modèle des applications Desk KSP :
|
|||||||
- `src/runtime.rs` possède le petit contrat runtime/provenance ;
|
- `src/runtime.rs` possède le petit contrat runtime/provenance ;
|
||||||
- `frontend/` contient le host WebView et consomme les bindings générés de `game-snake-poc-wasm`.
|
- `frontend/` contient le host WebView et consomme les bindings générés de `game-snake-poc-wasm`.
|
||||||
|
|
||||||
À partir de `0.3.1-0-pre.3`, le frontend fournit aussi le Canvas, la boucle fixed-step, les contrôles clavier/touch et le chargement des assets canoniques. Le lifecycle mobile complet et la politique Back restent consolidés dans la tranche suivante.
|
À partir de `0.3.1-0-pre.3`, le frontend fournit aussi le Canvas, la boucle fixed-step, les contrôles clavier/touch et le chargement des assets canoniques. `0-pre.4` ajoute la suspension/reprise explicite, le suivi de visibilité et le resize/orientation.
|
||||||
|
|
||||||
## Statut du POC
|
## Statut du POC
|
||||||
|
|
||||||
@@ -38,6 +38,8 @@ Le host suspend explicitement sa boucle `requestAnimationFrame` lorsque la WebVi
|
|||||||
|
|
||||||
Le POC reste mono-page et n’enregistre volontairement aucun handler Tauri `onBackButtonPress`. La politique `EngineGame::quit_requested` de Snake est actuellement la politique moteur par défaut `Exit`, cohérente avec le Back Android/Tauri naturel. Un futur jeu retournant `Continue` devra introduire une intégration Back explicite au lieu de modifier ce POC silencieusement.
|
Le POC reste mono-page et n’enregistre volontairement aucun handler Tauri `onBackButtonPress`. La politique `EngineGame::quit_requested` de Snake est actuellement la politique moteur par défaut `Exit`, cohérente avec le Back Android/Tauri naturel. Un futur jeu retournant `Continue` devra introduire une intégration Back explicite au lieu de modifier ce POC silencieusement.
|
||||||
|
|
||||||
|
Le smoke ARM64 réel a cependant mis en évidence un abort natif pendant le teardown déclenché par Back sur le Galaxy S9+ de validation : `FORTIFY: pthread_mutex_lock called on a destroyed mutex`. Le crash arrive après le passage WebView en `visibility hidden` et avant le traitement `pagehide` du frontend. Le dépôt ne prétend donc pas corriger ce problème par un handler Back ad hoc ni par un patch du scaffold généré. Il est conservé comme limite du POC Tauri Android et doit être distingué du comportement d'un APK autonome lors de la beta.
|
||||||
|
|
||||||
## Limite ergonomique connue
|
## Limite ergonomique connue
|
||||||
|
|
||||||
Le D-pad tactile reste sous le Canvas dans ce POC et peut nécessiter un scroll sur petit écran. Des contrôles superposés ou des gestes swipe seraient techniquement possibles, mais ne sont pas introduits dans `0.3.1` : ils ne changent pas la conclusion d’architecture et appartiendraient à une UX produit réelle.
|
Le D-pad tactile reste sous le Canvas dans ce POC et peut nécessiter un scroll sur petit écran. Des contrôles superposés ou des gestes swipe seraient techniquement possibles, mais ne sont pas introduits dans `0.3.1` : ils ne changent pas la conclusion d’architecture et appartiendraient à une UX produit réelle.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: crates/apps/game-snake-poc-tauri/USAGE.md -->
|
<!-- file: crates/apps/game-snake-poc-tauri/USAGE.md -->
|
||||||
<!-- version: 6 -->
|
<!-- version: 7 -->
|
||||||
|
|
||||||
# Utilisation — Snake Tauri Android
|
# Utilisation — Snake Tauri Android
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ export JAVA_HOME=/chemin/vers/jdk-17
|
|||||||
|
|
||||||
Ne pas modifier `gen/android` pour contourner une incompatibilité de JDK.
|
Ne pas modifier `gen/android` pour contourner une incompatibilité de JDK.
|
||||||
|
|
||||||
Pour les cibles actuellement disponibles, `aarch64-linux-android` permet le smoke sur l'appareil ARM64 et `x86_64-linux-android` celui des AVD x86_64. Les autres ABI ne sont pas requises pour `0-pre.2`.
|
Pour les cibles actuellement disponibles, `aarch64-linux-android` permet le smoke sur l'appareil ARM64 et `x86_64-linux-android` celui des AVD x86_64. Les autres ABI restent disponibles pour les validations multi-ABI ultérieures mais ne sont pas nécessaires au smoke courant.
|
||||||
|
|
||||||
## Initialisation locale
|
## Initialisation locale
|
||||||
|
|
||||||
@@ -61,6 +61,29 @@ Choisir l'appareil réel ou l'AVD voulu lorsque la CLI le demande. Le frontend d
|
|||||||
|
|
||||||
Ne pas utiliser `npm run dev` ou `npm run build` comme gate manuelle : ces scripts sont des hooks internes possédés par Tauri. `cargo tauri android build` reste réservé au jalon de packaging prévu par le plan, sauf diagnostic explicite.
|
Ne pas utiliser `npm run dev` ou `npm run build` comme gate manuelle : ces scripts sont des hooks internes possédés par Tauri. `cargo tauri android build` reste réservé au jalon de packaging prévu par le plan, sauf diagnostic explicite.
|
||||||
|
|
||||||
|
### Appareil Android réel via USB
|
||||||
|
|
||||||
|
Sur un appareil physique, Tauri remplace automatiquement le host `localhost` du `devUrl` par une adresse réseau. Pour la gate de référence, le chemin reproductible retenu évite le LAN et utilise le tunnel USB ADB sur le même port HTTP/WebSocket Vite :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
adb -s <serial> reverse --remove-all
|
||||||
|
adb -s <serial> reverse tcp:1436 tcp:1436
|
||||||
|
adb -s <serial> reverse --list
|
||||||
|
|
||||||
|
(cd crates/apps/game-snake-poc-tauri && cargo tauri android dev --host 127.0.0.1)
|
||||||
|
```
|
||||||
|
|
||||||
|
Le `serial` vient de `adb devices -l` et ne doit jamais être enregistré dans les sources. La configuration Vite utilise le port `1436` pour HTTP et WebSocket afin que le même tunnel transporte aussi le HMR. Un port HMR séparé n'appartient pas au contrat de ce POC.
|
||||||
|
|
||||||
|
Pour vérifier l'ABI réelle avant le smoke :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
adb -s <serial> shell getprop ro.product.cpu.abi
|
||||||
|
adb -s <serial> shell getprop ro.product.cpu.abilist
|
||||||
|
```
|
||||||
|
|
||||||
|
`arm64-v8a` correspond à la cible Rust `aarch64-linux-android`, tandis que les AVD utilisés jusqu'ici sont `x86_64-linux-android`.
|
||||||
|
|
||||||
## Positionnement
|
## Positionnement
|
||||||
|
|
||||||
`game-snake-poc-tauri` est un POC de référence. Il ne doit pas être utilisé comme base automatique des futurs jeux Android ; la cible Android productive reste SDL3 natif tant qu’un besoin concret ne justifie pas la WebView Tauri.
|
`game-snake-poc-tauri` est un POC de référence. Il ne doit pas être utilisé comme base automatique des futurs jeux Android ; la cible Android productive reste SDL3 natif tant qu’un besoin concret ne justifie pas la WebView Tauri.
|
||||||
@@ -77,3 +100,5 @@ Pendant `cargo tauri android dev` :
|
|||||||
6. vérifier dans logcat les traces `runtime paused`, `runtime resumed` et les événements `visibility hidden/visible`.
|
6. vérifier dans logcat les traces `runtime paused`, `runtime resumed` et les événements `visibility hidden/visible`.
|
||||||
|
|
||||||
Le D-pad placé sous le Canvas est une limite ergonomique connue du POC de référence et n’est pas un critère bloquant de cette gate.
|
Le D-pad placé sous le Canvas est une limite ergonomique connue du POC de référence et n’est pas un critère bloquant de cette gate.
|
||||||
|
|
||||||
|
Sur le Galaxy S9+ ARM64 utilisé pour la validation réelle, le chargement, WASM, Canvas, assets et touch ont fonctionné via le tunnel USB. En revanche, le Back système a provoqué pendant le teardown de l'Activity/WebView un abort natif `FORTIFY: pthread_mutex_lock called on a destroyed mutex`, après `visibility hidden` et avant `pagehide`. Ce comportement est enregistré comme limite de la pile Tauri/Wry/WebView observée et non contourné par une modification de `gen/android`. Il doit être retesté sur l'APK autonome de la beta afin de distinguer le mode `dev` d'un package embarqué.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/apps/game-snake-poc-tauri/vite.config.ts
|
// file: crates/apps/game-snake-poc-tauri/vite.config.ts
|
||||||
// version: 2
|
// version: 3
|
||||||
|
|
||||||
import { fileURLToPath } from "node:url";
|
import { fileURLToPath } from "node:url";
|
||||||
import { resolve } from "node:path";
|
import { resolve } from "node:path";
|
||||||
@@ -71,15 +71,12 @@ export default defineConfig({
|
|||||||
fs: {
|
fs: {
|
||||||
allow: [appRoot, repositoryRoot, externalBuildRoot],
|
allow: [appRoot, repositoryRoot, externalBuildRoot],
|
||||||
},
|
},
|
||||||
ws: devHost
|
ws: {
|
||||||
? {
|
protocol: "ws",
|
||||||
protocol: "ws",
|
host: devHost || "127.0.0.1",
|
||||||
host: devHost,
|
port: 1436,
|
||||||
port: 1437,
|
clientPort: 1436,
|
||||||
}
|
},
|
||||||
: {
|
|
||||||
clientPort: 1436,
|
|
||||||
},
|
|
||||||
watch: {
|
watch: {
|
||||||
ignored: ["**/src/**"],
|
ignored: ["**/src/**"],
|
||||||
},
|
},
|
||||||
|
|||||||
94
deltas/0.3.1/0-pre.4.fix.1.md
Normal file
94
deltas/0.3.1/0-pre.4.fix.1.md
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
<!-- file: deltas/0.3.1/0-pre.4.fix.1.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# Delta 0.3.1-0-pre.4.fix.1
|
||||||
|
|
||||||
|
## Base
|
||||||
|
|
||||||
|
Base déclarée : `0.3.1-0-pre.4`.
|
||||||
|
|
||||||
|
## Objet
|
||||||
|
|
||||||
|
Corriger le chemin de développement Tauri Android sur appareil réel après la gate ARM64 et formaliser la limite observée lors du teardown WebView/Activity, sans introduire de fork local de Tauri/Wry ni modifier le projet Android généré.
|
||||||
|
|
||||||
|
## Résultats de la gate `0-pre.4`
|
||||||
|
|
||||||
|
La gate workspace et le smoke AVD x86_64 sont propres : audits, formatage, `cargo check`, Clippy strict et les cinq tests `game-snake-poc-wasm` passent. Le lifecycle journalise correctement `runtime paused/resumed` et `visibility hidden/visible`.
|
||||||
|
|
||||||
|
Le smoke supplémentaire sur appareil Android ARM64 réel a confirmé :
|
||||||
|
|
||||||
|
- ABI Android `arm64-v8a` et cible Rust `aarch64-linux-android` ;
|
||||||
|
- compilation du `cdylib` ARM64 ;
|
||||||
|
- assemblage, streamed install et démarrage de `MainActivity` ;
|
||||||
|
- chargement des assets ;
|
||||||
|
- initialisation WASM ;
|
||||||
|
- Canvas jouable et touch observé ;
|
||||||
|
- provenance `android / tauri-webview / wasm / phone / touch` ;
|
||||||
|
- pause lifecycle avant sortie.
|
||||||
|
|
||||||
|
Deux écarts ont été révélés.
|
||||||
|
|
||||||
|
Premièrement, le mode `dev` sur téléphone physique remplace automatiquement `localhost` par une adresse LAN. Le tunnel USB ADB `reverse tcp:1436 tcp:1436` associé à `cargo tauri android dev --host 127.0.0.1` rend le chargement HTTP reproductible sans dépendre du LAN.
|
||||||
|
|
||||||
|
Deuxièmement, le frontend utilisait encore un WebSocket HMR séparé sur le port `1437`. Le HTML/WASM se chargeait, mais Vite journalisait `failed to connect to websocket`. Ce défaut appartient au projet et est corrigé par ce fix : HTTP et WebSocket Vite partagent désormais le port `1436`, qui est le port tunnelé par ADB.
|
||||||
|
|
||||||
|
Enfin, le Back système sur le Galaxy S9+ de validation a provoqué pendant le teardown natif :
|
||||||
|
|
||||||
|
```text
|
||||||
|
FORTIFY: pthread_mutex_lock called on a destroyed mutex
|
||||||
|
```
|
||||||
|
|
||||||
|
L'abort arrive après `runtime paused` / `visibility hidden` et avant `pagehide` / `runtime disposed`. La gate résout Tauri `2.11.5` avec Wry `0.55.1`. Des versions Wry postérieures ont modifié le lifecycle Android et la synchronisation des request handlers, mais le projet ne force pas une version Wry incompatible derrière la pile Tauri stable ni ne patch `gen/android`. Ce crash reste une limite externe du POC à retester avec l'APK autonome de la beta.
|
||||||
|
|
||||||
|
## Changements
|
||||||
|
|
||||||
|
- version workspace : `0.3.1-0-pre.4.fix.1` ;
|
||||||
|
- WebSocket Vite/HMR fixé sur le même host de développement et le même port `1436` que HTTP ;
|
||||||
|
- suppression du port HMR séparé `1437` ;
|
||||||
|
- procédure de smoke appareil réel documentée avec tunnel ADB USB et `--host 127.0.0.1` ;
|
||||||
|
- correspondance ABI `arm64-v8a` / `aarch64-linux-android` documentée ;
|
||||||
|
- crash Back/teardown réel enregistré comme limite du POC et non comme capacité validée ;
|
||||||
|
- audit de distribution renforcé pour refuser le retour d'un second port WebSocket non tunnelé.
|
||||||
|
|
||||||
|
## Invariants
|
||||||
|
|
||||||
|
- aucun fichier sous `gen/android` n'est modifié ou livré ;
|
||||||
|
- aucun handler `onBackButtonPress` n'est ajouté pour masquer le crash de teardown ;
|
||||||
|
- aucune surcharge manuelle de Wry/Tauri n'est introduite ;
|
||||||
|
- aucun gameplay ne quitte Rust/WASM ;
|
||||||
|
- SDL3 natif reste la direction Android de production ;
|
||||||
|
- l'APK autonome de `2-beta.1` doit distinguer un défaut du mode `dev` d'un défaut général de teardown Tauri/Wry/WebView.
|
||||||
|
|
||||||
|
## Gate utilisateur
|
||||||
|
|
||||||
|
Gate statique et Rust :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export JAVA_HOME=/usr/lib/jvm/temurin-17-jdk-amd64
|
||||||
|
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
||||||
|
Smoke appareil réel, avec le `<serial>` fourni par `adb devices -l` :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
adb -s <serial> reverse --remove-all
|
||||||
|
adb -s <serial> reverse tcp:1436 tcp:1436
|
||||||
|
adb -s <serial> reverse --list
|
||||||
|
|
||||||
|
(cd crates/apps/game-snake-poc-tauri && cargo tauri android dev --host 127.0.0.1)
|
||||||
|
```
|
||||||
|
|
||||||
|
Vérifier : Canvas/inputs/assets/WASM/provenance/lifecycle et absence de l'erreur Vite `failed to connect to websocket`. Tester Back une fois et conserver le résultat ; si l'abort natif documenté reste reproductible, il n'est pas contourné dans ce fix et sera retesté sur l'APK autonome en beta.
|
||||||
|
|
||||||
|
## Suite prévue
|
||||||
|
|
||||||
|
Aucune extraction `0-pre.5` n'est justifiée. Après validation de ce fix, passer directement à `0.3.1-2-beta.1` pour la gate large, le build WASM release, le packaging APK et les smokes package AVD + ARM64 réel.
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/architecture/015-PLATFORM_POC_ARCHITECTURE.md -->
|
<!-- file: docs/architecture/015-PLATFORM_POC_ARCHITECTURE.md -->
|
||||||
<!-- version: 4 -->
|
<!-- version: 5 -->
|
||||||
|
|
||||||
# Architecture des POC plateforme et réseau
|
# Architecture des POC plateforme et réseau
|
||||||
|
|
||||||
@@ -26,6 +26,8 @@ Le host Tauri Android reste pertinent comme preuve de portabilité du gameplay R
|
|||||||
|
|
||||||
La baseline Android productive reste SDL3 natif avec wrapper Java/JNI : elle fournit déjà le rendu et les contrôles nécessaires avec moins de couches d’outillage. Tauri Android ne doit être rouvert pour un produit que lorsqu’un besoin concret apporte une valeur supérieure à ce coût, par exemple si les tests futurs démontrent un avantage net de la WebView pour une saisie texte ou une capacité UI difficile à obtenir proprement via SDL.
|
La baseline Android productive reste SDL3 natif avec wrapper Java/JNI : elle fournit déjà le rendu et les contrôles nécessaires avec moins de couches d’outillage. Tauri Android ne doit être rouvert pour un produit que lorsqu’un besoin concret apporte une valeur supérieure à ce coût, par exemple si les tests futurs démontrent un avantage net de la WebView pour une saisie texte ou une capacité UI difficile à obtenir proprement via SDL.
|
||||||
|
|
||||||
|
Le smoke ARM64 réel de `0.3.1` renforce ce positionnement : le jeu et le touch fonctionnent, mais le mode développement impose un routage `devUrl`/ADB spécifique et le Back système a exposé un abort natif pendant le teardown WebView sur l'appareil de validation. Ce défaut ne justifie pas un fork local de Tauri/Wry pour un POC non retenu comme cible Android productive ; il reste une limite documentée à comparer au package autonome.
|
||||||
|
|
||||||
Cette décision n’interdit pas Tauri Desktop. Le Desktop reste une distribution distincte et optionnelle ; sa valeur doit être démontrée séparément. À la clôture du POC Android, aucune solution de publicité ou reward vidéo dans une WebView Tauri Desktop n’est considérée comme validée. Une approche exigeant une URL Web publique, un chargement distant du jeu ou un SDK tiers spécifique doit faire l’objet d’un POC et d’une vérification contractuelle avant de rouvrir cette cible.
|
Cette décision n’interdit pas Tauri Desktop. Le Desktop reste une distribution distincte et optionnelle ; sa valeur doit être démontrée séparément. À la clôture du POC Android, aucune solution de publicité ou reward vidéo dans une WebView Tauri Desktop n’est considérée comme validée. Une approche exigeant une URL Web publique, un chargement distant du jeu ou un SDK tiers spécifique doit faire l’objet d’un POC et d’une vérification contractuelle avant de rouvrir cette cible.
|
||||||
|
|
||||||
## POC réseau
|
## POC réseau
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/plans/002-V0_3_1_TAURI_ANDROID_SNAKE_PLAN.md -->
|
<!-- file: docs/plans/002-V0_3_1_TAURI_ANDROID_SNAKE_PLAN.md -->
|
||||||
<!-- version: 7 -->
|
<!-- version: 8 -->
|
||||||
|
|
||||||
# Plan v0.3.1 — second host Snake Tauri Android
|
# Plan v0.3.1 — second host Snake Tauri Android
|
||||||
|
|
||||||
@@ -125,6 +125,10 @@ Cette tranche doit rendre le second host fonctionnel de bout en bout et suffisam
|
|||||||
|
|
||||||
État candidat `0-pre.4` : la boucle Tauri dispose maintenant de `pause/resume`, remet à zéro son accumulateur à la reprise, suit `visibilitychange`, `pagehide/pageshow` et `ResizeObserver`, et journalise les transitions via le tracing frontend. Le Back Android n’est pas intercepté : Snake conserve la politique moteur par défaut `Exit`, identique au comportement système Tauri du host mono-page. Le D-pad sous le Canvas est conservé comme limite ergonomique documentée plutôt que d’élargir cette version à un système swipe/overlay.
|
État candidat `0-pre.4` : la boucle Tauri dispose maintenant de `pause/resume`, remet à zéro son accumulateur à la reprise, suit `visibilitychange`, `pagehide/pageshow` et `ResizeObserver`, et journalise les transitions via le tracing frontend. Le Back Android n’est pas intercepté : Snake conserve la politique moteur par défaut `Exit`, identique au comportement système Tauri du host mono-page. Le D-pad sous le Canvas est conservé comme limite ergonomique documentée plutôt que d’élargir cette version à un système swipe/overlay.
|
||||||
|
|
||||||
|
La gate AVD `0-pre.4` est propre. Le smoke supplémentaire sur Galaxy S9+ ARM64 a confirmé compilation `aarch64-linux-android`, installation, Canvas, assets, WASM, touch et lifecycle visible/hidden via un tunnel ADB USB. Deux écarts ont été observés : le HMR utilisait encore un port WebSocket séparé, défaut local corrigé par `0-pre.4.fix.1`, et le Back système a déclenché un abort natif `FORTIFY: pthread_mutex_lock called on a destroyed mutex` pendant le teardown de l'Activity/WebView. Les logs placent cet abort après `visibility hidden` et avant `pagehide`, sans `runtime disposed`.
|
||||||
|
|
||||||
|
`0-pre.4.fix.1` ne tente pas de migrer manuellement Tauri/Wry ni de patcher `gen/android`. Le smoke résout `tauri 2.11.5` avec `wry 0.55.1`; les versions Wry postérieures comportent des changements Android de lifecycle et de synchronisation, mais elles ne doivent pas être forcées derrière la pile stable Tauri actuelle sans intégration upstream. Le crash Back réel reste donc une limite externe du POC à retester avec l'APK autonome `2-beta.1`.
|
||||||
|
|
||||||
### `0-pre.5` — extraction conditionnelle
|
### `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 **et** si l'extraction garde une valeur au-delà du seul POC Android de référence.
|
Créer uniquement si l'état `0-pre.4` montre une duplication réellement durable entre `Web/game-snake-poc` et le frontend Tauri **et** si l'extraction garde une valeur au-delà du seul POC Android de référence.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/validation/001-VALIDATION_GATES.md -->
|
<!-- file: docs/validation/001-VALIDATION_GATES.md -->
|
||||||
<!-- version: 9 -->
|
<!-- version: 10 -->
|
||||||
|
|
||||||
# Gates de validation
|
# Gates de validation
|
||||||
|
|
||||||
@@ -60,6 +60,16 @@ Le build Android SDL3 historique n'est pas encore une gate : le projet Gradle ex
|
|||||||
|
|
||||||
Le host Tauri Android Snake possède en revanche une gate réelle à partir de `0.3.1-0-pre.2`. Pour Tauri 2.11.x, les commandes Android utilisent le projet `gen/android` généré par la CLI officielle, sans patch local. La baseline de validation est JDK 17 avec Gradle `8.14.3` et AGP `8.11.0`. Si `gen/android` provient d'une tentative de migration différente, le supprimer puis rejouer `cargo tauri android init` sous JDK 17 avant le smoke `cargo tauri android dev`.
|
Le host Tauri Android Snake possède en revanche une gate réelle à partir de `0.3.1-0-pre.2`. Pour Tauri 2.11.x, les commandes Android utilisent le projet `gen/android` généré par la CLI officielle, sans patch local. La baseline de validation est JDK 17 avec Gradle `8.14.3` et AGP `8.11.0`. Si `gen/android` provient d'une tentative de migration différente, le supprimer puis rejouer `cargo tauri android init` sous JDK 17 avant le smoke `cargo tauri android dev`.
|
||||||
|
|
||||||
|
Sur AVD, le smoke peut utiliser le forwarding ADB géré automatiquement par Tauri. Sur appareil physique, la gate de référence utilise un tunnel USB explicite sur le port unique `1436` afin d'éviter de dépendre du LAN et de transporter à la fois HTTP et HMR :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
adb -s <serial> reverse --remove-all
|
||||||
|
adb -s <serial> reverse tcp:1436 tcp:1436
|
||||||
|
(cd crates/apps/game-snake-poc-tauri && cargo tauri android dev --host 127.0.0.1)
|
||||||
|
```
|
||||||
|
|
||||||
|
La validation réelle de `0-pre.4` a confirmé le chemin ARM64 `aarch64-linux-android`, mais a aussi observé un abort natif lors du Back/teardown WebView sur le Galaxy S9+ de validation. Tant que ce comportement n'est pas résolu upstream ou reproduit sur l'APK autonome, il est enregistré comme limite du POC et ne doit pas être masqué par une modification du scaffold `gen/android`.
|
||||||
|
|
||||||
Le host navigateur direct Snake possède désormais une gate réelle. Lorsqu'il est touché, construire d'abord l'adapter WASM et ses bindings hors dépôt, puis le frontend :
|
Le host navigateur direct Snake possède désormais une gate réelle. Lorsqu'il est touché, construire d'abord l'adapter WASM et ses bindings hors dépôt, puis le frontend :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# file: scripts/audit_distribution_layout.py
|
# file: scripts/audit_distribution_layout.py
|
||||||
# version: 13
|
# version: 14
|
||||||
|
|
||||||
"""Audit the static distribution layout expected by supported POCs."""
|
"""Audit the static distribution layout expected by supported POCs."""
|
||||||
|
|
||||||
@@ -244,6 +244,9 @@ def audit_snake_tauri_android_integration(root: pathlib.Path) -> list[str]:
|
|||||||
(game, "accumulator = 0;", "DIST-LAYOUT-066: Snake Tauri resume/pause must reset accumulated elapsed time"),
|
(game, "accumulator = 0;", "DIST-LAYOUT-066: Snake Tauri resume/pause must reset accumulated elapsed time"),
|
||||||
(vite, 'dest: "common/data", rename: { stripBase: true }', "DIST-LAYOUT-057: Snake Tauri common assets must retain the common/data namespace"),
|
(vite, 'dest: "common/data", rename: { stripBase: true }', "DIST-LAYOUT-057: Snake Tauri common assets must retain the common/data namespace"),
|
||||||
(vite, 'dest: "game/data", rename: { stripBase: true }', "DIST-LAYOUT-058: Snake Tauri game assets must retain the game/data namespace"),
|
(vite, 'dest: "game/data", rename: { stripBase: true }', "DIST-LAYOUT-058: Snake Tauri game assets must retain the game/data namespace"),
|
||||||
|
(vite, 'host: devHost || "127.0.0.1"', "DIST-LAYOUT-068: Snake Tauri HMR must use a loopback-compatible host for ADB forwarding"),
|
||||||
|
(vite, 'port: 1436,', "DIST-LAYOUT-069: Snake Tauri Vite WebSocket must share port 1436 with the dev server"),
|
||||||
|
(vite, 'clientPort: 1436,', "DIST-LAYOUT-070: Snake Tauri HMR client must use forwarded port 1436"),
|
||||||
(logging, '@fltsci/tauri-plugin-tracing', "DIST-LAYOUT-030: Snake Tauri frontend logs must use the tracing bridge"),
|
(logging, '@fltsci/tauri-plugin-tracing', "DIST-LAYOUT-030: Snake Tauri frontend logs must use the tracing bridge"),
|
||||||
(wasm_runtime, '"tauri-webview" => Some(engine_v1_platform_api::RuntimeHost::TauriWebView)', "DIST-LAYOUT-031: Snake WASM adapter must accept the Tauri WebView host"),
|
(wasm_runtime, '"tauri-webview" => Some(engine_v1_platform_api::RuntimeHost::TauriWebView)', "DIST-LAYOUT-031: Snake WASM adapter must accept the Tauri WebView host"),
|
||||||
(wasm_runtime, '"android" => Some(engine_v1_platform_api::PlatformFamily::Android)', "DIST-LAYOUT-032: Snake WASM adapter must accept Android provenance"),
|
(wasm_runtime, '"android" => Some(engine_v1_platform_api::PlatformFamily::Android)', "DIST-LAYOUT-032: Snake WASM adapter must accept Android provenance"),
|
||||||
@@ -259,6 +262,7 @@ def audit_snake_tauri_android_integration(root: pathlib.Path) -> list[str]:
|
|||||||
(main, "console.", "DIST-LAYOUT-035: Snake Tauri application frontend must not log directly through console.*"),
|
(main, "console.", "DIST-LAYOUT-035: Snake Tauri application frontend must not log directly through console.*"),
|
||||||
(main, "onbackbuttonpress", "DIST-LAYOUT-067: Snake Tauri reference POC must leave Android Back to the system while Snake quit policy is Exit"),
|
(main, "onbackbuttonpress", "DIST-LAYOUT-067: Snake Tauri reference POC must leave Android Back to the system while Snake quit policy is Exit"),
|
||||||
(lifecycle, "onbackbuttonpress", "DIST-LAYOUT-067: Snake Tauri reference POC must leave Android Back to the system while Snake quit policy is Exit"),
|
(lifecycle, "onbackbuttonpress", "DIST-LAYOUT-067: Snake Tauri reference POC must leave Android Back to the system while Snake quit policy is Exit"),
|
||||||
|
(vite, "1437", "DIST-LAYOUT-071: Snake Tauri dev/HMR must not require a second unforwarded WebSocket port"),
|
||||||
)
|
)
|
||||||
for content, fragment, message in forbidden_fragments:
|
for content, fragment, message in forbidden_fragments:
|
||||||
if fragment in content.lower():
|
if fragment in content.lower():
|
||||||
|
|||||||
Reference in New Issue
Block a user