v0.2.7-pre.004-fix.001

This commit is contained in:
2026-08-22 18:34:52 +02:00
parent 778ea58ee1
commit 34637848eb
3 changed files with 93 additions and 11 deletions

View File

@@ -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"

View File

@@ -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<S>(
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<S>(
@@ -479,10 +479,12 @@ fn next_pending_deadline(pending: &std::collections::BTreeMap<u64, PendingWsRequ
fn expire_pending_requests(id: crate::WsSessionId, pending: &mut std::collections::BTreeMap<u64, PendingWsRequest>) {
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::<std::vec::Vec<_>>();
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<crate::WsSessionId> {
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(_) => {

View File

@@ -0,0 +1,79 @@
<!-- file: deltas/0.2.7/pre.004-fix.001.md -->
<!-- version: 1 -->
# 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é.