# Historique 0.3.5-alpha.8.fix.1 ## Statut `0.3.5-alpha.8.fix.1` a été validée par l'utilisateur le 2026-09-22. La tranche de composition WebTransport-first / fallback WebSocket est fermée sans modification du contrat transport-neutral. ## 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-fallback-smoke --all-targets --all-features cargo run -p game-realtime-transport-fallback-smoke ``` 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), 303 file(s)) Distribution layout audit: clean (61 required path(s), 8 forbidden path(s) absent) cargo check --workspace: clean cargo clippy --workspace --all-targets --all-features -- -D warnings: clean fallback selector tests: 2 passed; 0 failed ``` ## Smoke de composition Le launcher réel confirme successivement : ```text preferred transport branch passed selected="webtransport" WebTransport unavailable; attempting classified WebSocket fallback classified fallback branch passed selected="websocket" non-fallback error remained visible kind=invalid configuration game-realtime-transport-fallback-smoke: PASS ``` Le fallback reste donc limité à `Timeout`/`Io`. Les erreurs ambiguës `Connect` et les erreurs de configuration/protocole ne sont pas transformées en downgrade silencieux. ## Conséquence `alpha.9` peut challenger séparément la capacité datagram WebTransport. Cette capacité reste backend-spécifique et ne doit pas modifier `RealtimeConnection`, qui représente le chemin fiable ordonné commun à WebSocket et WebTransport.