0.3.1-0-pre.2.fix.1
This commit is contained in:
181
deltas/0.3.1/0-pre.2.fix.1.md
Normal file
181
deltas/0.3.1/0-pre.2.fix.1.md
Normal file
@@ -0,0 +1,181 @@
|
||||
<!-- 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.
|
||||
Reference in New Issue
Block a user