From 023825b89bf41d3325a534d356f718406683d2ec Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Sun, 20 Sep 2026 13:33:39 +0200 Subject: [PATCH] 0.3.0-0-pre.4-fix.2 --- Cargo.toml | 4 +- README.md | 4 +- Web/game-snake-poc/frontend/ts/game.ts | 7 +-- Web/game-snake-poc/tsconfig.json | 2 +- deltas/0.3.0/0-pre.4.fix.2.md | 50 +++++++++++++++++++++ docs/plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md | 4 +- history/0.3.0/0-pre.4.fix.1.md | 46 +++++++++++++++++++ 7 files changed, 108 insertions(+), 9 deletions(-) create mode 100644 deltas/0.3.0/0-pre.4.fix.2.md create mode 100644 history/0.3.0/0-pre.4.fix.1.md diff --git a/Cargo.toml b/Cargo.toml index a4f7fc7..6704ba6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ # file: Cargo.toml -# version: 64 +# version: 65 [workspace] resolver = "3" @@ -20,7 +20,7 @@ members = [ ] [workspace.package] -version = "0.3.0-0-pre.4.fix.1" +version = "0.3.0-0-pre.4.fix.2" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/games" diff --git a/README.md b/README.md index 53f7ea7..7caacc8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - + # games.sasedev @@ -26,7 +26,7 @@ Workspace expérimental puis productif pour des jeux multiplateformes principale Version stable de référence : `0.2.0`. -Version de développement : `0.3.0-0-pre.4.fix.1`. +Version de développement : `0.3.0-0-pre.4.fix.2`. Les deux premiers jeux sont des POC structurels : `game-reflex-poc` et `game-snake-poc`. Ils existent d'abord pour valider les frontières du workspace, le moteur, les assets et le packaging multiplateforme. diff --git a/Web/game-snake-poc/frontend/ts/game.ts b/Web/game-snake-poc/frontend/ts/game.ts index 1e7ff33..6c4fc31 100644 --- a/Web/game-snake-poc/frontend/ts/game.ts +++ b/Web/game-snake-poc/frontend/ts/game.ts @@ -1,5 +1,5 @@ // file: Web/game-snake-poc/frontend/ts/game.ts -// version: 1 +// version: 2 import init, { SnakeWasmGame } from "@snake-wasm"; @@ -77,6 +77,7 @@ export async function startGame( if (context === null) { throw new Error("Le contexte Canvas 2D est indisponible."); } + const renderingContext: CanvasRenderingContext2D = context; const game = new SnakeWasmGame(); let previous = performance.now(); let accumulator = 0; @@ -89,11 +90,11 @@ export async function startGame( game.tick(); accumulator -= FRAME_MILLIS; } - render(game, canvas, context, score, length); + render(game, canvas, renderingContext, score, length); window.requestAnimationFrame(frame); } - render(game, canvas, context, score, length); + render(game, canvas, renderingContext, score, length); window.requestAnimationFrame(frame); return { queueDirection(direction: SnakeDirection): void { diff --git a/Web/game-snake-poc/tsconfig.json b/Web/game-snake-poc/tsconfig.json index 1f3a807..03ec47c 100644 --- a/Web/game-snake-poc/tsconfig.json +++ b/Web/game-snake-poc/tsconfig.json @@ -25,7 +25,7 @@ ], "paths": { "@snake-wasm": [ - "../../../builds/sasedev-games/game-snake-poc-web/wasm/game_snake_poc_wasm.js" + "../../../builds/sasedev-games/game-snake-poc-web/wasm/game_snake_poc_wasm.d.ts" ] } }, diff --git a/deltas/0.3.0/0-pre.4.fix.2.md b/deltas/0.3.0/0-pre.4.fix.2.md new file mode 100644 index 0000000..22785c2 --- /dev/null +++ b/deltas/0.3.0/0-pre.4.fix.2.md @@ -0,0 +1,50 @@ + + + +# Delta 0.3.0-0-pre.4.fix.2 + +## Objectif + +Fermer les deux erreurs TypeScript découvertes pendant la validation utilisateur de `0-pre.4.fix.1`, sans modifier le gameplay ni ouvrir le scope `0-pre.5`. + +## Corrigé + +- `tsconfig.json` résout désormais `@snake-wasm` vers `game_snake_poc_wasm.d.ts`, généré par `wasm-bindgen`, afin que TypeScript consomme les types réels du bridge sans déclaration manuelle dupliquée ; +- `vite.config.ts` conserve séparément l'alias runtime vers `game_snake_poc_wasm.js` ; +- après validation de `canvas.getContext("2d")`, `game.ts` capture le contexte dans une constante `CanvasRenderingContext2D` non nullable utilisée par le callback de frame ; +- consignation sous `history/0.3.0/0-pre.4.fix.1.md` de la gate réellement exécutée et des deux erreurs ayant déclenché ce fix ; +- réconciliation du plan actif avec ce second fix de `0-pre.4`. + +## Non modifié + +- gameplay Snake ; +- cadence et API du bridge WASM ; +- ratio Canvas `3 / 5` ; +- SimpleBar, header/footer fixes et shell Bootstrap ; +- mappings clavier/pointer ; +- lifecycle complet, assets, logging et provenance prévus pour `0-pre.5`. + +## Validation demandée + +Depuis la racine : + +```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 Web deltas history +python3 scripts/audit_distribution_layout.py +cargo check --workspace +cargo clippy --workspace --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 +(cd Web/game-snake-poc && npm install && npm run build && npm run dev) +``` + +Smoke navigateur sur `http://127.0.0.1:1434/main.html` : vérifier chargement WASM, clavier, boutons pointer/tactiles, ratio du plateau et scroll SimpleBar lorsque nécessaire. + +## Suite + +Après validation du fix, `0-pre.5` peut fermer lifecycle/resize, assets, logging, provenance runtime et non-régression Desktop SDL3 conformément au plan actif. diff --git a/docs/plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md b/docs/plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md index cc96607..abd4b35 100644 --- a/docs/plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md +++ b/docs/plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md @@ -1,5 +1,5 @@ - + # Plan v0.3.0 — baseline Snake et premier POC Web direct @@ -75,6 +75,8 @@ Gate : audits statiques, build WASM + `wasm-bindgen`, `npm run build` du package Suivi `0-pre.4.fix.1` : la validation utilisateur de `0-pre.4` a confirmé le fonctionnement clavier/pointer sous `vite dev`, mais a révélé trois défauts de candidate : `baseUrl` supprimé par TypeScript 7, omission de SimpleBar/`resize-observer-polyfill` du template repris et Canvas carré incompatible avec la grille logique `12 × 20`. Le fix retire `baseUrl`, rétablit le scroll shell KSP-derived et passe le plateau au ratio `3 / 5` avant réexécution de la gate frontend. +Suivi `0-pre.4.fix.2` : la validation de `fix.1` a confirmé les gates Rust/WASM et les audits, mais `npm run build` a encore révélé deux erreurs TypeScript strictes : l'alias `@snake-wasm` résolvait le JavaScript généré sans sélectionner sa déclaration `.d.ts`, et le narrowing du contexte Canvas 2D n'était pas conservé dans le callback `requestAnimationFrame`. Le fix sépare explicitement la résolution de typage (`.d.ts`) de la résolution runtime Vite (`.js`) et capture le contexte 2D validé dans une constante non nullable. + ### `0-pre.5` — intégration plateforme complète Fermer resize/lifecycle, assets, logging et provenance runtime du POC ; vérifier que Desktop SDL reste intact. diff --git a/history/0.3.0/0-pre.4.fix.1.md b/history/0.3.0/0-pre.4.fix.1.md new file mode 100644 index 0000000..1aa120c --- /dev/null +++ b/history/0.3.0/0-pre.4.fix.1.md @@ -0,0 +1,46 @@ + + + +# Historique 0.3.0-0-pre.4.fix.1 + +## Statut + +Validation partielle le 2026-09-20 : les gates Rust/WASM et les audits sont propres, mais `npm run build` échoue encore sur deux erreurs TypeScript strictes. La tranche déclenche `0-pre.4.fix.2`. + +## Validation utilisateur + +Les validations suivantes ont passé sur `0.3.0-0-pre.4.fix.1` : + +```text +cargo fmt --all: clean +cargo fmt --all -- --check: clean +General Rust rule audit: clean +Rust export completeness audit: 0 candidate(s) +games.sasedev workspace audit: clean +Markdown table audit: clean (5 table(s), 183 file(s)) +Distribution layout audit: clean (27 required path(s), 1 forbidden path(s) absent) +cargo check --workspace: clean +cargo clippy --workspace --all-targets --all-features -- -D warnings: clean +cargo test -p game-snake-poc-wasm: 2 passed, 0 failed +cargo build -p game-snake-poc-wasm --target wasm32-unknown-unknown: clean +wasm-bindgen --target web: clean +cargo tree -p game-snake-poc-wasm --edges normal: expected dependencies only +npm install: 5 packages added, 49 packages audited, 0 vulnerability +``` + +`npm install` a aussi signalé que le script d'installation de `@parcel/watcher@2.6.0` n'était pas encore couvert par `allowScripts`. Ce warning n'a pas interrompu l'installation et n'est pas traité comme l'échec de cette tranche. + +## Défauts observés + +`npm run build` a échoué avec deux erreurs : + +```text +TS7016: Could not find a declaration file for module '@snake-wasm'. +TS2345: CanvasRenderingContext2D | null is not assignable to CanvasRenderingContext2D. +``` + +Le premier défaut vient du mapping TypeScript vers le fichier JavaScript généré par `wasm-bindgen` au lieu de sa déclaration `.d.ts`. Le second vient du narrowing du résultat de `canvas.getContext("2d")` qui n'est pas conservé jusque dans le callback de frame sous la configuration TypeScript courante. + +## Suite + +`0-pre.4.fix.2` corrige strictement ces deux erreurs puis rejoue `npm run build` et le smoke navigateur avant ouverture de `0-pre.5`.