# Delta 0.1.0-0-pre.8 ## Base Base validée : `0.1.0-0-pre.7.fix.1`. ## Validation du delta précédent `0.1.0-0-pre.7.fix.1` a été validée le 2026-09-16. Les gates légères, les deux builds Rust Android, la présence des bibliothèques natives et les deux builds APK sont propres. `adb` est installé et fonctionnel, mais aucun appareil ou émulateur n'était attaché. Le smoke runtime Android n'était donc pas requis pour accepter ce jalon. ## Objectifs - introduire un input tactile portable dans le moteur ; - utiliser les événements SDL3 Android plutôt qu'un bridge JNI pour les touch events ; - rendre le bridge Java/JNI minimal réellement vérifiable ; - conserver une exception FFI Rust strictement bornée. ## Input tactile `engine-v1-common` introduit `PointerState` : - état actif/inactif ; - coordonnées normalisées `x` et `y` ; - bornage dans `[0.0, 1.0]`. `InputState` transporte désormais ce pointeur. `engine-v1-sdl` maintient l'état tactile entre les frames : - `FingerDown` et `FingerMotion` activent/mettent à jour le pointeur ; - `FingerUp` et `FingerCanceled` le désactivent ; - un pointeur actif active également `GameAction::Primary` dans cette baseline. ## Bridge Java/JNI `NativeBridge` expose : ```java public static native int nativeContractVersion(); ``` La bibliothèque Rust exporte le symbole JNI correspondant et retourne `1`. `SaseGameActivity.onCreate()` appelle `NativeBridge.requireCompatibleContract()` après l'initialisation SDL. Le bridge est ainsi réellement vérifié au premier lancement Android disponible. ## Exception FFI L'exception Rust du crate `game-android-entrypoint` autorise désormais exactement deux exports : - `SDL_main` ; - `Java_com_sasedev_games_common_NativeBridge_nativeContractVersion`. Les blocs `unsafe`, fonctions `unsafe`, déréférencements de pointeurs bruts et autres attributs unsafe restent interdits. ## Validation Rust à exécuter Le delta modifie du Rust : ```bash cargo fmt --all cargo fmt --all -- --check 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 deltas history cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings ``` Tests ciblés : ```bash cargo test -p engine-v1-common --all-targets --all-features cargo test -p engine-v1-sdl --all-targets --all-features cargo test -p game-android-entrypoint --no-default-features ``` ## Validation Android Reconstruire les bibliothèques natives : ```bash python3 scripts/build_android_rust.py reflex python3 scripts/build_android_rust.py snake ``` Puis les APK : ```bash cd Android gradle :game-reflex-poc:assembleDebug gradle :game-snake-poc:assembleDebug cd .. ``` ## Smoke appareil Si un appareil ou émulateur est attaché : ```bash adb devices ``` installer puis lancer les deux applications. Critères supplémentaires de ce delta : - aucun `UnsatisfiedLinkError` sur `NativeBridge.nativeContractVersion` ; - aucune erreur de contrat JNI ; - un contact tactile ne provoque aucun crash ; - SDL3 continue à recevoir les événements tactiles. Si aucun device n'est disponible, les builds peuvent valider le delta mais le smoke runtime reste explicitement en attente dans l'historique. ## Règle de transition Si les gates Rust et Android sont propres, passer automatiquement à `0.1.0-0-pre.9`. En cas d'échec imputable au projet, produire `0.1.0-0-pre.8.fix.1`.