0.3.5-alpha.6
This commit is contained in:
155
deltas/0.3.5/alpha.6.md
Normal file
155
deltas/0.3.5/alpha.6.md
Normal file
@@ -0,0 +1,155 @@
|
||||
<!-- file: deltas/0.3.5/alpha.6.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.3.5-alpha.6
|
||||
|
||||
## Base requise
|
||||
|
||||
`0.3.5-alpha.5`, validée par l'utilisateur le 2026-09-21 avec fmt, audits, `cargo check`, Clippy strict, les sept tests du contrat realtime commun, les vingt tests WebTransport, le smoke natif hors harness avec verdict `PASS` et les graphes de dépendances attendus.
|
||||
|
||||
La preuve est enregistrée dans `history/0.3.5/alpha.5.md`.
|
||||
|
||||
## Objectif
|
||||
|
||||
Fermer la preuve de compilation du client WebTransport Rust en `wasm32-unknown-unknown` sans encore créer de host navigateur ni attribuer un smoke runtime.
|
||||
|
||||
Cette tranche doit conserver le backend natif intact tout en donnant au navigateur le même contrat fiable : pin SHA-256 explicite, session WebTransport, stream bidirectionnel primaire, framing `u32` big-endian + payload et `RealtimeConnection`.
|
||||
|
||||
## Version
|
||||
|
||||
La version workspace passe à :
|
||||
|
||||
```text
|
||||
0.3.5-alpha.6
|
||||
```
|
||||
|
||||
## Dépendances et cfg
|
||||
|
||||
La contrainte workspace suivante est ajoutée :
|
||||
|
||||
```text
|
||||
web-transport-wasm = 0.6.0
|
||||
```
|
||||
|
||||
Dans `game-realtime-webtransport-lib` :
|
||||
|
||||
- `rcgen`, Tokio et `web-transport-quinn` deviennent des dépendances uniquement non-WASM ;
|
||||
- `web-transport-wasm` est tirée uniquement pour `target_arch = "wasm32"` ;
|
||||
- les dev-dependencies Tokio de la suite native restent elles aussi non-WASM.
|
||||
|
||||
`.cargo/config.toml` fournit uniquement à `wasm32-unknown-unknown` :
|
||||
|
||||
```text
|
||||
--cfg=web_sys_unstable_apis
|
||||
```
|
||||
|
||||
Le flag est déclaré pour rustc et rustdoc ; aucun build natif ne le reçoit.
|
||||
|
||||
## Client WASM
|
||||
|
||||
Le module WASM expose sous le même nom que le client natif :
|
||||
|
||||
```text
|
||||
WebTransportCertificateHash
|
||||
WebTransportClientConfig
|
||||
connect
|
||||
WebTransportSession
|
||||
WebTransportConnection
|
||||
WebTransportSender
|
||||
WebTransportReceiver
|
||||
```
|
||||
|
||||
Les types serveur natifs restent absents du target WASM.
|
||||
|
||||
Le client navigateur :
|
||||
|
||||
1. valide un endpoint `https://` ;
|
||||
2. transmet le hash SHA-256 exact via `serverCertificateHashes` ;
|
||||
3. exige le chemin WebTransport/QUIC sans fallback TCP implicite du wrapper ;
|
||||
4. établit une session navigateur ;
|
||||
5. ouvre le stream bidirectionnel primaire ;
|
||||
6. adapte le stream au contrat `game-realtime-transport-lib`.
|
||||
|
||||
Le framing reste :
|
||||
|
||||
```text
|
||||
u32 big-endian payload length
|
||||
payload bytes
|
||||
```
|
||||
|
||||
La limite configurée est contrôlée avant écriture et avant allocation. Le sender applique FIN et reset ; le receiver applique STOP_SENDING et conserve un parseur incrémental compatible avec l'abandon/reprise d'une future de réception.
|
||||
|
||||
Les types navigateur sont `!Send`, mais le contrat `RealtimeConnection` n'impose volontairement aucun bound `Send`; aucune modification du contrat commun n'est donc nécessaire.
|
||||
|
||||
## Différence runtime explicitement différée
|
||||
|
||||
`WebTransportConfig` continue de valider `connect_timeout`, `primary_stream_timeout` et `send_timeout` afin de ne pas accepter une configuration incohérente. Dans `alpha.6`, ces deadlines ne sont cependant pas encore matérialisées par un timer côté navigateur.
|
||||
|
||||
Le wrapper `web-transport-wasm` conserve ses opérations Web API abandonnées dans son état de polling ; la tranche `alpha.7` doit fixer puis prouver la politique de timeout/runtime avec un vrai navigateur avant de déclarer la parité comportementale avec le chemin natif.
|
||||
|
||||
Cette différence est documentée et n'est pas masquée comme une validation runtime.
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
.cargo/config.toml
|
||||
Cargo.toml
|
||||
README.md
|
||||
crates/common/game-realtime-webtransport-lib/Cargo.toml
|
||||
crates/common/game-realtime-webtransport-lib/README.md
|
||||
crates/common/game-realtime-webtransport-lib/USAGE.md
|
||||
crates/common/game-realtime-webtransport-lib/src/config.rs
|
||||
crates/common/game-realtime-webtransport-lib/src/lib.rs
|
||||
docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md
|
||||
```
|
||||
|
||||
Nouveaux fichiers :
|
||||
|
||||
```text
|
||||
crates/common/game-realtime-webtransport-lib/src/webtransport_wasm.rs
|
||||
deltas/0.3.5/alpha.6.md
|
||||
history/0.3.5/alpha.5.md
|
||||
```
|
||||
|
||||
## Validation attendue
|
||||
|
||||
Gate native de non-régression :
|
||||
|
||||
```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-transport-lib --all-targets --all-features
|
||||
cargo test -p game-realtime-webtransport-lib --all-targets --all-features
|
||||
cargo run -p game-realtime-webtransport-smoke
|
||||
```
|
||||
|
||||
Gate WASM ciblée :
|
||||
|
||||
```bash
|
||||
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-lib --target wasm32-unknown-unknown --edges normal
|
||||
cargo tree -i web-transport-wasm --workspace --target wasm32-unknown-unknown --edges normal
|
||||
```
|
||||
|
||||
Le build WASM ne doit tirer ni `web-transport-quinn`, ni rcgen, ni le runtime Tokio du backend natif.
|
||||
|
||||
Le smoke natif doit toujours se terminer par :
|
||||
|
||||
```text
|
||||
game-realtime-webtransport-smoke: PASS
|
||||
```
|
||||
|
||||
## Après validation
|
||||
|
||||
Créer `history/0.3.5/alpha.6.md` à partir des sorties réellement fournies, puis ouvrir `0.3.5-alpha.7` pour le smoke navigateur/TLS local réel et la fermeture de la politique de deadlines navigateur.
|
||||
Reference in New Issue
Block a user