0.3.4-alpha.2

This commit is contained in:
2026-09-21 17:21:25 +02:00
parent 27978c3782
commit 4e2be3cc9a
11 changed files with 533 additions and 8 deletions

133
deltas/0.3.4/alpha.2.md Normal file
View File

@@ -0,0 +1,133 @@
<!-- file: deltas/0.3.4/alpha.2.md -->
<!-- version: 1 -->
# 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<dyn Future>`, 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.