0.3.5-beta.1
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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 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.
|
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
105
deltas/0.3.5/beta.1.md
Normal 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`.
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
65
history/0.3.5/alpha.10.fix.1.md
Normal file
65
history/0.3.5/alpha.10.fix.1.md
Normal 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.
|
||||||
Reference in New Issue
Block a user