v0.2.2-pre.002-fix.001
This commit is contained in:
213
deltas/0.2.2/pre.002-fix.001.md
Normal file
213
deltas/0.2.2/pre.002-fix.001.md
Normal file
@@ -0,0 +1,213 @@
|
||||
<!-- 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.
|
||||
Reference in New Issue
Block a user