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_docsdu build script, bloquant sous Clippy-D warnings; - résultat ignoré par le wrapper
tauri::mobile_entry_pointAndroid ; - incompatibilité du wrapper Gradle
8.14.3généré par Tauri CLI2.11.3avec 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 unResultmust_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.execdevientExecOperationsdansBuildTask.kt;- les tâches Rust ciblées utilisent
tasks.registeret reçoivent explicitementprojectDir; - 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.mdretireNDK_HOMEdes 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.pyexige désormais le hook Gradle, ses versions épinglées, la migrationExecOperationset le bridgetauri-buildcompatible 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.