0.3.0-0-pre.5-fix.1
This commit is contained in:
@@ -20,7 +20,7 @@ members = [
|
||||
]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.3.0-0-pre.5"
|
||||
version = "0.3.0-0-pre.5.fix.1"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
repository = "https://git.sasedev.com/Sasedev/games"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: README.md -->
|
||||
<!-- version: 35 -->
|
||||
<!-- version: 36 -->
|
||||
|
||||
# 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.5`.
|
||||
Version de développement : `0.3.0-0-pre.5.fix.1`.
|
||||
|
||||
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/vite.config.ts
|
||||
// version: 2
|
||||
// version: 3
|
||||
|
||||
import { NodePackageImporter } from "sass-embedded";
|
||||
import { fileURLToPath } from "node:url";
|
||||
@@ -22,8 +22,8 @@ export default defineConfig({
|
||||
plugins: [
|
||||
viteStaticCopy({
|
||||
targets: [
|
||||
{ src: commonRuntimeAsset, dest: "common/data" },
|
||||
{ src: gameRuntimeAsset, dest: "game/data" },
|
||||
{ src: commonRuntimeAsset, dest: "common/data", rename: { stripBase: true } },
|
||||
{ src: gameRuntimeAsset, dest: "game/data", rename: { stripBase: true } },
|
||||
],
|
||||
}),
|
||||
],
|
||||
|
||||
77
deltas/0.3.0/0-pre.5.fix.1.md
Normal file
77
deltas/0.3.0/0-pre.5.fix.1.md
Normal file
@@ -0,0 +1,77 @@
|
||||
<!-- file: deltas/0.3.0/0-pre.5.fix.1.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.3.0-0-pre.5.fix.1
|
||||
|
||||
## Objectif
|
||||
|
||||
Corriger uniquement l'exposition des assets runtime du host Snake Web en développement, après validation partielle de `0-pre.5`.
|
||||
|
||||
## Défaut confirmé
|
||||
|
||||
`cargo`, WASM, `wasm-bindgen` et le build Vite passent. Sous `vite dev`, le frontend échoue néanmoins avant le démarrage du jeu lors de `fetchJson()` : les routes `common/data/runtime.json` et `game/data/game.json` ne sont pas servies comme attendu.
|
||||
|
||||
Les targets `vite-plugin-static-copy` utilisent des chemins source absolus. Le plugin conserve la structure source par défaut ; le `dest` seul ne constitue donc pas le contrat de route recherché.
|
||||
|
||||
## Correction
|
||||
|
||||
Les deux targets Vite utilisent désormais :
|
||||
|
||||
```text
|
||||
rename: { stripBase: true }
|
||||
```
|
||||
|
||||
Le contrat devient explicitement :
|
||||
|
||||
```text
|
||||
assets/common/data/runtime.json -> /common/data/runtime.json
|
||||
assets/game-snake-poc/data/game.json -> /game/data/game.json
|
||||
```
|
||||
|
||||
Ces routes doivent être identiques sous `vite dev` et dans `dist/`. Aucun asset source n'est dupliqué sous `Web/`.
|
||||
|
||||
## Garde-fou
|
||||
|
||||
`audit_distribution_layout.py` exige désormais `stripBase: true` sur les deux targets, en plus des namespaces `common/data` et `game/data`.
|
||||
|
||||
## Historique
|
||||
|
||||
`history/0.3.0/0-pre.5.md` consigne la validation partielle fournie par l'utilisateur et le défaut runtime exact.
|
||||
|
||||
## Non modifié
|
||||
|
||||
- gameplay Snake ;
|
||||
- adapter WASM/provenance ;
|
||||
- lifecycle/resize ;
|
||||
- logging frontend ;
|
||||
- SimpleBar/Canvas ;
|
||||
- runner Desktop SDL3 ;
|
||||
- ROADMAP et CHANGELOG.
|
||||
|
||||
## 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 engine-v1-platform-api --all-targets --all-features
|
||||
cargo test -p game-snake-poc-wasm --all-targets --all-features
|
||||
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 sur `http://127.0.0.1:1434/main.html` :
|
||||
|
||||
1. `Assets` doit passer de `chargement…` à `snake / engine-v1` ;
|
||||
2. Snake doit démarrer ;
|
||||
3. la provenance doit quitter `unknown / unknown` dès qu'une classe/device et une entrée sont observées ;
|
||||
4. revalider lifecycle/resize/SimpleBar/Canvas/contrôles ;
|
||||
5. terminer par `cargo run -p game-snake-poc-desktop` pour la non-régression SDL3.
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/development/010-SNAKE_WEB_FRONTEND.md -->
|
||||
<!-- version: 4 -->
|
||||
<!-- version: 5 -->
|
||||
|
||||
# Frontend du POC Snake Web direct
|
||||
|
||||
@@ -148,7 +148,9 @@ assets/common/data/runtime.json -> dist/common/data/runtime.json
|
||||
assets/game-snake-poc/data/game.json -> dist/game/data/game.json
|
||||
```
|
||||
|
||||
Le serveur Vite de développement expose les mêmes routes. Le frontend charge et valide les deux JSON avant le démarrage WASM. Le statut visible `Assets` permet de confirmer le chargement pendant le smoke. Aucune copie source n'est ajoutée sous `Web/`.
|
||||
Les deux targets utilisent explicitement `rename: { stripBase: true }`. Ce point est nécessaire puisque les sources sont résolues en chemins absolus : seule la basename (`runtime.json` / `game.json`) doit être placée sous le `dest` canonique, sans conserver l'arborescence du chemin source. Le serveur Vite de développement expose ainsi les mêmes routes `/common/data/runtime.json` et `/game/data/game.json` que le build de production.
|
||||
|
||||
Le frontend charge et valide les deux JSON avant le démarrage WASM. Le statut visible `Assets` permet de confirmer le chargement pendant le smoke. Aucune copie source n'est ajoutée sous `Web/`.
|
||||
|
||||
## Logging frontend
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md -->
|
||||
<!-- version: 10 -->
|
||||
<!-- version: 11 -->
|
||||
|
||||
# Plan v0.3.0 — baseline Snake et premier POC Web direct
|
||||
|
||||
@@ -89,6 +89,8 @@ Livraison candidate : le host suspend la simulation sur `visibilitychange`/`page
|
||||
|
||||
Gate : audits statiques, `cargo check --workspace`, Clippy workspace strict, tests `engine-v1-platform-api` et `game-snake-poc-wasm`, build WASM + `wasm-bindgen`, build Vite, smoke navigateur couvrant assets/provenance/lifecycle/resize/inputs/SimpleBar, puis smoke `game-snake-poc-desktop` pour la non-régression SDL3.
|
||||
|
||||
Suivi `0-pre.5.fix.1` : la validation de `0-pre.5` confirme les gates Rust/WASM et le build Vite production, mais le smoke `vite dev` reste bloqué sur le chargement des assets. Les targets `vite-plugin-static-copy` utilisent des sources absolues sans `rename.stripBase`, ce qui ne garantit pas les routes runtime canoniques. Le fix impose `stripBase: true` aux deux targets afin que dev et build exposent exactement `/common/data/runtime.json` et `/game/data/game.json`.
|
||||
|
||||
### `0-pre.6` — correction/extraction seulement si prouvée
|
||||
|
||||
Tranche conditionnelle. Elle n'existe que si les POC précédents révèlent une duplication réelle, une frontière mal placée ou un défaut nécessitant une correction structurante avant stabilisation. Sinon elle est omise.
|
||||
|
||||
51
history/0.3.0/0-pre.5.md
Normal file
51
history/0.3.0/0-pre.5.md
Normal file
@@ -0,0 +1,51 @@
|
||||
<!-- file: history/0.3.0/0-pre.5.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Historique 0.3.0-0-pre.5
|
||||
|
||||
## Statut
|
||||
|
||||
Validation technique partielle fournie par l'utilisateur le 2026-09-20. Les gates Rust/WASM et le build Vite passent, mais le smoke navigateur est bloqué par le chargement des assets runtime ; `0-pre.5` nécessite donc `0-pre.5.fix.1`.
|
||||
|
||||
## Validations réussies
|
||||
|
||||
La sortie utilisateur confirme :
|
||||
|
||||
```text
|
||||
General Rust rule audit: clean
|
||||
Rust export completeness audit: 0 candidate(s)
|
||||
games.sasedev workspace audit: clean
|
||||
Markdown table audit: clean (5 table(s), 189 file(s))
|
||||
Distribution layout audit: clean (31 required path(s), 1 forbidden path(s) absent)
|
||||
cargo fmt --all -- --check: clean
|
||||
cargo check --workspace: clean
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings: clean
|
||||
cargo test -p engine-v1-platform-api --all-targets --all-features: 3 passed
|
||||
cargo test -p game-snake-poc-wasm --all-targets --all-features: 4 passed
|
||||
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: frontière attendue
|
||||
npm install: 64 packages audités, 0 vulnérabilité
|
||||
npm run build: clean, 30 modules transformés, 2 assets collectés
|
||||
npm run dev: Vite démarré sur 127.0.0.1:1434
|
||||
```
|
||||
|
||||
Le warning npm relatif au script d'installation de `@parcel/watcher@2.6.0` reste non bloquant.
|
||||
|
||||
Le smoke `cargo run -p game-snake-poc-desktop` n'a pas été exécuté dans cette tentative, le smoke Web étant déjà bloqué par les assets.
|
||||
|
||||
## Défaut observé
|
||||
|
||||
Le shell démarre, mais les sondes visibles restent :
|
||||
|
||||
```text
|
||||
Provenance: web / browser / wasm / unknown / unknown
|
||||
Assets: chargement…
|
||||
Impossible de démarrer Snake : fetchJson@http://127.0.0.1:1434/ts/assets.ts:4:9
|
||||
```
|
||||
|
||||
Le build production copie les deux assets, mais le serveur de développement ne les expose pas aux routes attendues par `fetchJson()`. Les targets de `vite-plugin-static-copy` partent de chemins absolus sans suppression explicite du préfixe source.
|
||||
|
||||
## Suite
|
||||
|
||||
`0-pre.5.fix.1` impose `rename: { stripBase: true }` aux deux targets afin de rendre les routes runtime identiques en `vite dev` et dans `dist/`, puis rejoue le smoke assets/provenance/lifecycle avant toute entrée en beta.
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# file: scripts/audit_distribution_layout.py
|
||||
# version: 6
|
||||
# version: 7
|
||||
|
||||
"""Audit the static distribution layout expected by supported POCs."""
|
||||
|
||||
@@ -117,8 +117,8 @@ def audit_snake_web_integration(root: pathlib.Path) -> list[str]:
|
||||
|
||||
required_fragments = (
|
||||
(package, '"vite-plugin-static-copy"', "DIST-LAYOUT-007: Snake Web package must declare static asset packaging"),
|
||||
(vite, 'dest: "common/data"', "DIST-LAYOUT-008: common Web assets must retain the common/data namespace"),
|
||||
(vite, 'dest: "game/data"', "DIST-LAYOUT-009: game Web assets must retain the game/data namespace"),
|
||||
(vite, 'dest: "common/data", rename: { stripBase: true }', "DIST-LAYOUT-008: common Web assets must retain the common/data namespace without absolute source prefixes"),
|
||||
(vite, 'dest: "game/data", rename: { stripBase: true }', "DIST-LAYOUT-009: game Web assets must retain the game/data namespace without absolute source prefixes"),
|
||||
(main, 'loadSnakeWebAssets()', "DIST-LAYOUT-010: Snake Web startup must load runtime asset probes"),
|
||||
(main, 'bindBrowserLifecycle(session, stage)', "DIST-LAYOUT-011: Snake Web startup must bind browser lifecycle"),
|
||||
(lifecycle, '"visibilitychange"', "DIST-LAYOUT-012: Snake Web lifecycle must observe visibility changes"),
|
||||
|
||||
Reference in New Issue
Block a user