Files
games/deltas/0.3.1/0-pre.2.fix.1.md

6.4 KiB

Delta 0.3.1-0-pre.2.fix.1

Base requise

0.3.1-0-pre.2.

Le delta 0-pre.2.md reste immuable. La gate utilisateur du 2026-09-20 est consignée dans history/0.3.1/0-pre.2.md.

Objectif

Corriger uniquement les défauts qui empêchent la gate de 0-pre.2 :

  • warning missing_docs du build script, bloquant sous Clippy -D warnings ;
  • résultat ignoré par le wrapper tauri::mobile_entry_point Android ;
  • incompatibilité du wrapper Gradle 8.14.3 généré par Tauri CLI 2.11.3 avec Java 25.

Le scope fonctionnel de 0-pre.2 ne change pas. Canvas, contrôles, assets et lifecycle restent réservés aux tranches suivantes.

Version technique

Le correctif touche du code Rust et le chemin de build Tauri/Android. La version workspace passe donc à :

0.3.1-0-pre.2.fix.1

La version frontend locale de package.json reste 0.1.0 conformément à VER-TAURI-003 et VER-TAURI-004.

Correction Rust

build.rs possède désormais une rustdoc de crate et reste conforme aux règles Rust du workspace.

Le point d'entrée est séparé en deux niveaux :

  • run_runtime() -> Result<(), String> possède l'exécution réelle ;
  • le host non mobile conserve run() -> Result<(), String> ;
  • le host mobile expose #[tauri::mobile_entry_point] pub fn run() et traite explicitement l'erreur éventuelle au lieu de laisser le macro ignorer un Result must_use.

Le comportement fonctionnel Tauri n'est pas modifié.

Correction Gradle 9

Le log utilisateur confirme que Tauri sélectionne lui-même le NDK installé sous $ANDROID_HOME/ndk/30.0.14904198 puis injecte NDK_HOME dans son sous-processus. NDK_HOME n'est donc pas ajouté comme prérequis utilisateur.

Le défaut réel est :

Tauri CLI 2.11.3 -> gen/android/gradlew -> Gradle 8.14.3 -> Java 25
Unsupported class file major version 69

Le Gradle global de la machine n'est pas consommé par ce chemin ; modifier uniquement le PATH ne corrige donc pas le wrapper Tauri.

Le fix ajoute crates/apps/game-snake-poc-tauri/scripts/prepare-android-gradle.mjs. Avant chaque hook dev/build, ce script adapte idempotemment le projet généré gen/android vers la combinaison déjà adoptée par la migration Android upstream de Tauri :

Gradle 9.6.1
Android Gradle Plugin 9.3.1
Kotlin Gradle Plugin 2.2.10

Il adapte aussi les ruptures Gradle 9 pertinentes du scaffold Tauri 2.11.x :

  • Project.exec devient ExecOperations dans BuildTask.kt ;
  • les tâches Rust ciblées utilisent tasks.register et reçoivent explicitement projectDir ;
  • le DSL Android/Kotlin de l'application est aligné sur le template Gradle 9 upstream ;
  • les propriétés de compatibilité AGP 9 sont ajoutées ;
  • les anciennes propriétés Android devenues des defaults sont retirées.

Le script est local à la crate Tauri et ne modifie ni le Gradle global ni le cache Cargo.

Bridge généré par tauri-build

tauri-build 2.6.3 régénère gen/android/app/tauri.build.gradle.kts pendant la compilation Rust, donc un patch effectué uniquement avant Cargo serait écrasé.

build.rs applique par conséquent, immédiatement après tauri_build::build(), la migration :

val implementation by configurations

vers :

val implementation = configurations.getByName("implementation")

lorsque le fichier Android généré existe. Le build script reste un no-op pour ce point lors des checks hôte sans gen/android.

Hooks Tauri

package.json conserve Tauri comme propriétaire du pipeline :

cargo tauri android dev
  -> beforeDevCommand
  -> npm run dev
  -> android:prepare
  -> WASM
  -> Vite

et de même pour beforeBuildCommand.

npm run dev et npm run build ne deviennent pas des gates manuelles.

Documentation et garde-fous

  • USAGE.md retire NDK_HOME des prérequis utilisateur et explique la migration Gradle 9 ;
  • le plan vivant enregistre le défaut et le fix sans ouvrir 0-pre.3 ;
  • audit_distribution_layout.py exige désormais le hook Gradle, ses versions épinglées, la migration ExecOperations et le bridge tauri-build compatible Gradle 9 ;
  • le test synthétique du script Node a été exécuté deux fois sur le même fixture pour vérifier son idempotence.

Fichiers ajoutés

crates/apps/game-snake-poc-tauri/scripts/prepare-android-gradle.mjs
history/0.3.1/0-pre.2.md
deltas/0.3.1/0-pre.2.fix.1.md

Fichiers modifiés

Cargo.toml
README.md
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/package.json
crates/apps/game-snake-poc-tauri/src/tauri.rs
docs/plans/002-V0_3_1_TAURI_ANDROID_SNAKE_PLAN.md
scripts/audit_distribution_layout.py

Suppressions

Aucune.

Validation générateur

Les contrôles statiques applicables sont exécutés sur l'état livré. Les commandes Cargo/npm/Tauri/Gradle restent à exécuter côté utilisateur conformément à CMD-GEN-007 et CMD-BUILD-005.

Gate utilisateur

Depuis la racine :

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 build Web direct était déjà propre dans la gate 0-pre.2 et aucune de ses sources n'est modifiée par ce fix ; il n'est pas nécessaire de répéter sa gate pour ce correctif borné.

Le projet Android généré existe déjà chez l'utilisateur. Ne pas rejouer cargo tauri android init. Relancer directement :

(cd crates/apps/game-snake-poc-tauri && cargo tauri android dev)

Le hook doit afficher avant le build Android :

Prepared Tauri Android Gradle 9.6.1 / AGP 9.3.1 / Kotlin 2.2.10.

Puis le wrapper doit utiliser Gradle 9.6.1 au lieu de 8.14.3. Le smoke reste celui de 0-pre.2 : démarrage sur l'appareil/AVD, bridge Rust, chargement WASM, provenance android / tauri-webview / wasm / unknown / unknown et tracing sans erreur bloquante.

Suite

Si cette gate est propre, 0-pre.2 est considéré réparé et la progression reprend sur 0.3.1-0-pre.3 conformément au plan vivant.