From 34637848ebb7566b67c0edacf7eec9e8a7aba585 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Sat, 22 Aug 2026 18:34:52 +0200 Subject: [PATCH] v0.2.7-pre.004-fix.001 --- Cargo.toml | 4 +- .../src/ws_session.rs | 21 ++--- deltas/0.2.7/pre.004-fix.001.md | 79 +++++++++++++++++++ 3 files changed, 93 insertions(+), 11 deletions(-) create mode 100644 deltas/0.2.7/pre.004-fix.001.md diff --git a/Cargo.toml b/Cargo.toml index f47edec..9fc181b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 196 +# version: 197 [workspace] resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"] [workspace.package] -version = "0.2.7-pre.4" +version = "0.2.7-pre.4.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-onchain-transport-lib/src/ws_session.rs b/crates/ksp-onchain-transport-lib/src/ws_session.rs index 2f82d0c..1be46c1 100644 --- a/crates/ksp-onchain-transport-lib/src/ws_session.rs +++ b/crates/ksp-onchain-transport-lib/src/ws_session.rs @@ -1,5 +1,5 @@ // file: crates/ksp-onchain-transport-lib/src/ws_session.rs -// version: 1 +// version: 2 use futures_util::SinkExt; // rust-rules: trait-import use futures_util::StreamExt; // rust-rules: trait-import @@ -262,7 +262,7 @@ async fn handle_session_command( where S: tokio::io::AsyncRead + tokio::io::AsyncWrite + std::marker::Unpin, { - return match command { + match command { WsSessionCommand::ExecuteJsonRpc { method, params, response_tx } => { if pending.len() >= endpoint.session().max_pending_requests() { let error = ksp_core_lib::Error::new(crate::ERROR_CODE_WS_BACKPRESSURE_OVERFLOW, "WebSocket pending JSON-RPC request capacity is exhausted") @@ -328,7 +328,7 @@ where } return true; }, - }; + } } async fn handle_socket_message( @@ -479,10 +479,12 @@ fn next_pending_deadline(pending: &std::collections::BTreeMap) { let now = tokio::time::Instant::now(); - let expired_ids = pending - .iter() - .filter_map(|(request_id, request)| if request.deadline <= now { std::option::Option::Some(*request_id) } else { std::option::Option::None }) - .collect::>(); + let mut expired_ids = std::vec::Vec::new(); + for (request_id, request) in pending.iter() { + if request.deadline <= now { + expired_ids.push(*request_id); + } + } for request_id in expired_ids { if let std::option::Option::Some(request) = pending.remove(&request_id) { let error = ws_timeout_error(id, "WebSocket JSON-RPC request timed out while awaiting the remote response").with_context("method", request.method); @@ -537,8 +539,9 @@ fn publish_snapshot( } fn next_session_id() -> ksp_core_lib::Result { - let update_result = - NEXT_WS_SESSION_ID.fetch_update(std::sync::atomic::Ordering::Relaxed, std::sync::atomic::Ordering::Relaxed, |current| current.checked_add(1)); + let update_result = NEXT_WS_SESSION_ID.fetch_update(std::sync::atomic::Ordering::Relaxed, std::sync::atomic::Ordering::Relaxed, |current| { + return current.checked_add(1); + }); let value = match update_result { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => { diff --git a/deltas/0.2.7/pre.004-fix.001.md b/deltas/0.2.7/pre.004-fix.001.md new file mode 100644 index 0000000..2e0353a --- /dev/null +++ b/deltas/0.2.7/pre.004-fix.001.md @@ -0,0 +1,79 @@ + + + +# Delta `0.2.7-pre.004-fix.001` — conformité Clippy du runtime WebSocket + +## 1. Objet + +Ce correctif ferme les écarts de compilation stricte détectés par la validation opérateur de `0.2.7-pre.004` sans modifier la surface fonctionnelle WebSocket, les dépendances ni l'architecture de session. + +Comme le correctif modifie du code Rust, le signal technique Cargo est synchronisé avec l'identité de livraison conformément aux règles KSP : + +```text +livraison = 0.2.7-pre.004-fix.001 +workspace.package.version = 0.2.7-pre.4.fix.1 +commit = v0.2.7-pre.004-fix.001 +``` + +Aucun tag prerelease. + +## 2. Écarts détectés sur `pre.004` + +La validation opérateur a confirmé : + +- `cargo fmt --all` : OK ; +- `scripts/audit_rust_workspace_rules.py` : clean ; +- `cargo check --workspace` : compilation réussie mais un warning `unreachable_code` dans `ws_session.rs` ; +- `cargo clippy --workspace --all-targets` : échec sur trois violations `clippy::implicit_return` plus le warning `unreachable_code` ; +- `cargo test --workspace` : tests fonctionnels verts, dont les cinq nouveaux canaris WebSocket de `pre.004`. + +Le problème est donc limité à la conformité aux règles Rust strictes du workspace et non au comportement couvert par les tests. + +## 3. Corrections `ws_session.rs` + +Le runtime WebSocket est conservé fonctionnellement à l'identique. + +Les corrections sont : + +- `handle_session_command` n'utilise plus `return match ...` lorsque toutes les branches divergent déjà par des `return` explicites ; cela supprime l'expression inatteignable signalée par Rust ; +- la collecte des requêtes JSON-RPC expirées n'utilise plus une closure `filter_map` à retours implicites ; une boucle explicite construit désormais la liste des identifiants expirés ; +- la closure passée à `AtomicU64::fetch_update` retourne explicitement `current.checked_add(1)` afin de respecter `clippy::implicit_return` ; +- le header de version de `ws_session.rs` passe de `1` à `2`. + +Aucun changement n'est apporté : + +- à `WsSession` ou à sa surface publique ; +- aux états de lifecycle ; +- aux limites de message/frame/write buffer ; +- au pending map et aux timeouts ; +- aux dépendances `tokio-tungstenite` / `futures-util` ; +- au firewall de dépendances ; +- au tracing : toutes les émissions restent exclusivement via `ksp-logging-lib` et `TRACING_TARGET = "ksp-onchain-transport-lib"`. + +## 4. Version Cargo + +Le `Cargo.toml` racine passe à : + +```toml +[workspace.package] +version = "0.2.7-pre.4.fix.1" +``` + +Aucune autre entrée Cargo n'est modifiée. + +## 5. Validation attendue + +```bash +cargo fmt --all +python3 scripts/audit_rust_workspace_rules.py +cargo check --workspace +cargo clippy --workspace --all-targets +cargo test -p ksp-onchain-transport-lib +cargo test --workspace +``` + +Le smoke Devnet reste opt-in et n'est pas requis pour ce correctif. + +## 6. Suite + +Si ce checkpoint est vert, `0.2.7-pre.004` est considéré clos via `pre.004-fix.001` et la série peut poursuivre avec `0.2.7-pre.005` : limites adversariales, control frames, cancellation, close et shutdown borné.