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

123 lines
5.7 KiB
Markdown

<!-- file: deltas/0.3.1/0-pre.2.fix.2.md -->
<!-- version: 1 -->
# Delta 0.3.1-0-pre.2.fix.2
## Base
Base déclarée : `0.3.1-0-pre.2.fix.1`.
## Objet
Ce fix retire la migration Gradle 9 locale introduite par `fix.1`, revient au chemin Android officiellement généré par Tauri 2 stable et corrige l'audit workspace pour qu'il n'analyse pas le contenu généré sous `gen/` comme du code source du dépôt.
Il corrige également une violation documentaire de `fix.1` : `history/0.3.1/0-pre.2.md` avait été créé alors que `0-pre.2` n'était pas accepté. Aucune entrée `history/` n'est conservée pour ce jalon tant que sa gate n'est pas verte.
## Cause confirmée
Le smoke `0-pre.2` a établi trois faits distincts :
- Tauri sélectionne correctement le NDK side-by-side sous `$ANDROID_HOME/ndk/<version>` ; l'absence de `NDK_HOME` utilisateur n'est pas la cause du défaut ;
- le wrapper Android généré par Tauri CLI `2.11.3` utilise Gradle `8.14.3`, qui ne peut pas s'exécuter avec Java 25 ;
- `cargo tauri android init` crée légitimement `gen/android/app/src/main/assets`, mais l'audit `GAME-ASSET-001` parcourait jusque-là les répertoires générés.
La dernière CLI Tauri 2 stable vérifiée pendant ce fix est `2.11.5`. Son template Android conserve Gradle `8.14.3` et AGP `8.11.0`. La migration Gradle 9 existe upstream mais n'est pas encore publiée dans la branche stable Tauri 2 ; la reproduire par patch local ferait du projet games.sasedev le mainteneur d'un fork implicite du template Tauri.
## Correction Tauri Android
Le host Snake ne modifie plus `gen/android` :
- suppression de `scripts/prepare-android-gradle.mjs` ;
- suppression du hook `android:prepare` dans `package.json` ;
- restauration des hooks Tauri vers le seul pipeline WASM/Vite ;
- `build.rs` délègue uniquement à `tauri_build::build()` ;
- l'audit de distribution interdit désormais la réintroduction d'un patch `gen/android` dans ces deux surfaces.
Pour Tauri 2 stable, le contrat local devient celui recommandé par Tauri : `JAVA_HOME` doit pointer vers un JDK compatible avec le wrapper généré, de préférence le JBR livré avec Android Studio. Le Java 25 global peut rester installé ; il ne doit simplement pas être le JDK utilisé par les commandes Android Tauri tant que le wrapper stable ne le supporte pas.
Le Gradle global installé sous `/opt/gradle` n'est pas utilisé par `gen/android/gradlew` et n'entre pas dans le contrat de build.
## Correction de l'audit workspace
`gen/` est déjà un chemin généré et ignoré par `.gitignore`. `audit_project_workspace_rules.py` exclut désormais ces arbres pour les contrôles qui portent sur la propriété du code source :
- `GAME-ASSET-001` n'interdit plus les `assets` créés par le projet Android Tauri généré ;
- `GAME-ANDROID-001` n'interdit plus les éventuelles sources Java générées sous `gen/`.
Les assets et sources Java réellement versionnés hors des emplacements autorisés restent interdits.
## Historique
`history/0.3.1/0-pre.2.md` est supprimé. `DOC-HIST-002` et `DOC-HIST-003` imposent qu'une entrée d'historique ne soit créée qu'après acceptation effective du jalon. Le prochain delta ne recréera cette entrée que si la gate `0-pre.2.fix.2` est validée.
## Suppressions
Le manifest `deltas/0.3.1/0-pre.2.fix.2.delete.txt` supprime :
- `crates/apps/game-snake-poc-tauri/scripts/prepare-android-gradle.mjs` ;
- `history/0.3.1/0-pre.2.md`.
Après extraction du delta à la racine du dépôt, appliquer les suppressions avec :
```bash
while IFS= read -r path; do
rm -f -- "$path"
done < deltas/0.3.1/0-pre.2.fix.2.delete.txt
```
## Fichiers modifiés
- `Cargo.toml` ;
- `README.md` ;
- `crates/apps/game-snake-poc-tauri/build.rs` ;
- `crates/apps/game-snake-poc-tauri/package.json` ;
- `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` ;
- `scripts/audit_project_workspace_rules.py` ;
- `scripts/audit_distribution_layout.py`.
## Fichiers ajoutés
- `deltas/0.3.1/0-pre.2.fix.2.md` ;
- `deltas/0.3.1/0-pre.2.fix.2.delete.txt`.
## Validation statique du générateur
Le générateur peut exécuter les audits statiques et vérifier explicitement que les chemins générés Tauri ne déclenchent plus `GAME-ASSET-001` / `GAME-ANDROID-001`. Ces contrôles ne remplacent pas les gates build/runtime utilisateur.
## Gate utilisateur
Après application du delta et de son manifest de suppression :
```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
```
Avant le smoke Android, sélectionner le JBR d'Android Studio dans le shell. Exemple si Android Studio est sous `/opt/android-studio` :
```bash
export JAVA_HOME=/opt/android-studio/jbr
"$JAVA_HOME/bin/java" -version
(cd crates/apps/game-snake-poc-tauri && cargo tauri android dev)
```
Si Android Studio se trouve ailleurs, remplacer `/opt/android-studio/jbr` par son chemin réel. Ne pas exécuter `npm run dev` directement et ne pas rejouer `cargo tauri android init` pour ce fix lorsque `gen/android` existe déjà.
## Critère d'acceptation
Le fix est accepté lorsque :
- les trois audits Python sont propres malgré la présence du `gen/android` local ;
- Cargo/Clippy/tests ciblés sont propres ;
- `cargo tauri android dev` n'échoue plus sur `Unsupported class file major version 69` ;
- le host minimal atteint le smoke Android prévu par `0-pre.2`.