0.3.0-0-pre.4-fix.2
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 64
|
# version: 65
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
resolver = "3"
|
||||||
@@ -20,7 +20,7 @@ members = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.3.0-0-pre.4.fix.1"
|
version = "0.3.0-0-pre.4.fix.2"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/games"
|
repository = "https://git.sasedev.com/Sasedev/games"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: README.md -->
|
<!-- file: README.md -->
|
||||||
<!-- version: 32 -->
|
<!-- version: 33 -->
|
||||||
|
|
||||||
# games.sasedev
|
# 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 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.
|
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
|
// file: Web/game-snake-poc/frontend/ts/game.ts
|
||||||
// version: 1
|
// version: 2
|
||||||
|
|
||||||
import init, { SnakeWasmGame } from "@snake-wasm";
|
import init, { SnakeWasmGame } from "@snake-wasm";
|
||||||
|
|
||||||
@@ -77,6 +77,7 @@ export async function startGame(
|
|||||||
if (context === null) {
|
if (context === null) {
|
||||||
throw new Error("Le contexte Canvas 2D est indisponible.");
|
throw new Error("Le contexte Canvas 2D est indisponible.");
|
||||||
}
|
}
|
||||||
|
const renderingContext: CanvasRenderingContext2D = context;
|
||||||
const game = new SnakeWasmGame();
|
const game = new SnakeWasmGame();
|
||||||
let previous = performance.now();
|
let previous = performance.now();
|
||||||
let accumulator = 0;
|
let accumulator = 0;
|
||||||
@@ -89,11 +90,11 @@ export async function startGame(
|
|||||||
game.tick();
|
game.tick();
|
||||||
accumulator -= FRAME_MILLIS;
|
accumulator -= FRAME_MILLIS;
|
||||||
}
|
}
|
||||||
render(game, canvas, context, score, length);
|
render(game, canvas, renderingContext, score, length);
|
||||||
window.requestAnimationFrame(frame);
|
window.requestAnimationFrame(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
render(game, canvas, context, score, length);
|
render(game, canvas, renderingContext, score, length);
|
||||||
window.requestAnimationFrame(frame);
|
window.requestAnimationFrame(frame);
|
||||||
return {
|
return {
|
||||||
queueDirection(direction: SnakeDirection): void {
|
queueDirection(direction: SnakeDirection): void {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
],
|
],
|
||||||
"paths": {
|
"paths": {
|
||||||
"@snake-wasm": [
|
"@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 -->
|
<!-- 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
|
# 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.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
|
### `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.
|
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