From 02838a2ae36b7969db9a29e5ef02693e1c365d69 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Thu, 17 Sep 2026 11:50:52 +0200 Subject: [PATCH] 0.1.0-2-beta.1 --- Android/game-reflex-poc/build.gradle | 4 +- Android/game-snake-poc/build.gradle | 4 +- CHANGELOG.md | 11 +- Cargo.toml | 2 +- ROADMAP.md | 4 +- .../apps/game-reflex-poc-tauri/package.json | 2 +- .../game-reflex-poc-tauri/tauri.conf.json | 2 +- deltas/0.1.0/2-beta.1.md | 114 +++++++++++++++ docs/000-README.md | 3 +- docs/rules/RULES_COMMANDS.md | 9 +- docs/testing/002-BETA_VALIDATION_MATRIX.md | 130 ++++++++++++++++++ history/0.1.0/1-alpha.2.fix.5.md | 72 ++++++++++ scripts/audit_distribution_layout.py | 58 ++++++++ 13 files changed, 403 insertions(+), 12 deletions(-) create mode 100644 deltas/0.1.0/2-beta.1.md create mode 100644 docs/testing/002-BETA_VALIDATION_MATRIX.md create mode 100644 history/0.1.0/1-alpha.2.fix.5.md create mode 100644 scripts/audit_distribution_layout.py diff --git a/Android/game-reflex-poc/build.gradle b/Android/game-reflex-poc/build.gradle index 2473abf..458483b 100644 --- a/Android/game-reflex-poc/build.gradle +++ b/Android/game-reflex-poc/build.gradle @@ -1,5 +1,5 @@ // file: Android/game-reflex-poc/build.gradle -// version: 16 +// version: 17 plugins { id 'com.android.application' @@ -18,7 +18,7 @@ android { minSdk 21 targetSdk 36 versionCode 1 - versionName '0.1.0-1-alpha.2.fix.5' + versionName '0.1.0-2-beta.1' } compileOptions { diff --git a/Android/game-snake-poc/build.gradle b/Android/game-snake-poc/build.gradle index ee2f900..bcfef4b 100644 --- a/Android/game-snake-poc/build.gradle +++ b/Android/game-snake-poc/build.gradle @@ -1,5 +1,5 @@ // file: Android/game-snake-poc/build.gradle -// version: 16 +// version: 17 plugins { id 'com.android.application' @@ -18,7 +18,7 @@ android { minSdk 21 targetSdk 36 versionCode 1 - versionName '0.1.0-1-alpha.2.fix.5' + versionName '0.1.0-2-beta.1' } compileOptions { diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b382bd..8cc6720 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,17 @@ - + # Changelog +## 0.1.0-2-beta.1 — 2026-09-17 + +- validation de `1-alpha.2.fix.5` avec Reflex exécuté dans Tauri/WebView/WASM via Vite + TypeScript ; +- validation du tracing unifié Rust/TypeScript et de la sortie `Escape` via le contrat moteur commun ; +- passage en phase beta, désormais centrée sur la stabilisation, le packaging et les tests multi-appareils ; +- ajout d'une matrice de validation Desktop SDL3, Tauri/WASM, Android AVD x86_64 et Android ARM64 réel ; +- ajout d'un audit en lecture seule des frontières statiques nécessaires aux distributions ; +- formalisation des gates de packaging Desktop natif, Tauri et Android beta. + ## 0.1.0-1-alpha.1 — 2026-09-16 - validation de la fin de phase `0-pre.*` avec Snake jouable sur Desktop et Galaxy S9+ ARM64 ; diff --git a/Cargo.toml b/Cargo.toml index 6bd6cb1..e8c6484 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ members = [ ] [workspace.package] -version = "0.1.0-1-alpha.2.fix.5" +version = "0.1.0-2-beta.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/games" diff --git a/ROADMAP.md b/ROADMAP.md index f1f1369..050c16c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,5 +1,5 @@ - + # Roadmap @@ -17,7 +17,7 @@ - [x] `0-pre.10` — POC Reflex jouable Desktop + Android. - [x] `0-pre.11` — POC Snake jouable et validation de la réutilisation du moteur. - [x] `1-alpha.1` — première API moteur V1 volontairement stabilisée et provenance runtime/input pour les futures sessions et scores. -- [ ] `1-alpha.2` — POC Web/WASM embarqué dans Tauri, sans site distant, et validation de la frontière des services Web/ads. +- [x] `1-alpha.2` — POC Web/WASM embarqué dans Tauri, sans site distant, et validation de la frontière des services Web/ads. - [ ] `2-beta.1` — stabilisation, packaging, tests multi-appareils. - [ ] `3-rc.1` — candidat de release du socle 0.1.0. - [ ] `0.1.0` — première baseline stable du framework POC. diff --git a/crates/apps/game-reflex-poc-tauri/package.json b/crates/apps/game-reflex-poc-tauri/package.json index df7c9a4..dd47ad1 100644 --- a/crates/apps/game-reflex-poc-tauri/package.json +++ b/crates/apps/game-reflex-poc-tauri/package.json @@ -1,7 +1,7 @@ { "name": "game-reflex-poc-tauri", "private": true, - "version": "0.1.0-1-alpha.2.fix.5", + "version": "0.1.0-2-beta.1", "type": "module", "scripts": { "dev": "vite", diff --git a/crates/apps/game-reflex-poc-tauri/tauri.conf.json b/crates/apps/game-reflex-poc-tauri/tauri.conf.json index eefc348..20f936e 100644 --- a/crates/apps/game-reflex-poc-tauri/tauri.conf.json +++ b/crates/apps/game-reflex-poc-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Reflex POC Tauri", - "version": "0.1.0-1-alpha.2.fix.5", + "version": "0.1.0-2-beta.1", "identifier": "com.sasedev.games.reflex.tauri", "build": { "beforeDevCommand": { diff --git a/deltas/0.1.0/2-beta.1.md b/deltas/0.1.0/2-beta.1.md new file mode 100644 index 0000000..7faba82 --- /dev/null +++ b/deltas/0.1.0/2-beta.1.md @@ -0,0 +1,114 @@ + + + +# Delta 0.1.0-2-beta.1 + +## Base + +Base validée : `0.1.0-1-alpha.2.fix.5`. + +## Objectif + +Entrer en phase beta sans ajouter de nouveau gameplay. + +La priorité devient : + +- stabilisation ; +- packaging ; +- tests multi-runtimes ; +- tests multi-appareils. + +## Historique alpha + +La validation de `1-alpha.2.fix.5` est enregistrée sous : + +```text +history/0.1.0/1-alpha.2.fix.5.md +``` + +## Matrice beta + +La matrice durable est documentée dans : + +```text +docs/testing/002-BETA_VALIDATION_MATRIX.md +``` + +## Audit de distribution + +```bash +python3 scripts/audit_distribution_layout.py +``` + +## Gates statiques et Rust + +```bash +cargo fmt --all +cargo fmt --all -- --check + +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 deltas history +python3 scripts/audit_distribution_layout.py + +cargo check --workspace +cargo clippy --workspace --all-targets --all-features -- -D warnings + +cargo test --workspace --all-targets --all-features +``` + +## Build WASM + +```bash +python3 scripts/build_reflex_tauri_wasm.py +``` + +## Packaging Desktop natif + +```bash +cargo build -p game-reflex-poc-desktop --release +cargo build -p game-snake-poc-desktop --release +``` + +## Packaging Tauri + +```bash +cd crates/apps/game-reflex-poc-tauri +cargo tauri build +cd ../../.. +``` + +Ne pas lancer `npm run build` manuellement comme gate séparée. + +## Android x86_64 + +```bash +python3 scripts/build_android_rust.py reflex --abi x86_64 +python3 scripts/build_android_rust.py snake --abi x86_64 + +cd Android +gradle :game-reflex-poc:assembleDebug +gradle :game-snake-poc:assembleDebug +cd .. +``` + +Les deux APK doivent ensuite être testés sur l'AVD x86_64. + +## Android ARM64 réel + +```bash +python3 scripts/build_android_rust.py reflex --abi arm64-v8a +python3 scripts/build_android_rust.py snake --abi arm64-v8a + +cd Android +gradle :game-reflex-poc:assembleDebug +gradle :game-snake-poc:assembleDebug +cd .. +``` + +Déployer ensuite sur un appareil ARM64 réel, notamment le Galaxy S9+ déjà utilisé. + +## Transition + +Si les gates, packagings et smokes multi-appareils sont propres, `2-beta.1` pourra être validée et la roadmap passera au candidat `3-rc.1`. + +Tout défaut imputable au projet reste dans `2-beta.1.fix.N`. diff --git a/docs/000-README.md b/docs/000-README.md index fd93b5b..edef886 100644 --- a/docs/000-README.md +++ b/docs/000-README.md @@ -1,5 +1,5 @@ - + # Documentation games.sasedev @@ -49,6 +49,7 @@ Voir [`../RULES.md`](../RULES.md), notamment [`rules/RULES_COMMANDS.md`](rules/R ## Tests et diagnostics - [`testing/001-TEST_ARCHITECTURE.md`](testing/001-TEST_ARCHITECTURE.md) — séparation `unit_tests/` / `tests/`, tests ciblés et tracing de test. +- [`testing/002-BETA_VALIDATION_MATRIX.md`](testing/002-BETA_VALIDATION_MATRIX.md) — matrice beta Desktop SDL3, Tauri/WASM et Android multi-appareils. - [`development/003-TRACING_AND_DIAGNOSTICS.md`](development/003-TRACING_AND_DIAGNOSTICS.md) — socle `tracing`, subscriber et appender communs. - [`development/004-SDL3_DESKTOP_PREREQUISITES.md`](development/004-SDL3_DESKTOP_PREREQUISITES.md) — prérequis SDL3 Desktop, stratégie de liaison système et vérification `pkg-config`. - [`development/005-DESKTOP_WINDOW_POLICY.md`](development/005-DESKTOP_WINDOW_POLICY.md) — taille initiale, redimensionnement et séparation future entre fenêtre physique et résolution virtuelle. diff --git a/docs/rules/RULES_COMMANDS.md b/docs/rules/RULES_COMMANDS.md index b0152f4..8730a6c 100644 --- a/docs/rules/RULES_COMMANDS.md +++ b/docs/rules/RULES_COMMANDS.md @@ -1,5 +1,5 @@ - + # Règles d'exécution des commandes @@ -62,3 +62,10 @@ - **CMD-GIT-002** — Les fichiers générés ne sont pas commités sauf contrat explicite du dépôt ou exigence de distribution. - **CMD-WEB-005** — `npm run dev` et `npm run build` du frontend Tauri sont pilotés par les hooks Tauri ; ils ne constituent pas des gates manuelles indépendantes. + +## Beta et packaging + +- **CMD-BETA-001** — À l'entrée en beta, `scripts/audit_distribution_layout.py` vérifie les frontières statiques nécessaires aux runners et packagings supportés. +- **CMD-BETA-002** — La transition alpha vers beta exécute une suite Cargo workspace complète en plus des tests ciblés. +- **CMD-BETA-003** — Le build Tauri de packaging est lancé via `cargo tauri build`; ses hooks possèdent le build WASM et Vite/TypeScript. +- **CMD-BETA-004** — Les APK Debug servent à la validation multi-appareils beta ; la signature de publication appartient à la phase RC/stable. diff --git a/docs/testing/002-BETA_VALIDATION_MATRIX.md b/docs/testing/002-BETA_VALIDATION_MATRIX.md new file mode 100644 index 0000000..402ee4b --- /dev/null +++ b/docs/testing/002-BETA_VALIDATION_MATRIX.md @@ -0,0 +1,130 @@ + + + +# Matrice de validation beta 0.1.0 + +## Objectif + +La phase beta n'ajoute pas de nouveau gameplay. + +Elle valide la stabilité du socle existant sur les runtimes et appareils réellement supportés par `0.1.0`. + +## Desktop SDL3 natif + +Jeux : + +- Reflex ; +- Snake. + +Smokes : + +```bash +cargo run -p game-reflex-poc-desktop +cargo run -p game-snake-poc-desktop +``` + +Critères : + +- fenêtre créée ; +- rendu correct ; +- contrôles clavier/souris fonctionnels ; +- sortie propre. + +## Desktop Tauri / WASM + +Jeu POC : + +- Reflex. + +Smoke : + +```bash +cd crates/apps/game-reflex-poc-tauri +cargo tauri dev +``` + +Critères : + +- Vite démarre via le hook Tauri ; +- WASM est reconstruit via le hook Tauri ; +- rendu Reflex visible ; +- score mis à jour ; +- traces Rust et TypeScript visibles ; +- `Escape` traverse `QuitRequest` / `QuitDecision` puis ferme proprement. + +## Android x86_64 AVD + +Jeux : + +- Reflex ; +- Snake. + +Critères : + +- build Rust x86_64 ; +- assemblage APK ; +- installation ; +- démarrage ; +- tactile ; +- Back Android. + +## Android ARM64 réel + +Appareil de référence déjà utilisé : + +```text +Samsung Galaxy S9+ +arm64-v8a +``` + +La beta doit au minimum revalider Snake et, si possible, Reflex sur appareil physique. + +Le tactile physique est évalué séparément de l'AVD, car la qualité de contrôle observée peut différer fortement. + +## Provenance + +Les résultats de test conservent les dimensions de provenance pertinentes : + +```text +PlatformFamily +DeviceClass +ExecutionModel +RuntimeHost +InputProfile +``` + +Cette provenance décrit l'environnement ; elle ne décide pas automatiquement si deux scores doivent être classés ensemble. + +## Packaging Desktop natif + +```bash +cargo build -p game-reflex-poc-desktop --release +cargo build -p game-snake-poc-desktop --release +``` + +## Packaging Tauri + +Le frontend ne doit pas être construit manuellement comme gate indépendante. + +```bash +cd crates/apps/game-reflex-poc-tauri +cargo tauri build +``` + +Le hook `beforeBuildCommand` reconstruit WASM puis exécute le build Vite/TypeScript. + +## Packaging Android beta + +Pour la beta, l'APK Debug reste l'artefact de validation multi-appareils. + +La signature et le packaging de publication sont réservés à la phase RC/stable. + +## Gate lourde de phase + +La transition alpha vers beta justifie : + +```bash +cargo test --workspace --all-targets --all-features +``` + +Cette suite complète ne devient pas une gate de chaque futur correctif beta. diff --git a/history/0.1.0/1-alpha.2.fix.5.md b/history/0.1.0/1-alpha.2.fix.5.md new file mode 100644 index 0000000..6c6c6e0 --- /dev/null +++ b/history/0.1.0/1-alpha.2.fix.5.md @@ -0,0 +1,72 @@ + + + +# Historique 0.1.0-1-alpha.2.fix.5 + +## Statut + +Validé par l'utilisateur le 2026-09-17. + +## Gates Rust + +- audits Rust/workspace propres ; +- audit Markdown propre ; +- `cargo check --workspace` propre ; +- Clippy workspace strict propre ; +- `game-logging-lib` : test d'intégration propre ; +- `game-reflex-poc` : 4/4 tests ; +- `game-reflex-poc-wasm` : crate testable propre. + +## WebAssembly + +`scripts/build_reflex_tauri_wasm.py` compile la crate dédiée `game-reflex-poc-wasm` en `wasm32-unknown-unknown` puis génère les bindings `wasm-bindgen` dans le frontend Tauri. + +Le gameplay Reflex reste porté par `game-reflex-poc`. + +## Tauri / Vite / TypeScript + +Le smoke utilisateur a confirmé : + +- démarrage du runtime Tauri ; +- initialisation du tracing frontend ; +- frontend ready ; +- frontend démarré ; +- rendu Reflex fonctionnel. + +## Logging + +Les événements Rust et frontend sont visibles dans le terminal via le subscriber partagé de `game-logging-lib`. + +Événements observés : + +```text +Starting Reflex Tauri runtime +Reflex Tauri frontend tracing initialized +Reflex Tauri frontend ready +Reflex Tauri frontend started +``` + +## Sortie Escape + +Le smoke utilisateur a confirmé la chaîne : + +```text +Escape +-> ReflexWasmGame::quit_requested_escape() +-> EngineGame::quit_requested(QuitSource::Escape) +-> QuitDecision::Exit +-> close_main_window +``` + +Les événements observés confirment la décision de sortie puis la fermeture native acceptée. + +## Conclusion + +`1-alpha.2` valide la coexistence de deux runners Desktop consommant le même gameplay : + +```text +SDL3 natif +Tauri + WebView + WASM + Vite/TypeScript +``` + +La phase alpha est terminée. diff --git a/scripts/audit_distribution_layout.py b/scripts/audit_distribution_layout.py new file mode 100644 index 0000000..8706961 --- /dev/null +++ b/scripts/audit_distribution_layout.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +# file: scripts/audit_distribution_layout.py +# version: 1 + +"""Audit the static distribution layout expected by the 0.1.0 beta.""" + +from __future__ import annotations + +import argparse +import pathlib +import sys + + +REQUIRED_PATHS = ( + "crates/apps/game-reflex-poc-desktop/Cargo.toml", + "crates/apps/game-snake-poc-desktop/Cargo.toml", + "crates/apps/game-reflex-poc-tauri/Cargo.toml", + "crates/apps/game-reflex-poc-tauri/package.json", + "crates/apps/game-reflex-poc-tauri/tsconfig.json", + "crates/apps/game-reflex-poc-tauri/vite.config.ts", + "crates/apps/game-reflex-poc-tauri/tauri.conf.json", + "crates/apps/game-reflex-poc-tauri/capabilities/default.json", + "crates/apps/game-reflex-poc-tauri/icons/icon.png", + "crates/apps/game-reflex-poc-tauri/frontend/index.html", + "crates/apps/game-reflex-poc-tauri/frontend/ts/main.ts", + "crates/apps/game-reflex-poc-wasm/Cargo.toml", + "Android/game-reflex-poc/build.gradle", + "Android/game-snake-poc/build.gradle", + "scripts/build_android_rust.py", + "scripts/build_reflex_tauri_wasm.py", + "assets/common", + "assets/game-reflex-poc", + "assets/game-snake-poc", +) + + +def main() -> int: + """Validate that every static distribution boundary exists.""" + + parser = argparse.ArgumentParser() + parser.add_argument("--root", default=".", help="workspace root") + arguments = parser.parse_args() + root = pathlib.Path(arguments.root).resolve() + missing: list[str] = [] + for relative in REQUIRED_PATHS: + if not (root / relative).exists(): + missing.append(relative) + if missing: + for relative in missing: + print(f"DIST-LAYOUT-001: missing required path: {relative}", file=sys.stderr) + print(f"Distribution layout audit: {len(missing)} violation(s)", file=sys.stderr) + return 1 + print(f"Distribution layout audit: clean ({len(REQUIRED_PATHS)} required path(s))") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())