From 48de882f703ee8363014b5542c03e5b893650576 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Mon, 21 Sep 2026 23:40:22 +0200 Subject: [PATCH] 0.3.5-alpha.4.fix.1 --- Cargo.toml | 4 +- README.md | 6 +- .../src/webtransport.rs | 4 +- deltas/0.3.5/alpha.4.fix.1.md | 96 +++++++++++++++++++ .../005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md | 8 +- 5 files changed, 108 insertions(+), 10 deletions(-) create mode 100644 deltas/0.3.5/alpha.4.fix.1.md diff --git a/Cargo.toml b/Cargo.toml index 1e5eec4..3e5519e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ # file: Cargo.toml -# version: 99 +# version: 100 [workspace] resolver = "3" @@ -25,7 +25,7 @@ members = [ ] [workspace.package] -version = "0.3.5-alpha.4" +version = "0.3.5-alpha.4.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/games" diff --git a/README.md b/README.md index d040796..3580728 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - + # games.sasedev @@ -27,9 +27,9 @@ Workspace expérimental puis productif pour des jeux multiplateformes principale Version stable de référence : `0.3.4`. -Version active : `0.3.5-alpha.4`. `0.3.2` reste différée. +Version active : `0.3.5-alpha.4.fix.1`. `0.3.2` reste différée. -La stable `0.3.4` livre la première baseline realtime : contrat binaire transport-neutral, backend WebSocket Tokio/tokio-tungstenite, limites et deadlines, tests loopback/robustesse, smoke runtime localhost public et frontières de dépendances empêchant moteurs et gameplay de dépendre d'un backend concret. `0.3.5-alpha.4` consolide le backend WebTransport natif avec limite de message configurable, deadlines connexion/stream/send, mapping d'erreurs, reset/abort/drop explicites et parseur de framing incrémental résistant à l'annulation. Navigateur/WASM, smoke public, fallback et datagrams restent réservés aux tranches suivantes. +La stable `0.3.4` livre la première baseline realtime : contrat binaire transport-neutral, backend WebSocket Tokio/tokio-tungstenite, limites et deadlines, tests loopback/robustesse, smoke runtime localhost public et frontières de dépendances empêchant moteurs et gameplay de dépendre d'un backend concret. `0.3.5-alpha.4.fix.1` consolide le backend WebTransport natif avec limite de message configurable, deadlines connexion/stream/send, mapping d'erreurs, reset/abort/drop explicites et parseur de framing incrémental résistant à l'annulation ; le fix ferme uniquement le lint strict `implicit-return` révélé par la gate de `alpha.4` sans changer le comportement runtime. Navigateur/WASM, smoke public, fallback et datagrams restent réservés aux tranches suivantes. Les deux premiers jeux sont des POC structurels : `game-reflex-poc` et `game-snake-poc`. Ils existent d'abord pour valider les frontières du workspace, le moteur, les assets et le packaging multiplateforme. diff --git a/crates/common/game-realtime-webtransport-lib/src/webtransport.rs b/crates/common/game-realtime-webtransport-lib/src/webtransport.rs index 29b127e..1ccce5f 100644 --- a/crates/common/game-realtime-webtransport-lib/src/webtransport.rs +++ b/crates/common/game-realtime-webtransport-lib/src/webtransport.rs @@ -1,5 +1,5 @@ // file: crates/common/game-realtime-webtransport-lib/src/webtransport.rs -// version: 3 +// version: 4 const CERTIFICATE_HASH_SIZE: usize = 32; const LOCAL_CERTIFICATE_CLOCK_SKEW: std::time::Duration = std::time::Duration::from_secs(60); @@ -446,7 +446,7 @@ impl game_realtime_transport_lib::RealtimeReceiver for WebTransportReceiver { Self: 'a; fn receive(&mut self) -> Self::ReceiveFuture<'_> { - return Box::pin(async move { self.receive_frame().await }); + return Box::pin(async move { return self.receive_frame().await }); } } diff --git a/deltas/0.3.5/alpha.4.fix.1.md b/deltas/0.3.5/alpha.4.fix.1.md new file mode 100644 index 0000000..39e28ca --- /dev/null +++ b/deltas/0.3.5/alpha.4.fix.1.md @@ -0,0 +1,96 @@ + + + +# Delta 0.3.5-alpha.4.fix.1 + +## Base requise + +`0.3.5-alpha.4`, candidate dont la gate utilisateur du 2026-09-21 a passé fmt, audits, `cargo check`, les sept tests du contrat realtime commun et l'ensemble des vingt tests WebTransport, mais a échoué sur Clippy strict. + +`alpha.4` n'est pas historisée comme validée : `cargo clippy --workspace --all-targets --all-features -- -D warnings` reste rouge jusqu'à ce correctif. + +## Cause + +Clippy signale une unique violation `clippy::implicit-return` dans l'implémentation de `RealtimeReceiver::receive()` : + +```text +error: missing `return` statement + --> crates/common/game-realtime-webtransport-lib/src/webtransport.rs:449:38 + +return Box::pin(async move { self.receive_frame().await }); + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +``` + +Le `return` externe est déjà explicite, mais la closure `async move` contient encore une expression terminale implicite, interdite par les règles Clippy strictes du workspace. + +Les mêmes résultats fournis par l'utilisateur confirment parallèlement que : + +- les audits Rust/workspace, Markdown et distribution sont propres ; +- `cargo check --workspace` est propre ; +- les sept tests de `game-realtime-transport-lib` passent ; +- les onze tests unitaires, deux tests d'établissement, un test de round-trip et six tests de robustesse de `game-realtime-webtransport-lib` passent ; +- le graphe direct/inverse du backend WebTransport reste celui attendu. + +Le défaut est donc purement un écart de style/lint ; aucun défaut fonctionnel WebTransport n'est observé dans cette gate. + +## Correction + +La version technique passe à : + +```text +0.3.5-alpha.4.fix.1 +``` + +La future retournée par `RealtimeReceiver::receive()` explicite aussi son `return` interne : + +```rust +return Box::pin(async move { return self.receive_frame().await }); +``` + +Aucun comportement runtime, état du parseur incrémental, framing, deadline, mapping d'erreur, lifecycle, API publique ou dépendance n'est modifié. + +## Fichiers modifiés + +```text +Cargo.toml +README.md +crates/common/game-realtime-webtransport-lib/src/webtransport.rs +docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md +``` + +Nouveau fichier : + +```text +deltas/0.3.5/alpha.4.fix.1.md +``` + +Aucun fichier `history/0.3.5/alpha.4.md` n'est créé avant une gate entièrement verte du correctif. + +## Plan + +Le forecast fonctionnel ne change pas. Après validation de ce fix, `0.3.5-alpha.5` reste strictement la tranche du smoke WebTransport natif hors harness. + +## Validation attendue + +Le correctif touche du code Rust et la version workspace ; 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-transport-lib --all-targets --all-features +cargo test -p game-realtime-webtransport-lib --all-targets --all-features +``` + +Aucun `cargo tree` supplémentaire n'est requis : ce fix ne change ni dépendance, ni feature, ni frontière de crate, et le tree de `alpha.4` a déjà été produit. + +## Après validation + +Créer `history/0.3.5/alpha.4.fix.1.md` à partir des résultats réellement fournis, puis ouvrir directement `0.3.5-alpha.5`. diff --git a/docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md b/docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md index b2fc280..7c97224 100644 --- a/docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md +++ b/docs/plans/005-V0_3_5_WEBTRANSPORT_QUIC_POC_PLAN.md @@ -1,11 +1,11 @@ - + # 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`, son correctif de validation `0.3.5-alpha.2.fix.1`, le chemin fiable validé de `0.3.5-alpha.3` et la robustesse candidate de `0.3.5-alpha.4`. +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`, le chemin fiable validé de `0.3.5-alpha.3`, la robustesse candidate de `0.3.5-alpha.4` et son correctif de gate `0.3.5-alpha.4.fix.1`. 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. @@ -455,7 +455,9 @@ Tranche candidate matérialisée avec : - mapping backend -> `Timeout`, `MessageTooLarge`, `Closed`, `Protocol`, `Aborted` ou `Io` ; - tests ciblés sur limites, reset/drop, deadline du stream, cancellation de receive et frame tronquée. -Un timeout d'idle de `receive()` n'est volontairement pas imposé au contrat : l'appelant peut borner/annuler l'attente sans corrompre l'état du frame parser. Un test artificiel de saturation/backpressure n'est pas ajouté tant qu'il n'est pas déterministe. La gate utilisateur reste requise avant d'ouvrir `alpha.5`. +Un timeout d'idle de `receive()` n'est volontairement pas imposé au contrat : l'appelant peut borner/annuler l'attente sans corrompre l'état du frame parser. Un test artificiel de saturation/backpressure n'est pas ajouté tant qu'il n'est pas déterministe. + +La gate utilisateur de `alpha.4` a confirmé fmt, audits, `cargo check`, tous les tests du contrat commun et les vingt tests WebTransport, mais Clippy strict a détecté un unique `clippy::implicit-return` dans la future retournée par `RealtimeReceiver::receive()`. `alpha.4.fix.1` explicite ce `return` sans changement sémantique, d'API, de framing, de lifecycle ou de dépendance. La gate complète du fix reste requise avant d'ouvrir `alpha.5`. ### `0.3.5-alpha.5` — smoke natif hors harness