0.1.0-2-beta.1

This commit is contained in:
2026-09-17 11:50:52 +02:00
parent 019fa2ac3d
commit 02838a2ae3
13 changed files with 403 additions and 12 deletions

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -1,8 +1,17 @@
<!-- file: CHANGELOG.md -->
<!-- version: 5 -->
<!-- version: 6 -->
# 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 ;

View File

@@ -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"

View File

@@ -1,5 +1,5 @@
<!-- file: ROADMAP.md -->
<!-- version: 11 -->
<!-- version: 12 -->
# 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.

View File

@@ -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",

View File

@@ -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": {

114
deltas/0.1.0/2-beta.1.md Normal file
View File

@@ -0,0 +1,114 @@
<!-- file: deltas/0.1.0/2-beta.1.md -->
<!-- version: 1 -->
# 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`.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/000-README.md -->
<!-- version: 15 -->
<!-- version: 16 -->
# 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.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/rules/RULES_COMMANDS.md -->
<!-- version: 6 -->
<!-- version: 7 -->
# 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.

View File

@@ -0,0 +1,130 @@
<!-- file: docs/testing/002-BETA_VALIDATION_MATRIX.md -->
<!-- version: 1 -->
# 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.

View File

@@ -0,0 +1,72 @@
<!-- file: history/0.1.0/1-alpha.2.fix.5.md -->
<!-- version: 1 -->
# 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.

View File

@@ -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())