205 lines
8.6 KiB
Markdown
205 lines
8.6 KiB
Markdown
<!-- file: deltas/0.3.3/0-pre.1.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.3.3-0-pre.1
|
|
|
|
## Base
|
|
|
|
Base autoritaire : archive fournie `games-v0.3.1.zip`, téléchargée depuis le lien ZIP du tag Gitea `v0.3.1`.
|
|
|
|
La version workspace de la base est `0.3.1`. L'archive taggée ne contient pas `.git`; aucun état Git absent n'est inventé et aucune autre branche/version n'est utilisée comme source.
|
|
|
|
`0.3.2` reste différée conformément au prompt de reprise.
|
|
|
|
## Objet
|
|
|
|
Ouvrir `0.3.3` par son gate obligatoire `0-pre.1` : audit complet de la baseline et des règles, audit du pipeline Android SDL3 natif historique, recherche officielle actuelle, choix ABI/API, cadrage APK/AAB, contrainte pages mémoire 16 KB, sizing, risques, validations et plan vivant.
|
|
|
|
Cette tranche n'introduit volontairement aucune nouvelle tâche Gradle productive et ne modifie pas le comportement Android. La réécriture du chemin de build commence seulement en `0-pre.2`.
|
|
|
|
## Version
|
|
|
|
La version workspace passe de :
|
|
|
|
```text
|
|
0.3.1
|
|
```
|
|
|
|
à :
|
|
|
|
```text
|
|
0.3.3-0-pre.1
|
|
```
|
|
|
|
Les versions npm/Tauri et `versionName` Android ne sont pas synchronisées dans cette tranche de cadrage. Les produits concernés n'ont pas encore reçu de changement de packaging et `VER-TAURI-003`/`VER-TAURI-004` interdisent une synchronisation npm cérémonielle.
|
|
|
|
## Audit de l'archive
|
|
|
|
Avant modification, l'environnement de génération a obtenu :
|
|
|
|
```text
|
|
unzip -t : no errors
|
|
General Rust rule audit: clean
|
|
Rust export completeness audit: 0 candidate(s)
|
|
games.sasedev workspace audit: clean
|
|
Markdown table audit: clean (5 table(s), 222 file(s))
|
|
Distribution layout audit: clean (48 required path(s), 1 forbidden path(s) absent)
|
|
```
|
|
|
|
Le ZIP contient 378 fichiers, aucun lien symbolique, aucun fichier vide et aucun `.git`, `target/`, `node_modules/` ou `gen/android/` généré.
|
|
|
|
La sortie utilisateur initiale sur son arbre local est également propre pour les trois audits, avec 230 fichiers Markdown et un `cargo check --workspace` réussi. Elle montre ensuite un build Tauri Android Debug universal réussi pour ARM64 et x86_64. Le compte Markdown local supérieur au ZIP taggé est compatible avec un `gen/android/` Tauri déjà présent localement ; le ZIP fourni reste la source autoritaire et aucun fichier généré n'est ajouté au delta.
|
|
|
|
## Audit des règles
|
|
|
|
La revue demandée par `prompts/004-V0_3_3_START_PROMPT.md` confirme notamment :
|
|
|
|
- `0-pre.1` doit contenir le cadrage et le plan avant le développement lourd ;
|
|
- une prerelease non-fix synchronise la version workspace ;
|
|
- un nouveau chemin de build `0.3.x` ne doit pas être piloté par Python ;
|
|
- Gradle doit posséder l'artefact Android final et les outputs générés doivent rester hors sources versionnées ;
|
|
- toute modification Rust/Cargo déclenche fmt, audit, check workspace et Clippy strict ;
|
|
- les builds, tests et smokes finaux sont attestés côté utilisateur ;
|
|
- les tests workspace complets restent des gates rares et planifiées ;
|
|
- aucun historique `history/0.3.3/0-pre.1.md` n'est créé avant validation effective de cette tranche.
|
|
|
|
Aucune contradiction bloquante n'est trouvée entre le prompt, les règles et la baseline `v0.3.1`. L'audit documentaire relève toutefois un paragraphe obsolète dans `Android/README.md`, resté au vocabulaire `0.1.0-0-pre.9` et affirmant que le NDK n'était pas encore utilisé ; cette tranche le réaligne sur la réalité stable `0.3.1` sans changer le build.
|
|
|
|
## Pipeline Android hérité
|
|
|
|
La baseline configure :
|
|
|
|
```text
|
|
AGP 9.4.0
|
|
Gradle 9.6.0 attendu
|
|
JDK 17
|
|
compileSdk 36
|
|
targetSdk 36
|
|
minSdk 21
|
|
NDK 28.2.13676358 / r28c
|
|
SDL3 AAR 3.4.16
|
|
```
|
|
|
|
`scripts/build_android_rust.py` réalise aujourd'hui l'extraction/linkage SDL3 par ABI, la résolution NDK, `cargo ndk`, la sélection d'une unique feature jeu, le staging dans `src/main/jniLibs` et la vérification de `libgame_android_entrypoint.so`.
|
|
|
|
Ces responsabilités doivent être transposées dans la logique Gradle commune, avec outputs sous `build/generated/...`, avant suppression du script.
|
|
|
|
## Recherche et décisions 0-pre.1
|
|
|
|
Les sources officielles actuelles confirment :
|
|
|
|
- AGP 9.4.0 : Gradle 9.6.0, JDK 17 et NDK par défaut `28.2.13676358` ;
|
|
- SDL3 Android actuel : SDK 35+, NDK r28c+ et API minimale 21 ;
|
|
- SDL3 3.4.16 : release stable actuelle de la baseline ;
|
|
- Google Play : API 36+ requise depuis le 31 août 2026 pour nouvelles apps/mises à jour téléphone/tablette ;
|
|
- application native ciblant API 35+ : compatibilité pages mémoire 16 KB à assurer ; NDK r28+ produit l'alignement 16 KB par défaut ;
|
|
- AAB : format de distribution, dont le store dérive des APK optimisés, notamment par ABI.
|
|
|
|
Les choix retenus sont donc :
|
|
|
|
```text
|
|
minSdk candidat 21
|
|
ABI par défaut arm64-v8a + x86_64
|
|
armeabi-v7a différée
|
|
APK local universal multi-ABI
|
|
AAB distribution
|
|
splits ABI non par défaut
|
|
NDK natif r28c épinglé, distinct du NDK 30 observé dans le POC Tauri
|
|
```
|
|
|
|
Le détail, les sources et les risques sont consignés dans `docs/studies/025-V0_3_3_ANDROID_NATIVE_MULTI_ABI_AUDIT.md`.
|
|
|
|
## Plan créé
|
|
|
|
`docs/plans/003-V0_3_3_ANDROID_NATIVE_MULTI_ABI_PLAN.md` devient le plan actif avec le forecast révisé :
|
|
|
|
```text
|
|
0-pre.1 audit / règles / ABI-API / minSdk / APK-AAB / 16 KB / plan
|
|
0-pre.2 ownership Gradle/Cargo Snake sur arm64-v8a + wrapper Gradle
|
|
0-pre.3 arm64-v8a + x86_64 + APK universal + Reflex si factorisation naturelle
|
|
0-pre.4 AAB + minSdk/smokes + 16 KB + fermeture du script Python historique
|
|
2-beta.1 validation large + packaging final
|
|
3-rc.1 gel + reproductibilité + consolidation documentaire
|
|
0.3.3 promotion mécanique stable
|
|
```
|
|
|
|
Le scope reste compatible avec une seule version/session tant qu'aucune incompatibilité structurante de Gradle/cargo-ndk/SDL3 n'est découverte.
|
|
|
|
## Fichiers
|
|
|
|
Ajoutés :
|
|
|
|
```text
|
|
docs/plans/003-V0_3_3_ANDROID_NATIVE_MULTI_ABI_PLAN.md
|
|
docs/studies/025-V0_3_3_ANDROID_NATIVE_MULTI_ABI_AUDIT.md
|
|
deltas/0.3.3/0-pre.1.md
|
|
```
|
|
|
|
Modifiés :
|
|
|
|
```text
|
|
Android/README.md
|
|
Cargo.toml
|
|
README.md
|
|
docs/000-README.md
|
|
docs/plans/000-README.md
|
|
docs/studies/000-README.md
|
|
```
|
|
|
|
Aucun fichier Gradle, Rust source, règle normative, roadmap, changelog ou historique n'est modifié dans ce cadrage. `Android/README.md` reçoit uniquement la correction documentaire de baseline décrite ci-dessus.
|
|
|
|
## Validations exécutées dans l'environnement de génération
|
|
|
|
Après constitution de l'état livré, exécuter uniquement les audits statiques autorisés au générateur :
|
|
|
|
```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
|
|
```
|
|
|
|
Aucun build Cargo/Gradle, test ou smoke final n'est attribué au générateur.
|
|
|
|
## Validation utilisateur demandée
|
|
|
|
Le manifest workspace change de version ; la gate minimale est donc :
|
|
|
|
```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
|
|
```
|
|
|
|
Aucun test workspace complet n'est demandé : cette tranche ne change aucun code Rust, comportement, dépendance ou configuration Android productive.
|
|
|
|
La première gate du prompt `004` demande également l'inventaire frais qui conditionne `0-pre.2` :
|
|
|
|
```bash
|
|
rustc --version
|
|
cargo --version
|
|
cargo ndk --version
|
|
rustup target list --installed
|
|
java -version
|
|
printf 'JAVA_HOME=%s\nANDROID_HOME=%s\n' "$JAVA_HOME" "$ANDROID_HOME"
|
|
adb version
|
|
adb devices -l
|
|
emulator -list-avds
|
|
(cd Android && gradle --version)
|
|
printf 'configured NDK: '; sed -n 's/^androidNdkVersion=//p' Android/gradle.properties
|
|
ls -ld "$ANDROID_HOME/ndk/28.2.13676358"
|
|
test -f Android/libs/SDL3-3.4.16.aar && sha256sum Android/libs/SDL3-3.4.16.aar
|
|
```
|
|
|
|
La sortie déjà fournie confirme JDK 17 sélectionné via `JAVA_HOME`, les targets Tauri ARM64/x86_64 suffisamment opérationnelles pour produire un APK universal et un NDK 30 utilisé par Tauri. Elle ne remplace pas l'inventaire du pipeline Android natif ci-dessus.
|
|
|
|
## Suite après validation
|
|
|
|
Si la gate est propre, la tranche suivante crée `history/0.3.3/0-pre.1.md` avec les sorties réellement obtenues puis ouvre `0.3.3-0-pre.2`.
|
|
|
|
`0-pre.2` doit d'abord introduire le Gradle Wrapper et prouver sur Snake/ARM64 que `:game-snake-poc:assembleDebug` déclenche lui-même le build Rust/SDL3 sans `scripts/build_android_rust.py`. Une défaillance de la gate ou une erreur du cadrage produit d'abord `0-pre.1.fix.N`.
|