0.3.0-0-pre.4-fix.2
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: README.md -->
|
||||
<!-- version: 32 -->
|
||||
<!-- version: 33 -->
|
||||
|
||||
# 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.
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
50
deltas/0.3.0/0-pre.4.fix.2.md
Normal file
50
deltas/0.3.0/0-pre.4.fix.2.md
Normal file
@@ -0,0 +1,50 @@
|
||||
<!-- file: deltas/0.3.0/0-pre.4.fix.2.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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.
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md -->
|
||||
<!-- version: 7 -->
|
||||
<!-- version: 8 -->
|
||||
|
||||
# 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.
|
||||
|
||||
46
history/0.3.0/0-pre.4.fix.1.md
Normal file
46
history/0.3.0/0-pre.4.fix.1.md
Normal file
@@ -0,0 +1,46 @@
|
||||
<!-- file: history/0.3.0/0-pre.4.fix.1.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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`.
|
||||
Reference in New Issue
Block a user