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

129 lines
4.7 KiB
Markdown

<!-- file: deltas/0.3.1/0-pre.2.fix.3.md -->
<!-- version: 1 -->
# Delta 0.3.1-0-pre.2.fix.3
## Base
Base déclarée : `0.3.1-0-pre.2.fix.2`.
## Objet
Ce fix corrige la procédure Android après constat que le répertoire local `gen/android` avait été partiellement modifié par la tentative Gradle 9 abandonnée de `0-pre.2.fix.1`.
Aucun patch du projet Android généré n'est réintroduit. Le fix verrouille au contraire le contrat officiel Tauri 2.11.x et rend détectable tout `gen/android` local qui ne correspond plus à ce contrat.
## Diagnostic confirmé
Le smoke `0-pre.2.fix.2` a confirmé :
- les audits Python, Cargo, Clippy et les cinq tests `game-snake-poc-wasm` sont propres ;
- le NDK side-by-side est détecté sans `NDK_HOME` utilisateur ;
- le JBR de l'Android Studio local est Java 25, comme le Java global ;
- `gen/android/gradle/wrapper/gradle-wrapper.properties` utilisait encore Gradle `9.6.1`, trace de `fix.1` ;
- `buildSrc` restait partiellement au format Tauri 2.11.x et échouait donc sous Gradle 9 sur les appels `project.exec`/`exec`.
Le défaut n'est pas dans le host Rust/WASM : l'arbre Android généré local est incohérent et doit être régénéré.
## Toolchain Android retenu pour 0.3.1
Le projet conserve le template officiel Tauri 2.11.x :
```text
Gradle 8.14.3
Android Gradle Plugin 8.11.0
Kotlin Gradle Plugin 1.9.25
JDK de gate 17
```
AGP 8.11 exige JDK 17 au minimum et Gradle 8.14.x prend en charge l'exécution jusqu'à Java 24, pas Java 25. JDK 17 est donc la baseline reproductible retenue pour cette version.
Le Java 25 global et le JBR 25 d'Android Studio restent installables mais ne sont pas utilisés pour `cargo tauri android init/dev/build` dans `0.3.1`.
## Régénération obligatoire du projet Android local
Toute machine ayant exécuté `0-pre.2.fix.1` doit supprimer uniquement l'arbre généré Android Snake puis le recréer officiellement :
```bash
rm -rf crates/apps/game-snake-poc-tauri/gen/android
export JAVA_HOME=/chemin/vers/jdk-17
"$JAVA_HOME/bin/java" -version
(cd crates/apps/game-snake-poc-tauri && cargo tauri android init)
```
Le répertoire `gen/android` est ignoré et n'appartient à aucun delta. Sa suppression n'est donc pas un changement source.
## Audit ajouté
`audit_distribution_layout.py` vérifie désormais un `gen/android` présent sans le considérer comme source versionnée. Pour la tranche courante, il doit contenir les marqueurs du template Tauri 2.11.x : Gradle `8.14.3`, AGP `8.11.0` et Kotlin Gradle Plugin `1.9.25`.
Un arbre incomplet ou divergent provoque `DIST-LAYOUT-041/042` avec instruction de le supprimer puis de relancer `cargo tauri android init` sous JDK 17.
## Fichiers modifiés
- `Cargo.toml` ;
- `README.md` ;
- `crates/apps/game-snake-poc-tauri/README.md` ;
- `crates/apps/game-snake-poc-tauri/USAGE.md` ;
- `docs/plans/002-V0_3_1_TAURI_ANDROID_SNAKE_PLAN.md` ;
- `docs/validation/001-VALIDATION_GATES.md` ;
- `scripts/audit_distribution_layout.py`.
## Fichier ajouté
- `deltas/0.3.1/0-pre.2.fix.3.md`.
## Gate utilisateur
Après application du delta, commencer par disposer d'un JDK 17. Vérifier les JDK déjà installés avant d'en installer un nouveau :
```bash
find /usr/lib/jvm "$HOME/.jdks" "$HOME/.sdkman/candidates/java" -maxdepth 3 -type f -path '*/bin/java' 2>/dev/null
```
Sélectionner ensuite le JDK 17 réel :
```bash
export JAVA_HOME=/chemin/vers/jdk-17
"$JAVA_HOME/bin/java" -version
```
Nettoyer l'arbre Android pollué par `fix.1`, puis le régénérer avec Tauri :
```bash
rm -rf crates/apps/game-snake-poc-tauri/gen/android
(cd crates/apps/game-snake-poc-tauri && cargo tauri android init)
```
Rejouer ensuite la gate statique/build :
```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
```
Puis le smoke Android :
```bash
(cd crates/apps/game-snake-poc-tauri && cargo tauri android dev)
```
Ne pas exécuter `npm run dev` directement et ne modifier aucun fichier sous `gen/android` à la main.
## Critère d'acceptation
Le fix est accepté lorsque :
- les audits et gates Rust restent propres ;
- `audit_distribution_layout.py` accepte le `gen/android` fraîchement généré ;
- `gen/android/gradle/wrapper/gradle-wrapper.properties` référence Gradle `8.14.3` ;
- la commande Android utilise JDK 17 ;
- `cargo tauri android dev` assemble, installe et lance le host minimal sans erreur Gradle/Kotlin bloquante.