# Delta 0.3.4-alpha.2 ## Base Base : `0.3.4-alpha.1` validée par l'utilisateur le 2026-09-21. Cette tranche matérialise uniquement la frontière transport-neutral prévue par le plan `0.3.4`. Elle n'ajoute encore ni Tokio, ni Tungstenite, ni socket, ni protocole de session/gameplay. ## Historique fermé Ajout de : ```text history/0.3.4/alpha.1.md ``` L'entrée enregistre les gates effectivement fournies par l'utilisateur pour `alpha.1`, notamment le rebuild complet après `cargo clean`, les audits propres, `cargo check --workspace` et Clippy workspace strict. ## Nouvelle crate `game-realtime-transport-lib` Ajout de : ```text crates/common/game-realtime-transport-lib/Cargo.toml crates/common/game-realtime-transport-lib/src/lib.rs crates/common/game-realtime-transport-lib/src/connection.rs crates/common/game-realtime-transport-lib/src/error.rs crates/common/game-realtime-transport-lib/src/message.rs crates/common/game-realtime-transport-lib/unit_tests/contract.rs ``` La crate appartient à `crates/common/` car le contrat realtime est indépendant d'une génération de moteur et d'un backend réseau concret. Elle ne possède aucune dépendance tierce. ## Contrat public Le payload transport est `TransportMessage`, un buffer binaire possédé sans sémantique gameplay ni codec. `TransportReceive` distingue explicitement : ```text Message(TransportMessage) Closed ``` Une fermeture distante propre n'est donc pas confondue avec une erreur I/O. Les contrats sont : ```text RealtimeConnection RealtimeSender RealtimeReceiver ``` `RealtimeConnection::split()` produit les deux moitiés indépendantes. Les opérations `send`, `close` et `receive` restent async sans imposer un runtime particulier. L'implémentation du contrat utilise des futures associées GAT. Cette forme évite une allocation `Box`, conserve le dispatch statique et n'impose pas de borne `Send` au niveau transport-neutral. Un backend natif reste libre de fournir des futures `Send`; un backend navigateur/WASM futur n'est pas exclu artificiellement. ## Erreurs `TransportError` conserve une catégorie stable `TransportErrorKind` et un détail diagnostic backend-neutral. Les catégories de baseline sont : ```text InvalidConfiguration Connect Bind Accept Timeout MessageTooLarge Backpressure Closed Io Protocol Aborted ``` Les futurs types d'erreur Tungstenite ne sont pas exposés par cette crate. ## Tests Les tests unitaires couvrent : - conservation du payload binaire possédé, y compris le payload vide ; - distinction message/fermeture propre ; - split sender/receiver ; - futures associées de send/receive/close avec une implémentation test sans runtime ; - catégorie, détail et libellés des erreurs. Aucun test réseau n'existe dans cette tranche puisqu'aucun backend réseau n'existe encore. ## Documentation locale Aucun `README.md` ni `USAGE.md` local n'est ajouté pendant `alpha.2`. La crate est volontairement petite, son contrat est documenté par rustdoc et le plan central couvre encore ses frontières ; créer un guide local maintenant dupliquerait ces sources sans valeur durable supplémentaire. Ce choix sera réévalué pendant la consolidation finale conformément à `DOC-CRATE-001`. ## Fichiers existants modifiés ```text Cargo.toml README.md docs/plans/004-V0_3_4_REALTIME_TRANSPORT_WEBSOCKET_PLAN.md ``` `Cargo.toml` ajoute le membre workspace et passe la version technique à `0.3.4-alpha.2`. Le README racine annonce la candidate active. Le plan enregistre la validation de `alpha.1` et ferme le choix des futures associées GAT pour le contrat commun. `ROADMAP.md` et `CHANGELOG.md` ne changent pas : le scope macroscopique de `0.3.4` est inchangé et une alpha n'ajoute normalement pas d'entrée de changelog. ## Validation attendue Appliquer d'abord le formatage canonique, puis exécuter : ```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 ``` Aucune gate Android, Web/Tauri ou réseau n'est requise : cette tranche n'affecte ni leurs contrats ni un backend socket.