0.3.5-alpha.3

This commit is contained in:
2026-09-21 22:55:21 +02:00
parent 5b7939cbd8
commit fd6ffecdf5
11 changed files with 750 additions and 37 deletions

View File

@@ -1,11 +1,11 @@
<!-- file: docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md -->
<!-- version: 3 -->
<!-- version: 4 -->
# 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` et son correctif de validation `0.3.5-alpha.2.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` et le chemin fiable candidat de `0.3.5-alpha.3`.
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.
@@ -75,6 +75,23 @@ L'identité locale générée est ECDSA P-256/SHA-256, contient les SAN `localho
La gate de `alpha.2` a confirmé compilation, Clippy, configuration TLS/pinning et rejet dun mauvais pin, mais le test positif comparait strictement `127.0.0.1:port` à sa représentation IPv4-mapped IPv6 `[::ffff:127.0.0.1]:port` remontée par Quinn. `alpha.2.fix.1` normalise uniquement cette représentation dans le test dintégration ; aucun contrat, comportement transport ou scope de `alpha.3` nest modifié.
### Fermeture du chemin fiable en alpha.3
`alpha.3` conserve `game-realtime-transport-lib` inchangé et adapte le backend concret à ses traits. Une `WebTransportSession` devient une `WebTransportConnection` après sélection d'un unique stream bidirectionnel primaire : le client l'ouvre, le serveur l'accepte. Le `split()` conserve une copie de la session dans chaque moitié afin que la session QUIC/WebTransport ne soit pas fermée au moment où l'objet connexion est consommé.
Le framing privé est exactement :
```text
u32 big-endian payload length
payload bytes
```
La borne POC est fixée à 1 MiB par message dans cette tranche. Elle est vérifiée avant écriture et, surtout, avant allocation côté réception. Cette limite reste interne : `alpha.4` décide sa configuration produit avec deadlines, backpressure, reset/abort/cancellation et mapping d'erreurs détaillé.
Le FIN du stream primaire constitue la fermeture logique de base de `alpha.3` et produit `TransportReceive::Closed` après consommation des messages déjà écrits. La fermeture de session complète et les scénarios de lifecycle avancés restent explicitement réservés à `alpha.4`.
`web-transport-quinn` écrit l'en-tête WebTransport du stream durant `open_bi()` avant de rendre le stream au code appelant. L'accept serveur peut donc terminer avant la première frame applicative ; le framing games.sasedev commence directement au premier octet applicatif et n'ajoute aucun préambule de visibilité.
### Ownership physique
Nouveau backend durable candidat :
@@ -380,13 +397,18 @@ Pas encore d'implémentation complète `RealtimeConnection` si cela rend la tran
### `0.3.5-alpha.3` — stream fiable et contrat commun
Tranche candidate matérialisée avec :
- stream bidirectionnel principal ;
- framing `u32 + payload` borné ;
- framing `u32 + payload` borné avant allocation ;
- borne POC interne de 1 MiB ;
- `RealtimeConnection`, sender et receiver ;
- round-trip ordonné multi-message ;
- fermeture distante de base ;
- round-trip ordonné multi-message, y compris payload vide et octets non UTF-8 ;
- fermeture distante de base par FIN du stream primaire ;
- tests loopback ciblés ;
- USAGE si l'API/configuration devient non triviale.
- `USAGE.md` pour la séquence session -> stream primaire -> contrat commun.
La gate utilisateur reste requise avant d'ouvrir `alpha.4`.
### `0.3.5-alpha.4` — robustesse et lifecycle