Files
khadhroony-solana-project/deltas/0.2.2/pre.002-fix.001.md

214 lines
8.0 KiB
Markdown

<!-- file: deltas/0.2.2/pre.002-fix.001.md -->
<!-- version: 1 -->
# 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<T>`.
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.