0.3.5-beta.1

This commit is contained in:
2026-09-22 09:01:57 +02:00
parent 974ac28f35
commit 687b746381
5 changed files with 198 additions and 18 deletions

View File

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

View File

@@ -1,5 +1,5 @@
<!-- file: README.md --> <!-- file: README.md -->
<!-- version: 78 --> <!-- version: 79 -->
# games.sasedev # 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 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 nentre toujours pas dans `RealtimeConnection`. La conclusion technique provisoire reste de conserver WebTransport comme second backend à côté de WebSocket, sans prétendre quun 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 najoute 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 quun 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. 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.

105
deltas/0.3.5/beta.1.md Normal file
View File

@@ -0,0 +1,105 @@
<!-- file: deltas/0.3.5/beta.1.md -->
<!-- version: 1 -->
# 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`.

View File

@@ -1,11 +1,11 @@
<!-- file: docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md --> <!-- file: docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md -->
<!-- version: 17 --> <!-- version: 18 -->
# Plan 0.3.5 — POC WebTransport/QUIC et fallback WebSocket # Plan 0.3.5 — POC WebTransport/QUIC et fallback WebSocket
## Statut ## 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. 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 ### `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 ```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 test --workspace --all-targets --all-features
``` ```
Plus : Preuves realtime et multiplateformes retenues :
- fmt/check/Clippy/audits ; - smoke WebSocket natif ;
- tests ciblés realtime ; - smoke WebTransport fiable natif ;
- smoke WebSocket ; - smoke datagram WebTransport natif ;
- smoke WebTransport natif ; - preuve WebTransport-first puis fallback WebSocket classifié ;
- smoke navigateur si retenu ; - caractérisation release bornée ;
- preuve fallback ; - check/Clippy/build `wasm32-unknown-unknown` de `game-realtime-webtransport-lib` ;
- `cargo tree` direct/inverse des deux backends ; - build Vite/TypeScript/WASM du host browser et smoke navigateur réel ;
- vérification qu'aucun gameplay/engine ne dépend d'un backend concret. - 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 ### `0.3.5-beta.2` — consolidation pré-RC

View File

@@ -0,0 +1,65 @@
<!-- file: history/0.3.5/alpha.10.fix.1.md -->
<!-- version: 1 -->
# 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.