From bec1f2ec08fda02665cce1a3b6d497e19d1d324f Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Tue, 18 Aug 2026 07:20:44 +0200 Subject: [PATCH] v0.2.2-pre.002-fix.002 --- Cargo.toml | 2 +- .../src/rpc_common.rs | 9 +- deltas/0.2.2/pre.002-fix.002.md | 146 ++++++++++++++++++ 3 files changed, 150 insertions(+), 7 deletions(-) create mode 100644 deltas/0.2.2/pre.002-fix.002.md diff --git a/Cargo.toml b/Cargo.toml index 8937212..8aa05eb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib"] [workspace.package] -version = "0.2.2-pre.2.fix.1" +version = "0.2.2-pre.2.fix.2" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-onchain-transport-lib/src/rpc_common.rs b/crates/ksp-onchain-transport-lib/src/rpc_common.rs index fe531fa..22186f4 100644 --- a/crates/ksp-onchain-transport-lib/src/rpc_common.rs +++ b/crates/ksp-onchain-transport-lib/src/rpc_common.rs @@ -1,5 +1,5 @@ // file: crates/ksp-onchain-transport-lib/src/rpc_common.rs -// version: 2 +// version: 3 /// Commitment level accepted by typed Solana HTTP RPC adapters. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] @@ -118,10 +118,9 @@ impl SolanaRpcContext { }; } - /// Decodes one RPC context from a parsed JSON value for staged DTO tests. - #[cfg(test)] + /// Decodes one RPC context from a parsed JSON value for typed RPC adapters. pub(crate) fn decode_wire(method: &str, value: serde_json::Value) -> ksp_core_lib::Result { - let decoded = crate::decode_wire_json::(method, value); + let decoded = decode_wire_json::(method, value); let context = match decoded { std::result::Result::Ok(context) => context, std::result::Result::Err(error) => return std::result::Result::Err(error), @@ -159,7 +158,6 @@ impl SolanaRpcResponse { } /// Decodes one private serde wire type and maps shape failures to the shared Transport error domain. -#[cfg(test)] pub(crate) fn decode_wire_json(method: &str, value: serde_json::Value) -> ksp_core_lib::Result { let decoded = serde_json::from_value::(value); return match decoded { @@ -186,7 +184,6 @@ pub(crate) fn parse_wire_pubkey(method: &str, field: &str, value: &str) -> ksp_c }; } -#[cfg(test)] #[derive(serde::Deserialize)] struct WireRpcContext { slot: u64, diff --git a/deltas/0.2.2/pre.002-fix.002.md b/deltas/0.2.2/pre.002-fix.002.md new file mode 100644 index 0000000..c416101 --- /dev/null +++ b/deltas/0.2.2/pre.002-fix.002.md @@ -0,0 +1,146 @@ + + + +# Delta `0.2.2-pre.002-fix.002` — restauration du décodeur de contexte utilisé par `getBalance` + +## Base requise + +```text +livraison : 0.2.2-pre.002-fix.001 +workspace.package.version = "0.2.2-pre.2.fix.1" +``` + +Le correctif est ouvert après validation locale communiquée le 2026-08-18. `pre.002-fix.001` a correctement réduit les warnings préparatoires, +mais a classé à tort `SolanaRpcContext::decode_wire` comme helper exclusivement test alors que le canari de production `getBalance`, acquis en +`0.2.1`, l'utilise déjà dans `rpc_canary.rs`. + +La conséquence est une régression de compilation `E0599` sur `cargo check`, `cargo clippy` et `cargo test`. + +## Objectif + +Restaurer uniquement le chemin de décodage de contexte déjà nécessaire au runtime du canari `getBalance`, sans annuler le nettoyage ciblé de +`pre.002-fix.001`, sans commencer les wrappers Accounts de `pre.003` et sans élargir l'API publique. + +## Version Cargo + +Le correctif modifie du Rust de production. Conformément à `VER-ID-007` et `VER-ID-010` : + +```text +0.2.2-pre.2.fix.1 -> 0.2.2-pre.2.fix.2 +``` + +Aucune dépendance ni feature Cargo n'est ajoutée ou retirée. + +## Correction + +Les trois éléments nécessaires au chemin production `rpc_canary::get_balance` redeviennent compilés hors `#[cfg(test)]` : + +```text +SolanaRpcContext::decode_wire +rpc_common::decode_wire_json +WireRpcContext +``` + +`SolanaRpcContext::decode_wire` appelle désormais directement le helper privé de son module au lieu de dépendre du réexport crate-private +`crate::decode_wire_json`, qui reste volontairement réservé aux tests dans `lib.rs` tant qu'aucun autre module de production ne le consomme. + +Tous les autres serializers/décodeurs préparatoires rendus test-only par `pre.002-fix.001` restent inchangés. Ce fix ne réintroduit donc pas les +warnings `dead_code` que `fix.001` cherchait à supprimer. + +## Fichiers ajoutés + +```text +deltas/0.2.2/pre.002-fix.002.md +``` + +## Fichiers modifiés + +```text +Cargo.toml +crates/ksp-onchain-transport-lib/src/rpc_common.rs +``` + +## Fichiers supprimés + +Aucun. + +## Fichiers volontairement inchangés + +```text +deltas/0.2.2/pre.002.md +deltas/0.2.2/pre.002-fix.001.md +docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md +ROADMAP.md +CHANGELOG.md +crates/ksp-onchain-transport-lib/src/lib.rs +crates/ksp-onchain-transport-lib/src/rpc_canary.rs +crates/ksp-onchain-transport-lib/src/rpc_accounts.rs +crates/ksp-onchain-transport-lib/src/rpc_tokens.rs +crates/ksp-onchain-transport-lib/src/rpc_cluster.rs +crates/ksp-onchain-transport-lib/unit_tests/** +crates/ksp-onchain-transport-lib/tests/** +crates/ksp-config-lib/** +config/** +``` + +Les deltas déjà publiés restent des traces historiques et ne sont pas réécrits. + +## Validation ayant déclenché le correctif + +Les commandes suivantes ont été exécutées par l'utilisateur sur `0.2.2-pre.002-fix.001` : + +```text +cargo fmt --all : exécuté +cargo check --workspace : ÉCHEC E0599 +cargo clippy --workspace --all-targets : ÉCHEC E0599 +cargo test -p ksp-onchain-transport-lib : ÉCHEC E0599 +``` + +Erreur commune : + +```text +no function or associated item named `decode_wire` found for struct `SolanaRpcContext` +rpc_canary.rs:194:48 +``` + +## Contrôles statiques effectués pendant la préparation du fix + +- `SolanaRpcContext::decode_wire` n'est plus conditionné par `#[cfg(test)]` ; +- `decode_wire_json` et `WireRpcContext`, ses dépendances directes, sont également production-live ; +- l'appel interne n'utilise plus le réexport test-only `crate::decode_wire_json` ; +- aucun autre `#[cfg(test)]` introduit par `pre.002-fix.001` n'est retiré ; +- aucun `#[allow(dead_code)]` n'est ajouté ; +- aucune API publique, méthode RPC, dépendance, feature ou configuration n'est modifiée ; +- `workspace.package.version` vaut `0.2.2-pre.2.fix.2` ; +- les deltas `pre.002.md` et `pre.002-fix.001.md` restent inchangés. + +## Validations du correctif non exécutées dans le sandbox + +Le sandbox de préparation ne fournit pas `cargo`, `rustc` ni `rustfmt`. Les validations Rust du présent fix ne sont donc pas déclarées réussies. + +Après application, exécuter : + +```bash +cargo fmt --all +cargo check --workspace +cargo clippy --workspace --all-targets +cargo test -p ksp-onchain-transport-lib +``` + +Le résultat attendu est le retour à une compilation réussie du canari `getBalance`, sans réapparition des warnings ciblés par `pre.002-fix.001`. + +## Décisions prises + +- traiter `SolanaRpcContext::decode_wire` comme code de production parce qu'un consommateur runtime existe déjà ; +- conserver test-only uniquement les helpers qui n'ont réellement aucun consommateur production à cette étape ; +- ne pas modifier `rpc_canary.rs`, dont l'utilisation du décodeur est correcte ; +- ne pas élargir `lib.rs` avec un nouveau réexport crate-private production inutile ; +- ne pas commencer `pre.003` avant validation de ce second fix. + +## Questions ouvertes + +Aucune question bloquante. + +## Suite + +Après validation et commit de `0.2.2-pre.002-fix.002`, poursuivre avec `0.2.2-pre.003` pour les cinq wrappers Accounts.