Files
games/deltas/0.3.3/0-pre.1.md
2026-09-21 08:39:57 +02:00

8.6 KiB

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 :

0.3.1

à :

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 :

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 :

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 :

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é :

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 :

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 :

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 :

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 :

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 :

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.