182 lines
6.4 KiB
Markdown
182 lines
6.4 KiB
Markdown
<!-- file: deltas/0.3.1/0-pre.2.fix.1.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# 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 à :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
val implementation by configurations
|
|
```
|
|
|
|
vers :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
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
|
|
|
|
```text
|
|
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 :
|
|
|
|
```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 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 :
|
|
|
|
```bash
|
|
(cd crates/apps/game-snake-poc-tauri && cargo tauri android dev)
|
|
```
|
|
|
|
Le hook doit afficher avant le build Android :
|
|
|
|
```text
|
|
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.
|