# 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.