# Delta `0.2.2-pre.002-fix.001` — nettoyage des helpers RPC préparatoires et Clippy ## Base requise ```text livraison : 0.2.2-pre.002 workspace.package.version = "0.2.2-pre.2" ``` Le correctif est ouvert après la validation locale communiquée le 2026-08-18. Les tests de `pre.002` passent, mais `cargo check` et Clippy révèlent que plusieurs helpers privés de sérialisation/décodage ont été compilés trop tôt alors qu'aucun wrapper `0.2.2` ne les consomme encore. ## Objectif Corriger exclusivement les warnings de qualité de `pre.002`, sans commencer les wrappers Accounts de `pre.003`, sans modifier les DTOs publics et sans masquer les lints avec `#[allow(dead_code)]`. Les catégories observées sont : ```text dead_code helpers/wire structs préparatoires Accounts/Tokens/Cluster/Common clippy::assertions_on_constants assert!(false, ...) dans un test Account clippy::wrong_self_convention 2 serializers de configs Copy prenant &self ``` ## Version Cargo Le correctif modifie du Rust de production/test. Conformément à `VER-ID-007` et `VER-ID-010` : ```text 0.2.2-pre.2 -> 0.2.2-pre.2.fix.1 ``` Aucune dépendance ni feature Cargo n'est ajoutée ou retirée. ## Correction du staging privé `pre.002` doit établir les DTOs/configs publics et les fixtures communes, mais les wrappers qui consommeront réellement les helpers privés sont répartis sur `pre.003` à `pre.006`. Les serializers/décodeurs privés et leurs structs wire encore utilisés uniquement par les tests sont donc compilés sous : ```rust #[cfg(test)] ``` jusqu'à la prerelease qui les active réellement dans un wrapper de production. Cette correction : - conserve tous les types, constructeurs, getters, enums et réexports publics introduits par `pre.002` ; - conserve les fixtures Account/Token/Cluster/Vote ; - ne rend aucun helper privé artificiellement public ; - n'ajoute aucun `#[allow(dead_code)]` ; - évite de porter du code privé mort dans la bibliothèque normale entre deux tranches ; - impose aux prereleases suivantes de retirer `#[cfg(test)]` uniquement sur les helpers qu'elles commencent effectivement à consommer. Les deux helpers `is_empty()` qui n'ont aucun consommateur ni test utile à ce stade sont supprimés et seront réintroduits seulement si un wrapper les nécessite réellement. ## Correction Clippy ### Configs `Copy` Les serializers internes de : ```text SolanaCommitmentConfig SolanaContextConfig ``` prennent désormais `self` par valeur, ce qui correspond à leur nature `Copy` et supprime `clippy::wrong_self_convention` sans modifier la forme JSON. `SolanaContextConfig::to_json_value()` reste production-live parce que le canari `getBalance` de `0.2.1` le consomme déjà. ### Assertion constante Le test `account_wire_fixture_preserves_legacy_encoded_and_json_parsed_data` remplace le `match` avec `assert!(false, ...)` par : 1. une assertion `matches!` sur `JsonParsed` ; 2. un `if let` pour vérifier le contenu. Aucun `panic!()` ou `unreachable!()` explicite n'est introduit. ## Complément de tests préparatoires Des tests unitaires sont ajoutés pour exercer les helpers privés désormais explicitement test-only qui n'étaient pas couverts par `pre.002` : - sérialisation `SolanaLargestAccountsConfig` ; - décodage `SolanaKeyedAccount` et `SolanaAccountBalance` ; - décodage `SolanaTokenAccountBalance` ; - décodage `SolanaEpochInfo`, `SolanaEpochSchedule`, `SolanaSnapshotSlotInfo` et `SolanaLeaderSchedule` ; - sérialisation `SolanaVoteAccountsConfig` ; - décodage `SolanaVoteAccountStatus` ; - construction test-only de `SolanaRpcResponse`. Les fixtures et invariants `clientId`, `inflationRewardsCommissionBps`, `uiAmount: null`, `space: null` et Account data restent couverts. ## Fichiers ajoutés ```text deltas/0.2.2/pre.002-fix.001.md ``` ## Fichiers modifiés ```text Cargo.toml crates/ksp-onchain-transport-lib/src/lib.rs crates/ksp-onchain-transport-lib/src/rpc_common.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/rpc_common.rs crates/ksp-onchain-transport-lib/unit_tests/rpc_accounts.rs crates/ksp-onchain-transport-lib/unit_tests/rpc_tokens.rs crates/ksp-onchain-transport-lib/unit_tests/rpc_cluster.rs ``` ## Fichiers supprimés Aucun. ## Fichiers volontairement inchangés ```text deltas/0.2.2/pre.002.md docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md ROADMAP.md CHANGELOG.md crates/ksp-onchain-transport-lib/tests/public_api.rs crates/ksp-onchain-transport-lib/tests/release_completeness.rs crates/ksp-onchain-transport-lib/src/rpc_method.rs crates/ksp-config-lib/** config/** ``` Le delta `pre.002.md` reste une trace historique et n'est pas réécrit. ## Validation de `pre.002` ayant déclenché le correctif Les commandes suivantes ont été exécutées par l'utilisateur sur `0.2.2-pre.002` avant création de ce fix : ```text cargo fmt --all : exécuté cargo check --workspace : OK, avec 42 warnings dead_code Transport cargo clippy --workspace --all-targets : OK, avec les warnings dead_code + assertions_on_constants + wrong_self_convention cargo test -p ksp-onchain-transport-lib : OK ``` Résultats de tests communiqués : ```text 81 tests unitaires : passés 9 tests public_api : passés 2 tests release_completeness : passés 0 échec ``` Ces résultats prouvent la fonctionnalité de la base `pre.002`, mais ne constituent pas une validation du présent fix. ## Contrôles statiques effectués pendant la préparation du fix - aucune occurrence `#[allow(dead_code)]` ajoutée ; - aucune occurrence `assert!(false` restante dans les fichiers modifiés ; - les deux serializers de configs `Copy` prennent `self` par valeur ; - les helpers privés préparatoires non consommés par la bibliothèque normale sont explicitement `#[cfg(test)]` ; - les réexports crate-private de support wire sont eux aussi test-only tant qu'aucun wrapper ne les consomme ; - les helpers test-only identifiés disposent d'un consommateur dans les tests unitaires ; - aucune méthode RPC `0.2.2` n'est ajoutée à la surface typed-complete ; - aucune dépendance/feature/configuration Transport n'est modifiée ; - headers/version des fichiers modifiés incrémentés ; - `pre.002.md` et le plan `009` 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 fix ne sont donc pas déclarées réussies. Après application, exécuter au minimum : ```bash cargo fmt --all cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-onchain-transport-lib ``` Conformément aux règles Rust KSP, `cargo test --workspace` reste requis au checkpoint de clôture approprié. Aucun `cargo tree` supplémentaire n'est requis pour ce fix puisqu'aucune dépendance ni feature n'a changé. Résultat attendu immédiatement pour les commandes ci-dessus : aucune régression des canaris `0.2.1`, aucun warning ayant motivé ce fix et quatre tests unitaires Transport supplémentaires par rapport à `pre.002`. ## Décisions prises - corriger la cause des warnings plutôt que les masquer avec un lint allowance ; - conserver les DTOs et fixtures publics de `pre.002` ; - considérer les serializers/décodeurs privés non encore consommés comme support de test jusqu'à leur activation réelle ; - ne pas rendre `serde_json::Value` public uniquement pour éviter `dead_code` ; - ne pas commencer les cinq wrappers Accounts dans ce fix ; - conserver `pre.003` comme prochaine tranche fonctionnelle après validation du correctif. ## Questions ouvertes Aucune question bloquante. ## Suite Après validation et commit de `0.2.2-pre.002-fix.001`, poursuivre avec `0.2.2-pre.003` pour les cinq wrappers Accounts. Les helpers Account nécessaires seront alors sortis de `#[cfg(test)]` au fur et à mesure de leur consommation réelle.