diff --git a/Cargo.toml b/Cargo.toml index da34bb3..5b588c8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ # file: Cargo.toml -# version: 110 +# version: 111 [workspace] resolver = "3" @@ -30,7 +30,7 @@ members = [ ] [workspace.package] -version = "0.3.5-alpha.10.fix.1" +version = "0.3.5-beta.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/games" diff --git a/README.md b/README.md index db37d28..b55ea5c 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-alpha.10.fix.1`. `0.3.2` reste différée. +Version active : `0.3.5-beta.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-alpha.10.fix.1` conserve les chemins WebTransport natif et navigateur validés, la composition WebTransport-first avec fallback WebSocket strictement classifié et le POC datagram backend-spécifique, puis ajoute un outil borné de caractérisation loopback WebSocket/WebTransport. Les mesures d’établissement, RTT, throughput et fenêtre de messages en vol restent descriptives ; le datagram est mesuré séparément et n’entre toujours pas dans `RealtimeConnection`. 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` 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. 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/deltas/0.3.5/beta.1.md b/deltas/0.3.5/beta.1.md new file mode 100644 index 0000000..3ff0414 --- /dev/null +++ b/deltas/0.3.5/beta.1.md @@ -0,0 +1,105 @@ + + + +# Delta 0.3.5-beta.1 + +## Base requise + +`0.3.5-alpha.10.fix.1` validée. + +## Objet + +Ouvrir la validation large de `0.3.5` sans nouvelle fonctionnalité. Toutes les capacités alpha sont déjà fermées : WebSocket baseline, WebTransport natif fiable, navigateur/WASM, fallback classifié, datagrams backend-spécifiques et mesures loopback bornées. + +La version technique devient : + +```text +0.3.5-beta.1 +``` + +## Modifications + +- enregistrer `history/0.3.5/alpha.10.fix.1.md` avec la gate et les mesures réellement observées ; +- synchroniser la version workspace et le README vers `0.3.5-beta.1` ; +- activer dans le plan la gate beta full-workspace et les preuves runtime/multiplateformes retenues ; +- ne modifier aucun backend, contrat realtime, engine, gameplay, frontend ou dépendance. + +`CHANGELOG.md` reste inchangé : sa consolidation est réservée à `beta.2`, conformément aux contrats documentaires et au plan. + +## Validation attendue — gate automatisable + +```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 --workspace --all-targets --all-features + +cargo run -p game-realtime-websocket-smoke +cargo run -p game-realtime-webtransport-smoke +cargo run -p game-realtime-webtransport-datagram-smoke +cargo run -p game-realtime-transport-fallback-smoke +cargo run --release -p game-realtime-transport-measure + +cargo check -p game-realtime-webtransport-lib --target wasm32-unknown-unknown +cargo clippy -p game-realtime-webtransport-lib --target wasm32-unknown-unknown --lib -- -D warnings +cargo build -p game-realtime-webtransport-lib --target wasm32-unknown-unknown +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) + +cargo tree -p game-realtime-websocket-lib --edges normal +cargo tree -p game-realtime-webtransport-lib --edges normal +cargo tree -i game-realtime-websocket-lib --workspace --edges normal +cargo tree -i game-realtime-webtransport-lib --workspace --edges normal +``` + +Si la cible Android/NDK déjà utilisée par le checkout est disponible, ajouter : + +```bash +cargo check -p game-realtime-webtransport-lib --target aarch64-linux-android +``` + +Cette commande est une preuve de portabilité du backend uniquement ; aucun APK/AAB, Gradle ou JNI n'est demandé dans `beta.1` puisque ce périmètre n'a pas été modifié. + +## Validation navigateur réelle + +Après le build frontend, lancer dans un premier terminal : + +```bash +cargo run -p game-realtime-webtransport-browser-smoke +``` + +Puis dans un second : + +```bash +(cd Web/game-realtime-webtransport-browser-smoke && npm run dev) +``` + +Ouvrir l'URL `OPEN=...` imprimée par le premier terminal. La preuve attendue est : + +```text +game-realtime-webtransport-browser-smoke: PASS +``` + +## Critères beta + +La gate doit confirmer : + +- aucun test workspace en échec ; +- aucun warning Clippy ; +- tous les smokes realtime retenus en `PASS` ; +- build/smoke navigateur toujours opérationnels ; +- le graphe inverse des backends ne contient aucun `engine-v1-*` ni `game-*-poc` gameplay ; +- la conclusion `webtransport=retain` reste une décision de trajectoire, pas une affirmation de supériorité de performance. + +Un défaut fermé produit `0.3.5-beta.1.fix.N`. Une capacité fonctionnelle majeure réellement manquante imposerait de rouvrir une alpha conformément au plan. + +## Après validation + +Créer `history/0.3.5/beta.1.md`, puis ouvrir `0.3.5-beta.2` pour la consolidation pré-RC : documentation durable, conclusion finale `retained/deferred/rejected`, plateformes validées/non validées, `CHANGELOG.md`, `ROADMAP.md` si nécessaire et prompt `0.3.6`. 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 80bd1c9..fb2e57b 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 de `0.3.5-alpha.10` et son correctif de gate `0.3.5-alpha.10.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 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é. 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. @@ -574,24 +574,34 @@ Correctif `0.3.5-alpha.10.fix.1` : la gate utilisateur de `alpha.10` confirme le ### `0.3.5-beta.1` — validation large -Jalon rare de full workspace : +Jalon rare de full workspace, désormais actif après validation de `alpha.10.fix.1`. Cette tranche ne porte aucun comportement nouveau. + +Gate principale : ```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 --workspace --all-targets --all-features ``` -Plus : +Preuves realtime et multiplateformes retenues : -- fmt/check/Clippy/audits ; -- tests ciblés realtime ; -- smoke WebSocket ; -- smoke WebTransport natif ; -- smoke navigateur si retenu ; -- preuve fallback ; -- `cargo tree` direct/inverse des deux backends ; -- vérification qu'aucun gameplay/engine ne dépend d'un backend concret. +- smoke WebSocket natif ; +- smoke WebTransport fiable natif ; +- smoke datagram WebTransport natif ; +- preuve WebTransport-first puis fallback WebSocket classifié ; +- caractérisation release bornée ; +- check/Clippy/build `wasm32-unknown-unknown` de `game-realtime-webtransport-lib` ; +- build Vite/TypeScript/WASM du host browser et smoke navigateur réel ; +- check Android `aarch64-linux-android` du backend WebTransport si la cible/NDK de l'environnement sont disponibles, sans APK/AAB ni modification Gradle/JNI ; +- `cargo tree` direct/inverse des deux backends et vérification qu'aucun engine/gameplay ne dépend d'un backend concret. -Toute capacité fonctionnelle majeure manquante réouvre une alpha ; un défaut fermé produit `beta.1.fix.N`. +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.2` — consolidation pré-RC diff --git a/history/0.3.5/alpha.10.fix.1.md b/history/0.3.5/alpha.10.fix.1.md new file mode 100644 index 0000000..65c0b4f --- /dev/null +++ b/history/0.3.5/alpha.10.fix.1.md @@ -0,0 +1,65 @@ + + + +# Historique 0.3.5-alpha.10.fix.1 + +## Statut + +`0.3.5-alpha.10.fix.1` a été validée par l'utilisateur le 2026-09-22. La caractérisation locale WebSocket/WebTransport est fermée avec une gate complète verte et la conclusion technique provisoire reste de conserver WebTransport comme second backend. + +## Gates + +Les commandes utilisateur ont terminé proprement : + +```text +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-realtime-transport-lib --all-targets --all-features +cargo test -p game-realtime-websocket-lib --all-targets --all-features +cargo test -p game-realtime-webtransport-lib --all-targets --all-features +cargo run --release -p game-realtime-transport-measure +``` + +La sortie 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), 310 file(s)) +Distribution layout audit: clean (66 required path(s), 8 forbidden path(s) absent) +cargo check --workspace: clean +cargo clippy --workspace --all-targets --all-features -- -D warnings: clean +game-realtime-transport-lib: 7 passed; 0 failed +game-realtime-websocket-lib: 11 passed; 0 failed +game-realtime-webtransport-lib: 22 passed; 0 failed +game-realtime-transport-measure: PASS +``` + +## Mesures loopback validées + +Exécution release observée : + +```text +MEASURE transport=websocket metric=establishment samples=8 payload_bytes=0 min_us=25 median_us=29 p95_us=155 max_us=155 +MEASURE transport=webtransport metric=establishment samples=8 payload_bytes=0 min_us=696 median_us=754 p95_us=1175 max_us=1175 +MEASURE transport=websocket metric=rtt samples=128 payload_bytes=32 min_us=18 median_us=18 p95_us=18 max_us=24 +MEASURE transport=webtransport metric=rtt samples=128 payload_bytes=32 min_us=11 median_us=12 p95_us=12 max_us=16 +MEASURE transport=websocket metric=throughput messages=128 payload_bytes=65536 total_bytes=8388608 elapsed_us=2728 mib_per_s=2931.704 messages_per_s=46907.272 +MEASURE transport=webtransport metric=throughput messages=128 payload_bytes=65536 total_bytes=8388608 elapsed_us=12331 mib_per_s=648.746 messages_per_s=10379.940 +MEASURE transport=websocket metric=in_flight_window messages=64 payload_bytes=1024 total_bytes=65536 elapsed_us=44356 mib_per_s=1.409 messages_per_s=1442.849 +MEASURE transport=webtransport metric=in_flight_window messages=64 payload_bytes=1024 total_bytes=65536 elapsed_us=338 mib_per_s=184.496 messages_per_s=188923.755 +MEASURE transport=webtransport-datagram metric=bounded_burst attempted=64 received=64 receive_ratio=1.000000 payload_bytes=256 client_max=1381 server_max=1381 elapsed_us=80 +CONCLUSION webtransport=retain scope=second-backend reason=reliable-browser-fallback-datagram-capabilities +``` + +Ces chiffres caractérisent uniquement le loopback de cette exécution. Ils ne constituent ni un classement global des protocoles ni une prédiction des performances Internet/mobile. Les profils favorisent des chemins différents selon la métrique, ce qui renforce la décision de conserver les deux backends plutôt que d'inférer un vainqueur unique. + +## Conséquence + +Toutes les tranches alpha prévues de `0.3.5` sont fermées. `0.3.5-beta.1` peut exécuter la validation large : full workspace, smokes retenus, navigateur/WASM, fallback, graphe de dépendances et contrôle Android ciblé si l'environnement le permet.