0.3.5-alpha.9
This commit is contained in:
180
deltas/0.3.5/alpha.9.md
Normal file
180
deltas/0.3.5/alpha.9.md
Normal file
@@ -0,0 +1,180 @@
|
||||
<!-- file: deltas/0.3.5/alpha.9.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.3.5-alpha.9
|
||||
|
||||
## Base requise
|
||||
|
||||
`0.3.5-alpha.8.fix.1`, validée par l'utilisateur le 2026-09-22.
|
||||
|
||||
La gate finale confirme fmt, audits, `cargo check --workspace`, Clippy strict, les deux tests du launcher fallback et le smoke réel terminé par :
|
||||
|
||||
```text
|
||||
game-realtime-transport-fallback-smoke: PASS
|
||||
```
|
||||
|
||||
La preuve est enregistrée dans `history/0.3.5/alpha.8.fix.1.md`.
|
||||
|
||||
## Objectif
|
||||
|
||||
Challenger les datagrams WebTransport comme capacité backend-spécifique sans modifier le contrat fiable transport-neutral :
|
||||
|
||||
- émission/réception native réelle ;
|
||||
- surface équivalente compilable côté navigateur/WASM ;
|
||||
- taille maximale de datagram obtenue depuis la session ;
|
||||
- rejet local des payloads trop grands ;
|
||||
- preuve runtime locale bornée ;
|
||||
- aucune garantie de livraison ou d'ordre ajoutée ;
|
||||
- aucune API datagram dans `game-realtime-transport-lib`.
|
||||
|
||||
## Version
|
||||
|
||||
La version workspace passe à :
|
||||
|
||||
```text
|
||||
0.3.5-alpha.9
|
||||
```
|
||||
|
||||
## Capacité backend-spécifique
|
||||
|
||||
`WebTransportSession` expose désormais sur les chemins natif et navigateur :
|
||||
|
||||
```text
|
||||
max_datagram_size()
|
||||
send_datagram(...)
|
||||
receive_datagram()
|
||||
```
|
||||
|
||||
Cette surface reste propre à `game-realtime-webtransport-lib`.
|
||||
|
||||
Les datagrams WebTransport sont non fiables et non ordonnés. Ils ne satisfont donc pas les invariants de `RealtimeConnection`, qui reste le chemin fiable ordonné commun à WebSocket et WebTransport.
|
||||
|
||||
Le backend vérifie la taille avant émission et retourne `TransportErrorKind::MessageTooLarge` lorsque le payload dépasse `max_datagram_size()` pour la session courante.
|
||||
|
||||
`receive_datagram()` n'introduit aucune deadline implicite. Une attente bornée relève du consommateur/POC, car la perte d'un datagram est un résultat valide et ne doit pas être transformée en erreur de protocole commune.
|
||||
|
||||
## Natif
|
||||
|
||||
Le chemin natif utilise directement les primitives de `web-transport-quinn 0.12.1` :
|
||||
|
||||
```text
|
||||
Session::max_datagram_size
|
||||
Session::send_datagram
|
||||
Session::read_datagram
|
||||
```
|
||||
|
||||
Un test d'intégration couvre :
|
||||
|
||||
- session loopback avec pin SHA-256 exact ;
|
||||
- datagram client -> serveur ;
|
||||
- datagram serveur -> client ;
|
||||
- attente bornée côté test ;
|
||||
- rejet local d'un payload supérieur à la taille négociée.
|
||||
|
||||
## WASM
|
||||
|
||||
Le chemin `wasm32-unknown-unknown` expose la même capacité via `web-transport-wasm 0.6.0` :
|
||||
|
||||
```text
|
||||
Session::max_datagram_size
|
||||
Session::send_datagram
|
||||
Session::recv_datagram
|
||||
```
|
||||
|
||||
`send_datagram(...)` est asynchrone côté navigateur conformément à la surface du wrapper.
|
||||
|
||||
La tranche ne réouvre pas le smoke navigateur interactif : `alpha.7.fix.2` reste la preuve navigateur du chemin fiable. La gate WASM de `alpha.9` vérifie que la nouvelle capacité compile sur la cible navigateur.
|
||||
|
||||
## Smoke datagram natif
|
||||
|
||||
Nouveau launcher technique :
|
||||
|
||||
```text
|
||||
crates/apps/game-realtime-webtransport-datagram-smoke
|
||||
```
|
||||
|
||||
Le smoke :
|
||||
|
||||
1. génère une identité P-256 loopback en mémoire ;
|
||||
2. bind un serveur WebTransport sur port éphémère ;
|
||||
3. établit client et serveur avec pin SHA-256 exact ;
|
||||
4. lit les tailles maximales datagram des deux sessions ;
|
||||
5. envoie un datagram client -> serveur ;
|
||||
6. attend sa réception sous une deadline locale de 2 s ;
|
||||
7. envoie un datagram serveur -> client ;
|
||||
8. attend sa réception sous la même deadline ;
|
||||
9. termine par un verdict déterministe.
|
||||
|
||||
Résultat attendu :
|
||||
|
||||
```text
|
||||
game-realtime-webtransport-datagram-smoke: PASS
|
||||
```
|
||||
|
||||
Le smoke ne teste pas l'ordre et ne prétend pas garantir la livraison. Un timeout de réception est reporté comme échec du smoke local, avec un message rappelant explicitement que la livraison datagram n'est pas garantie.
|
||||
|
||||
## Frontières
|
||||
|
||||
Le delta ne modifie pas :
|
||||
|
||||
- `game-realtime-transport-lib` ;
|
||||
- `RealtimeConnection` / `RealtimeSender` / `RealtimeReceiver` ;
|
||||
- `game-realtime-websocket-lib` ;
|
||||
- le fallback `alpha.8` ;
|
||||
- les engines ;
|
||||
- les crates gameplay.
|
||||
|
||||
La décision de `alpha.9` est donc : **capacité WebTransport backend-spécifique utile à conserver pour expérimentation/mesure, sans promotion au contrat commun**.
|
||||
|
||||
## Fichiers principaux
|
||||
|
||||
Nouveaux :
|
||||
|
||||
```text
|
||||
crates/apps/game-realtime-webtransport-datagram-smoke/Cargo.toml
|
||||
crates/apps/game-realtime-webtransport-datagram-smoke/src/main.rs
|
||||
crates/common/game-realtime-webtransport-lib/tests/datagrams.rs
|
||||
deltas/0.3.5/alpha.9.md
|
||||
history/0.3.5/alpha.8.fix.1.md
|
||||
```
|
||||
|
||||
Modifiés :
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
README.md
|
||||
crates/common/game-realtime-webtransport-lib/README.md
|
||||
crates/common/game-realtime-webtransport-lib/USAGE.md
|
||||
crates/common/game-realtime-webtransport-lib/src/webtransport.rs
|
||||
crates/common/game-realtime-webtransport-lib/src/webtransport_wasm.rs
|
||||
docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md
|
||||
scripts/audit_distribution_layout.py
|
||||
```
|
||||
|
||||
## 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 test -p game-realtime-webtransport-lib --all-targets --all-features
|
||||
cargo run -p game-realtime-webtransport-datagram-smoke
|
||||
|
||||
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 tree -p game-realtime-webtransport-datagram-smoke --edges normal
|
||||
cargo tree -i game-realtime-webtransport-lib --workspace --edges normal
|
||||
```
|
||||
|
||||
## Après validation
|
||||
|
||||
Créer `history/0.3.5/alpha.9.md` à partir des sorties réellement fournies puis ouvrir `0.3.5-alpha.10` pour les mesures comparatives bornées WebSocket / WebTransport fiable, avec datagram uniquement comme capacité WebTransport séparée.
|
||||
Reference in New Issue
Block a user