diff --git a/Cargo.toml b/Cargo.toml index 5b588c8..b7de8a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ # file: Cargo.toml -# version: 111 +# version: 112 [workspace] resolver = "3" @@ -30,7 +30,7 @@ members = [ ] [workspace.package] -version = "0.3.5-beta.1" +version = "0.3.5-beta.1.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/games" diff --git a/README.md b/README.md index b55ea5c..68fcd1e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - + # 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-beta.1`. `0.3.2` reste différée. +Version active : `0.3.5-beta.1.fix.1`. `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-beta.1` ouvre la validation large du POC WebTransport/QUIC après fermeture de toutes les tranches alpha : chemins natif et navigateur, composition WebTransport-first avec fallback WebSocket strictement classifié, datagrams backend-spécifiques et caractérisation loopback bornée. La beta n’ajoute aucune nouvelle capacité ; elle doit confirmer le workspace complet, les smokes retenus, le build navigateur/WASM, la portabilité Android raisonnable et les frontières de dépendances avant consolidation pré-RC. La conclusion technique provisoire reste de conserver WebTransport comme second backend à côté de WebSocket, sans prétendre qu’un résultat loopback prédit les performances Internet/mobile. +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-beta.1.fix.1` ferme un défaut de cohérence de version du host navigateur découvert pendant la validation large ; `0.3.5-beta.1` avait ouvert la validation large du POC WebTransport/QUIC après fermeture de toutes les tranches alpha : chemins natif et navigateur, composition WebTransport-first avec fallback WebSocket strictement classifié, datagrams backend-spécifiques et caractérisation loopback bornée. La beta n’ajoute aucune nouvelle capacité ; elle doit confirmer le workspace complet, les smokes retenus, le build navigateur/WASM, la portabilité Android raisonnable et les frontières de dépendances avant consolidation pré-RC. La conclusion technique provisoire reste de conserver WebTransport comme second backend à côté de WebSocket, sans prétendre qu’un résultat loopback prédit les performances Internet/mobile. 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-realtime-webtransport-browser-smoke/package.json b/Web/game-realtime-webtransport-browser-smoke/package.json index e7b18fa..051b921 100644 --- a/Web/game-realtime-webtransport-browser-smoke/package.json +++ b/Web/game-realtime-webtransport-browser-smoke/package.json @@ -1,7 +1,7 @@ { "name": "game-realtime-webtransport-browser-smoke-web", "private": true, - "version": "0.3.5-alpha.7.fix.2", + "version": "0.3.5-beta.1.fix.1", "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", diff --git a/deltas/0.3.5/beta.1.fix.1.md b/deltas/0.3.5/beta.1.fix.1.md new file mode 100644 index 0000000..16fee23 --- /dev/null +++ b/deltas/0.3.5/beta.1.fix.1.md @@ -0,0 +1,69 @@ + + + +# Delta 0.3.5-beta.1.fix.1 + +## Base requise + +`0.3.5-beta.1`. + +## Objet + +Fermer le défaut de cohérence de version découvert pendant la gate `beta.1` : le host frontend du smoke navigateur restait déclaré en `0.3.5-alpha.7.fix.2` alors que sa crate Rust et le workspace étaient en `0.3.5-beta.1`. + +La version technique devient : + +```text +0.3.5-beta.1.fix.1 +``` + +## Modifications + +- synchroniser `Web/game-realtime-webtransport-browser-smoke/package.json` avec `0.3.5-beta.1.fix.1` ; +- ajouter `DIST-LAYOUT-114` afin que l’audit compare désormais cette version frontend à `[workspace.package].version` ; +- mettre à jour le README et le plan de version ; +- ne modifier aucun backend realtime, contrat, smoke, mesure, engine ou gameplay. + +La tentative Android ARM64 de `beta.1` reste classée comme **preuve non exécutée pour cause d’environnement** : `ring` a échoué avant compilation du backend car `aarch64-linux-android-clang` n’était pas disponible. Ce point ne constitue pas un défaut de code démontré et reste à documenter comme plateforme non validée dans `beta.2`. + +## 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 + +(cd Web/game-realtime-webtransport-browser-smoke && npm install && npm run build) +``` + +Puis vérifier le smoke navigateur réel : + +Terminal 1 : + +```bash +cargo run -p game-realtime-webtransport-browser-smoke +``` + +Terminal 2 : + +```bash +(cd Web/game-realtime-webtransport-browser-smoke && npm run dev) +``` + +Ouvrir l’URL `OPEN=...` et attendre : + +```text +game-realtime-webtransport-browser-smoke: PASS +``` + +Le log npm doit annoncer `game-realtime-webtransport-browser-smoke-web@0.3.5-beta.1.fix.1`. + +## Après validation + +Créer `history/0.3.5/beta.1.fix.1.md`, puis ouvrir `0.3.5-beta.2`. diff --git a/docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md b/docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md index fb2e57b..1083e5f 100644 --- a/docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md +++ b/docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md @@ -1,11 +1,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 validé par `0.3.5-alpha.7.fix.2`, la composition/fallback WebSocket validée par `0.3.5-alpha.8.fix.1`, le POC datagram backend-spécifique validé par `0.3.5-alpha.9.fix.1`, puis la caractérisation comparative bornée validée par `0.3.5-alpha.10.fix.1`. `0.3.5-beta.1` est maintenant la tranche active de validation large, sans nouvelle fonctionnalité. +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 validé par `0.3.5-alpha.7.fix.2`, la composition/fallback WebSocket validée par `0.3.5-alpha.8.fix.1`, le POC datagram backend-spécifique validé par `0.3.5-alpha.9.fix.1`, puis la caractérisation comparative bornée validée par `0.3.5-alpha.10.fix.1`. `0.3.5-beta.1` a validé le workspace complet, les smokes natifs, les mesures, le build WASM/frontend et le smoke navigateur réel. La preuve Android ARM64 a été bloquée uniquement par l’absence de `aarch64-linux-android-clang` dans l’environnement. La gate a aussi révélé que le `package.json` du host navigateur était resté à `0.3.5-alpha.7.fix.2`; `0.3.5-beta.1.fix.1` corrige cette dérive et ajoute un audit de synchronisation ciblé. 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. @@ -603,6 +603,17 @@ Preuves realtime et multiplateformes retenues : Toute capacité fonctionnelle majeure manquante réouvre une alpha ; un défaut fermé de validation/build produit `beta.1.fix.N`. +### `0.3.5-beta.1.fix.1` — cohérence de version du host navigateur + +Correctif fermé de validation : + +- synchroniser `Web/game-realtime-webtransport-browser-smoke/package.json` avec la version workspace ; +- ajouter `DIST-LAYOUT-114` pour empêcher une nouvelle dérive de cette version ; +- ne modifier aucun backend, protocole, test, mesure ou comportement runtime ; +- conserver la preuve Android ARM64 comme non validée dans cet environnement tant que le compilateur NDK `aarch64-linux-android-clang` n’est pas disponible. + +Après validation de ce fix, enregistrer `history/0.3.5/beta.1.fix.1.md` puis ouvrir `beta.2`. + ### `0.3.5-beta.2` — consolidation pré-RC Tranche explicitement réservée par `SESSION-009` / `VER-PHASE-010` : diff --git a/scripts/audit_distribution_layout.py b/scripts/audit_distribution_layout.py index 56f63e6..1e3c6e8 100644 --- a/scripts/audit_distribution_layout.py +++ b/scripts/audit_distribution_layout.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # file: scripts/audit_distribution_layout.py -# version: 24 +# version: 25 """Audit the static distribution layout expected by supported POCs.""" @@ -342,6 +342,10 @@ def audit_webtransport_browser_smoke(root: pathlib.Path) -> list[str]: 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") + workspace_manifest = (root / "Cargo.toml").read_text(encoding="utf-8") + workspace_section = workspace_manifest.split("[workspace.package]", maxsplit=1)[1].split("[", maxsplit=1)[0] + workspace_version_line = next((line.strip() for line in workspace_section.splitlines() if line.strip().startswith("version = ")), "") + workspace_version = workspace_version_line.removeprefix("version = ").strip().strip('"') tsconfig = tsconfig_path.read_text(encoding="utf-8") vite = vite_path.read_text(encoding="utf-8") main = main_path.read_text(encoding="utf-8") @@ -362,6 +366,11 @@ def audit_webtransport_browser_smoke(root: pathlib.Path) -> list[str]: for content, fragment, message in required_fragments: if fragment not in content: violations.append(message) + expected_package_version = f'"version": "{workspace_version}"' + if expected_package_version not in package: + violations.append( + f"DIST-LAYOUT-114: browser WebTransport smoke frontend version must match workspace version {workspace_version}" + ) return violations