v0.2.2-pre.002-fix.002
This commit is contained in:
@@ -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"]
|
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]
|
[workspace.package]
|
||||||
version = "0.2.2-pre.2.fix.1"
|
version = "0.2.2-pre.2.fix.2"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-onchain-transport-lib/src/rpc_common.rs
|
// file: crates/ksp-onchain-transport-lib/src/rpc_common.rs
|
||||||
// version: 2
|
// version: 3
|
||||||
|
|
||||||
/// Commitment level accepted by typed Solana HTTP RPC adapters.
|
/// Commitment level accepted by typed Solana HTTP RPC adapters.
|
||||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
#[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.
|
/// Decodes one RPC context from a parsed JSON value for typed RPC adapters.
|
||||||
#[cfg(test)]
|
|
||||||
pub(crate) fn decode_wire(method: &str, value: serde_json::Value) -> ksp_core_lib::Result<Self> {
|
pub(crate) fn decode_wire(method: &str, value: serde_json::Value) -> ksp_core_lib::Result<Self> {
|
||||||
let decoded = crate::decode_wire_json::<WireRpcContext>(method, value);
|
let decoded = decode_wire_json::<WireRpcContext>(method, value);
|
||||||
let context = match decoded {
|
let context = match decoded {
|
||||||
std::result::Result::Ok(context) => context,
|
std::result::Result::Ok(context) => context,
|
||||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||||
@@ -159,7 +158,6 @@ impl<T> SolanaRpcResponse<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Decodes one private serde wire type and maps shape failures to the shared Transport error domain.
|
/// Decodes one private serde wire type and maps shape failures to the shared Transport error domain.
|
||||||
#[cfg(test)]
|
|
||||||
pub(crate) fn decode_wire_json<T: serde::de::DeserializeOwned>(method: &str, value: serde_json::Value) -> ksp_core_lib::Result<T> {
|
pub(crate) fn decode_wire_json<T: serde::de::DeserializeOwned>(method: &str, value: serde_json::Value) -> ksp_core_lib::Result<T> {
|
||||||
let decoded = serde_json::from_value::<T>(value);
|
let decoded = serde_json::from_value::<T>(value);
|
||||||
return match decoded {
|
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)]
|
#[derive(serde::Deserialize)]
|
||||||
struct WireRpcContext {
|
struct WireRpcContext {
|
||||||
slot: u64,
|
slot: u64,
|
||||||
|
|||||||
146
deltas/0.2.2/pre.002-fix.002.md
Normal file
146
deltas/0.2.2/pre.002-fix.002.md
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
<!-- file: deltas/0.2.2/pre.002-fix.002.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# 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.
|
||||||
Reference in New Issue
Block a user