0.3.0-0-pre.3

This commit is contained in:
2026-09-20 07:03:34 +02:00
parent a6a59222d6
commit c7ccf57723
14 changed files with 486 additions and 21 deletions

118
deltas/0.3.0/0-pre.3.md Normal file
View File

@@ -0,0 +1,118 @@
<!-- file: deltas/0.3.0/0-pre.3.md -->
<!-- version: 1 -->
# Delta 0.3.0-0-pre.3
## Base
Base requise : `0.3.0-0-pre.2`.
La validation complète de `0-pre.2` est consignée dans `history/0.3.0/0-pre.2.md`.
## Objet
Introduire l'adapter WASM minimal de Snake avant tout frontend navigateur :
- ajouter `game-snake-poc-wasm` comme crate d'application dédiée ;
- réutiliser exclusivement `engine-v1-common` et `game-snake-poc` ;
- exposer à `wasm-bindgen` les directions logiques et la scène portable ;
- préserver la cadence de simulation en séparant événement d'entrée et `tick()` ;
- documenter un chemin Cargo + `wasm-bindgen` direct sans orchestrateur Python ;
- ne pas introduire Vite, Bootstrap, DOM, Tauri ou SDL3 dans cette tranche.
## Version
La version workspace passe de `0.3.0-0-pre.2` à `0.3.0-0-pre.3`.
## Adapter Snake WASM
La nouvelle crate `crates/apps/game-snake-poc-wasm` contient une façade `lib.rs` et un runtime propriétaire séparé.
`SnakeWasmGame` possède :
- un `SnakeState` issu de la crate de gameplay ;
- un `FixedStepRunner` à pas déterministe de 16 ms ;
- un `InputState` en attente pour la prochaine update.
Les appels `left()`, `right()`, `up()` et `down()` ne font pas avancer la simulation. Ils remplacent la direction logique en attente. `tick()` consomme ensuite cette entrée une fois, la remet à zéro et avance le runner d'une update. La cadence reste ainsi sous la responsabilité du futur host navigateur.
L'API expose également le score, la longueur, la couleur de fond et les rectangles normalisés de l'`EngineScene`. Le futur frontend `0-pre.4` peut donc dessiner le Canvas sans accéder à la structure interne de Snake.
## Frontières conservées
`game-snake-poc-wasm` ne dépend pas de :
- `engine-v1-platform-api` ;
- `engine-v1-sdl` ;
- Tauri ;
- DOM/Canvas Rust ;
- code frontend TypeScript.
La duplication limitée des getters de scène avec `game-reflex-poc-wasm` est volontairement conservée à ce stade. Une abstraction commune ne sera extraite que si les POC suivants démontrent un besoin partagé suffisamment stable.
## Documentation et audits
L'architecture du workspace mentionne désormais l'adapter Snake WASM et le contrat d'entrée précise la file directionnelle consommée par `tick()`.
L'audit de distribution exige maintenant `crates/apps/game-snake-poc-wasm/Cargo.toml`, portant le nombre de chemins requis de 19 à 20.
Le plan actif est réconcilié avec la livraison réelle de `0-pre.3`. `docs/development/009-SNAKE_WEB_WASM_BUILD.md` documente le build natif Cargo + `wasm-bindgen`, avec tous les artefacts générés sous `../builds/sasedev-games/`.
## Historique
Ajout de `history/0.3.0/0-pre.2.md` avec les résultats réellement fournis par l'utilisateur : audits, formatage, check workspace, Clippy workspace strict, tests Snake/Reflex et graphes de dépendances.
## Fichiers ajoutés
- `crates/apps/game-snake-poc-wasm/Cargo.toml` ;
- `crates/apps/game-snake-poc-wasm/src/lib.rs` ;
- `crates/apps/game-snake-poc-wasm/src/runtime.rs` ;
- `crates/apps/game-snake-poc-wasm/unit_tests/runtime.rs` ;
- `deltas/0.3.0/0-pre.3.md` ;
- `docs/development/009-SNAKE_WEB_WASM_BUILD.md` ;
- `history/0.3.0/0-pre.2.md`.
## Fichiers modifiés
- `Cargo.toml` ;
- `README.md` ;
- `docs/architecture/001-WORKSPACE_ARCHITECTURE.md` ;
- `docs/000-README.md` ;
- `docs/architecture/004-INPUT_AND_CONTROLS.md` ;
- `docs/plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md` ;
- `scripts/audit_distribution_layout.py`.
## Suppressions
Aucune.
## Validations applicables
Audits statiques de préparation :
```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 deltas history
python3 scripts/audit_distribution_layout.py
```
Validation utilisateur demandée :
```bash
cargo fmt --all
cargo fmt --all -- --check
cargo check --workspace
cargo clippy -p game-snake-poc-wasm --all-targets --all-features -- -D warnings
cargo test -p game-snake-poc-wasm
cargo build -p game-snake-poc-wasm --target wasm32-unknown-unknown
wasm-bindgen ../builds/sasedev-games/target/wasm32-unknown-unknown/debug/game_snake_poc_wasm.wasm --target web --out-dir ../builds/sasedev-games/game-snake-poc-web/wasm --out-name game_snake_poc_wasm
cargo tree -p game-snake-poc-wasm --edges normal
```
Le `cargo tree` doit rester limité à `engine-v1-common`, `game-snake-poc`, `wasm-bindgen` et leurs dépendances nécessaires ; aucune dépendance SDL3, Tauri ou `engine-v1-platform-api` ne doit apparaître.
La commande `wasm-bindgen` doit produire les bindings navigateur sans écrire d'artefact généré dans le dépôt. Aucun build Vite/Bootstrap et aucun smoke navigateur ne sont requis dans cette tranche, car le frontend appartient à `0-pre.4`.
## Suite
Après validation de `0-pre.3`, ouvrir `0-pre.4` pour le frontend Web direct Vite/TypeScript, son shell HTML Bootstrap 5, le Canvas et les contrôles clavier/tactiles.