0.3.5-alpha.7.fix.2

This commit is contained in:
2026-09-22 06:52:32 +02:00
parent dfb41a79b6
commit 401f00de13
7 changed files with 139 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
# file: Cargo.toml
# version: 104
# version: 105
[workspace]
resolver = "3"
@@ -27,7 +27,7 @@ members = [
]
[workspace.package]
version = "0.3.5-alpha.7.fix.1"
version = "0.3.5-alpha.7.fix.2"
edition = "2024"
license = "MIT"
repository = "https://git.sasedev.com/Sasedev/games"

View File

@@ -1,5 +1,5 @@
<!-- file: README.md -->
<!-- version: 72 -->
<!-- version: 73 -->
# games.sasedev
@@ -27,9 +27,9 @@ Workspace expérimental puis productif pour des jeux multiplateformes principale
Version stable de référence : `0.3.4`.
Version active : `0.3.5-alpha.7.fix.1`. `0.3.2` reste différée.
Version active : `0.3.5-alpha.7.fix.2`. `0.3.2` reste différée.
La stable `0.3.4` livre la première baseline realtime : contrat binaire transport-neutral, backend WebSocket Tokio/tokio-tungstenite, limites et deadlines, tests loopback/robustesse, smoke runtime localhost public et frontières de dépendances empêchant moteurs et gameplay de dépendre d'un backend concret. `0.3.5-alpha.7.fix.1` conserve le backend WebTransport natif et son smoke `PASS`, valide le client `wasm32-unknown-unknown`, applique aussi les deadlines côté navigateur et ajoute un smoke browser technique Vite/TypeScript + adapter Rust/WASM vers un serveur Rust local avec pin SHA-256 exact. Le fix corrige uniquement le chemin externe utilisé par `wasm-bindgen` depuis le host `Web/`. Le fallback et les datagrams restent réservés aux tranches suivantes.
La stable `0.3.4` livre la première baseline realtime : contrat binaire transport-neutral, backend WebSocket Tokio/tokio-tungstenite, limites et deadlines, tests loopback/robustesse, smoke runtime localhost public et frontières de dépendances empêchant moteurs et gameplay de dépendre d'un backend concret. `0.3.5-alpha.7.fix.2` conserve le backend WebTransport natif et son smoke `PASS`, valide le client `wasm32-unknown-unknown`, applique aussi les deadlines côté navigateur et ajoute un smoke browser technique Vite/TypeScript + adapter Rust/WASM vers un serveur Rust local avec pin SHA-256 exact. Les deux fixes corrigent uniquement la résolution du build externe depuis le host `Web/` : chemin de l'artefact `wasm-bindgen`, puis chemin TypeScript vers les déclarations générées. Le fallback et les datagrams restent réservés aux tranches suivantes.
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.

View File

@@ -1,7 +1,7 @@
{
"name": "game-realtime-webtransport-browser-smoke-web",
"private": true,
"version": "0.3.5-alpha.7.fix.1",
"version": "0.3.5-alpha.7.fix.2",
"type": "module",
"scripts": {
"wasm:dev": "cargo build -p game-realtime-webtransport-browser-smoke --lib --target wasm32-unknown-unknown && wasm-bindgen ../../../builds/sasedev-games/target/wasm32-unknown-unknown/debug/game_realtime_webtransport_browser_smoke.wasm --target web --out-dir ../../../builds/sasedev-games/game-realtime-webtransport-browser-smoke/wasm --out-name game_realtime_webtransport_browser_smoke",

View File

@@ -24,7 +24,7 @@
],
"paths": {
"@webtransport-browser-smoke-wasm": [
"../../builds/sasedev-games/game-realtime-webtransport-browser-smoke/wasm/game_realtime_webtransport_browser_smoke.d.ts"
"../../../builds/sasedev-games/game-realtime-webtransport-browser-smoke/wasm/game_realtime_webtransport_browser_smoke.d.ts"
]
}
},

View File

@@ -0,0 +1,123 @@
<!-- file: deltas/0.3.5/alpha.7.fix.2.md -->
<!-- version: 1 -->
# Delta 0.3.5-alpha.7.fix.2
## Base requise
`0.3.5-alpha.7.fix.1`, dont la gate utilisateur du 2026-09-22 valide fmt, les trois audits, `cargo check --workspace`, Clippy strict et le build WASM de `game-realtime-webtransport-browser-smoke`.
Le premier correctif permet aussi au sous-script `wasm:build` de terminer : la compilation release et `wasm-bindgen` trouvent désormais l'artefact Cargo et génèrent les bindings dans le build externe. La gate échoue ensuite uniquement pendant `tsc` :
```text
frontend/ts/main.ts:4:41 - error TS2307: Cannot find module '@webtransport-browser-smoke-wasm' or its corresponding type declarations.
frontend/ts/main.ts:49:19 - error TS7006: Parameter 'message' implicitly has an 'any' type.
frontend/ts/main.ts:52:20 - error TS7006: Parameter 'caughtError' implicitly has an 'any' type.
```
`alpha.7.fix.1` n'est donc pas historisée comme validée avant ce correctif.
## Cause
Le chemin littéral corrigé dans `package.json` n'avait pas été réconcilié avec le mapping TypeScript. Depuis :
```text
Web/game-realtime-webtransport-browser-smoke
```
les déclarations générées par `wasm-bindgen` se trouvent sous :
```text
../../../builds/sasedev-games/game-realtime-webtransport-browser-smoke/wasm/game_realtime_webtransport_browser_smoke.d.ts
```
mais `tsconfig.json` cherchait encore :
```text
../../builds/sasedev-games/game-realtime-webtransport-browser-smoke/wasm/game_realtime_webtransport_browser_smoke.d.ts
```
L'import aliasé ne pouvant pas être résolu, TypeScript perdait aussi la signature générée de `run_browser_smoke`; les paramètres des callbacks de Promise apparaissaient alors comme `any` implicites.
## Correction
La version technique passe à :
```text
0.3.5-alpha.7.fix.2
```
Le mapping `paths` de `@webtransport-browser-smoke-wasm` utilise désormais le même build root externe réel que `package.json` et `vite.config.ts` :
```text
../../../builds/sasedev-games/game-realtime-webtransport-browser-smoke/wasm/game_realtime_webtransport_browser_smoke.d.ts
```
`DIST-LAYOUT-086` ancre ce chemin TypeScript pour empêcher une régression silencieuse.
Aucun code Rust, TypeScript applicatif, protocole WebTransport, framing, deadline, certificat, pin SHA-256, API publique ou dépendance n'est modifié.
## Fichiers modifiés
```text
Cargo.toml
README.md
Web/game-realtime-webtransport-browser-smoke/package.json
Web/game-realtime-webtransport-browser-smoke/tsconfig.json
docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md
scripts/audit_distribution_layout.py
```
Nouveau fichier :
```text
deltas/0.3.5/alpha.7.fix.2.md
```
Aucun fichier `history/0.3.5/alpha.7.fix.1.md` n'est créé avant une gate entièrement verte.
## Plan
Le forecast fonctionnel ne change pas. Après validation du build frontend puis du smoke navigateur réel, `0.3.5-alpha.8` reste la tranche du fallback WebSocket au niveau composition.
## Validation attendue
```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 build -p game-realtime-webtransport-browser-smoke --lib --target wasm32-unknown-unknown
(cd Web/game-realtime-webtransport-browser-smoke && npm install && npm run build)
```
Puis exécuter le smoke runtime réel avec deux terminaux.
Terminal A :
```bash
cargo run -p game-realtime-webtransport-browser-smoke
```
Terminal B :
```bash
(cd Web/game-realtime-webtransport-browser-smoke && npm run dev)
```
Ouvrir l'URL `OPEN=...` imprimée par le Terminal A. Le résultat attendu dans la page puis dans le Terminal A reste :
```text
game-realtime-webtransport-browser-smoke: PASS
```
## Après validation
Créer `history/0.3.5/alpha.7.fix.2.md` à partir des résultats réellement fournis, puis ouvrir directement `0.3.5-alpha.8`.

View File

@@ -1,11 +1,11 @@
<!-- file: docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md -->
<!-- version: 10 -->
<!-- version: 11 -->
# Plan 0.3.5 — POC WebTransport/QUIC et fallback WebSocket
## Statut
Plan actif créé pendant `0.3.5-alpha.1` à partir de l'archive taggée `v0.3.4`, puis réconcilié pour l'implémentation native de `0.3.5-alpha.2`, son correctif de validation `0.3.5-alpha.2.fix.1`, le chemin fiable validé de `0.3.5-alpha.3`, la robustesse validée par `0.3.5-alpha.4.fix.1`, le smoke natif validé de `0.3.5-alpha.5`, le chemin client WASM validé de `0.3.5-alpha.6`, le smoke navigateur candidat de `0.3.5-alpha.7` et son correctif de build `0.3.5-alpha.7.fix.1`.
Plan actif créé pendant `0.3.5-alpha.1` à partir de l'archive taggée `v0.3.4`, puis réconcilié pour l'implémentation native de `0.3.5-alpha.2`, son correctif de validation `0.3.5-alpha.2.fix.1`, le chemin fiable validé de `0.3.5-alpha.3`, la robustesse validée par `0.3.5-alpha.4.fix.1`, le smoke natif validé de `0.3.5-alpha.5`, le chemin client WASM validé de `0.3.5-alpha.6`, le smoke navigateur candidat de `0.3.5-alpha.7` et ses correctifs de build `0.3.5-alpha.7.fix.1` puis `0.3.5-alpha.7.fix.2`.
Le cadrage détaillé et la comparaison des stacks actuelles sont conservés dans `docs/studies/026-V0_3_5_WEBTRANSPORT_QUIC_STACK_AUDIT.md`. Le présent document porte les décisions opérationnelles, le scope, les gates et le forecast vivant de la version.
@@ -515,6 +515,8 @@ Cette tranche reste volontairement séparée de `alpha.8` : le smoke WebTranspor
Correctif `0.3.5-alpha.7.fix.1` : la première gate utilisateur a validé fmt, audits, check/Clippy natifs, tests, smoke natif, check/Clippy/build WASM et la compilation de l'adapter navigateur, puis a échoué uniquement dans `npm run build` lorsque `wasm-bindgen` cherchait l'artefact Cargo sous `../../builds/...`. Depuis `Web/game-realtime-webtransport-browser-smoke`, le target-dir workspace `../builds/sasedev-games/target` se trouve en réalité sous `../../../builds/...`. Le fix corrige les scripts `wasm:dev`/`wasm:build` et l'audit de distribution associé, sans changement Rust/runtime.
Correctif `0.3.5-alpha.7.fix.2` : la gate du premier fix valide fmt, audits, check/Clippy natifs et le build WASM de l'adapter, puis `npm run build` atteint TypeScript et échoue uniquement parce que l'alias `@webtransport-browser-smoke-wasm` cherche encore les déclarations wasm-bindgen sous `../../builds/...`. Le chemin `paths` du `tsconfig.json` est aligné sur `../../../builds/...`; l'audit de distribution ancre désormais aussi cette résolution. Les erreurs `implicit any` observées sur les callbacks sont une conséquence de ce module non résolu et disparaissent lorsque la déclaration générée est chargee. Aucun code Rust/runtime ni protocole n'est modifié.
### `0.3.5-alpha.8` — fallback WebSocket au niveau composition
- tentative WebTransport ;

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env python3
# file: scripts/audit_distribution_layout.py
# version: 20
# version: 21
"""Audit the static distribution layout expected by supported POCs."""
@@ -326,13 +326,15 @@ def audit_webtransport_browser_smoke(root: pathlib.Path) -> list[str]:
violations: list[str] = []
package_path = root / "Web/game-realtime-webtransport-browser-smoke/package.json"
tsconfig_path = root / "Web/game-realtime-webtransport-browser-smoke/tsconfig.json"
vite_path = root / "Web/game-realtime-webtransport-browser-smoke/vite.config.ts"
main_path = root / "Web/game-realtime-webtransport-browser-smoke/frontend/ts/main.ts"
rust_manifest_path = root / "crates/apps/game-realtime-webtransport-browser-smoke/Cargo.toml"
rust_main_path = root / "crates/apps/game-realtime-webtransport-browser-smoke/src/main.rs"
if not all(path.exists() for path in (package_path, vite_path, main_path, rust_manifest_path, rust_main_path)):
if not all(path.exists() for path in (package_path, tsconfig_path, vite_path, main_path, rust_manifest_path, rust_main_path)):
return violations
package = package_path.read_text(encoding="utf-8")
tsconfig = tsconfig_path.read_text(encoding="utf-8")
vite = vite_path.read_text(encoding="utf-8")
main = main_path.read_text(encoding="utf-8")
rust_manifest = rust_manifest_path.read_text(encoding="utf-8")
@@ -340,6 +342,7 @@ def audit_webtransport_browser_smoke(root: pathlib.Path) -> list[str]:
required_fragments = (
(package, 'cargo build -p game-realtime-webtransport-browser-smoke --lib --target wasm32-unknown-unknown', "DIST-LAYOUT-077: browser WebTransport smoke must build its Rust WASM adapter"),
(package, 'wasm-bindgen ../../../builds/sasedev-games/', "DIST-LAYOUT-078: browser WebTransport smoke bindings must be generated outside the repository"),
(tsconfig, '../../../builds/sasedev-games/game-realtime-webtransport-browser-smoke/wasm/game_realtime_webtransport_browser_smoke.d.ts', "DIST-LAYOUT-086: browser WebTransport smoke TypeScript declarations must resolve from the external build root"),
(vite, 'host: "127.0.0.1"', "DIST-LAYOUT-079: browser WebTransport smoke Vite host must stay on loopback"),
(vite, 'port: 1435,', "DIST-LAYOUT-080: browser WebTransport smoke Vite port must stay deterministic"),
(main, 'window.isSecureContext', "DIST-LAYOUT-081: browser WebTransport smoke must verify secure-context availability"),