92 lines
3.1 KiB
Markdown
92 lines
3.1 KiB
Markdown
<!-- file: deltas/0.3.5/alpha.2.fix.1.md -->
|
||
<!-- version: 1 -->
|
||
|
||
# Delta 0.3.5-alpha.2.fix.1
|
||
|
||
## Base requise
|
||
|
||
`0.3.5-alpha.2`, candidate dont la gate utilisateur du 2026-09-21 a atteint les tests d’intégration WebTransport après fmt, audits, check workspace et Clippy propres.
|
||
|
||
## Cause
|
||
|
||
Le test positif d’établissement ouvre correctement la session WebTransport mais échoue sur l’assertion d’adresse distante :
|
||
|
||
```text
|
||
left: [::ffff:127.0.0.1]:54430
|
||
right: 127.0.0.1:54430
|
||
```
|
||
|
||
Quinn expose ici l’adresse IPv4 loopback sous forme IPv4-mapped IPv6. Les deux valeurs désignent la même IP et le même port ; l’assertion brute sur `SocketAddr` confond donc différence de représentation et défaut de transport.
|
||
|
||
La même gate confirme parallèlement que :
|
||
|
||
- les quatre tests unitaires WebTransport passent ;
|
||
- le test de mauvais pin passe ;
|
||
- la compilation workspace et Clippy sont propres ;
|
||
- les audits Rust/workspace, Markdown et distribution sont propres.
|
||
|
||
`alpha.2` n’est pas historisée comme validée : le test d’intégration positif reste rouge jusqu’à ce correctif.
|
||
|
||
## Correction
|
||
|
||
La version technique passe à :
|
||
|
||
```text
|
||
0.3.5-alpha.2.fix.1
|
||
```
|
||
|
||
`tests/establishment.rs` normalise uniquement les `SocketAddr` observées avant comparaison :
|
||
|
||
- une adresse IPv4 reste inchangée ;
|
||
- une IPv6 IPv4-mapped est ramenée à son IPv4 canonique avec le même port ;
|
||
- une IPv6 native reste inchangée.
|
||
|
||
L’assertion continue donc de détecter un port différent, une IPv4 différente ou une IPv6 réellement différente. Elle cesse seulement de considérer `127.0.0.1` et `::ffff:127.0.0.1` comme deux endpoints distincts.
|
||
|
||
Aucun code de production WebTransport, certificat, pinning, configuration Quinn, mapping d’erreur ou API publique n’est modifié.
|
||
|
||
## Fichiers modifiés
|
||
|
||
```text
|
||
Cargo.toml
|
||
README.md
|
||
crates/common/game-realtime-webtransport-lib/tests/establishment.rs
|
||
docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md
|
||
```
|
||
|
||
Nouveau fichier :
|
||
|
||
```text
|
||
deltas/0.3.5/alpha.2.fix.1.md
|
||
```
|
||
|
||
Aucun fichier `history/0.3.5/alpha.2.md` n’est créé avant une gate entièrement verte.
|
||
|
||
## Plan
|
||
|
||
Le forecast fonctionnel ne change pas. Après validation de ce fix, `0.3.5-alpha.3` reste la tranche dédiée au stream bidirectionnel principal, au framing borné `u32 big-endian + payload` et à l’adaptation `RealtimeConnection`.
|
||
|
||
## Validation attendue
|
||
|
||
Le correctif touche un test Rust et la version Cargo ; la gate repart depuis le début :
|
||
|
||
```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
|
||
```
|
||
|
||
Aucun `cargo tree` supplémentaire n’est requis : le graphe de dépendances n’a pas changé et la gate `alpha.2` l’a déjà produit.
|
||
|
||
## Après validation
|
||
|
||
Créer `history/0.3.5/alpha.2.fix.1.md` à partir des résultats réellement fournis, puis ouvrir directement `0.3.5-alpha.3`.
|