# Delta `v0.2.1-pre.003-fix.001` ## Base Base attendue : ```text v0.2.1-pre.003 ``` Version Cargo cible : ```text 0.2.1-pre.3.fix.1 ``` ## Objectif Corriger exclusivement les écarts révélés par la validation locale de `pre.003`, sans modifier le contrat fonctionnel du client/pool HTTP ni la planification de `0.2.1` : - satisfaire la règle workspace `clippy::implicit-return` dans trois closures de `pool.rs` ; - corriger le test `disabled_role_is_excluded_before_priority_selection` afin qu'il construise des settings valides tout en vérifiant réellement qu'un rôle disabled n'est pas sélectionnable ; - conserver inchangés la stratégie priority + round-robin, le fallback, les snapshots, la feature TLS `reqwest/rustls` et les frontières de `pre.003`. `ROADMAP.md` n'est pas modifié par ce fix : le détail des corrections appartient au delta et ne constitue pas un changement de roadmap. ## Validation ayant déclenché le fix Après application de `pre.003`, les commandes exécutées localement par le user ont donné : ```text cargo fmt --all : exécuté cargo check --workspace : OK cargo clippy --workspace --all-targets : échec, 3 x clippy::implicit-return cargo test -p ksp-onchain-transport-lib : échec, 46 passés / 1 échoué cargo test --workspace : échec sur le même test Transport cargo tree -p ksp-onchain-transport-lib : exécuté cargo tree -p ksp-onchain-transport-lib -d : exécuté cargo tree -p ksp-onchain-transport-lib -e features : exécuté cargo tree -p ksp-onchain-transport-lib -e normal : exécuté ``` Les trois erreurs Clippy concernaient uniquement des closures dans `pool.rs` : ```text filter(...) sort_by_key(...) take_while(...) ``` Le test en échec construisait un endpoint `enabled = true` dont l'unique rôle était `enabled = false`. Cette fixture contredisait la validation Transport déjà définie, qui exige qu'un endpoint activé expose au moins un rôle activé. ## Corrections ### `pool.rs` Les trois closures signalées utilisent maintenant un `return` explicite, conformément à la configuration Clippy KSP : ```text filter(|endpoint| return ...) sort_by_key(|candidate| return ...) take_while(|candidate| return ...) ``` Aucune sémantique de sélection n'est modifiée. ### Test du rôle disabled La fixture de test conserve désormais sur le premier endpoint : - un rôle `default` disabled, de priorité 1 ; - un rôle `maintenance` enabled, également valide pour l'endpoint mais ne correspondant pas au rôle demandé. Le pool est donc valide à la construction. Lors d'une sélection sur le rôle `default`, le rôle disabled du premier endpoint doit être ignoré et l'endpoint fallback reste sélectionné. Cette forme teste réellement le comportement annoncé sans contourner l'invariant de validation des settings. ## Version Cargo Le fix touche du Rust de production et de test : ```text 0.2.1-pre.3 -> 0.2.1-pre.3.fix.1 ``` Toutes les crates membres continuent d'hériter `version.workspace = true`. ## Graphe de dépendances Aucune dépendance ni feature n'est ajoutée, retirée ou modifiée par ce fix. Les `cargo tree` exécutés sur `pre.003` montrent notamment : - `reqwest 0.13.4` avec la feature `rustls` attendue ; - aucun retour de dépendance Transport vers Config/Store/Program ; - `cargo tree -d` ne signale que `syn 2.x / 3.x`, déjà identifié comme duplication transitive de proc-macros et ne nécessitant pas de modification KSP. Il n'est donc pas nécessaire de répéter les quatre `cargo tree` pour ce correctif. ## Fichiers ajoutés ```text deltas/0.2.1/pre.003-fix.001.md ``` ## Fichiers modifiés ```text Cargo.toml crates/ksp-onchain-transport-lib/src/pool.rs crates/ksp-onchain-transport-lib/unit_tests/pool.rs ``` ## Fichiers supprimés Aucun. ## Validation du fix Le sandbox de préparation ne dispose pas de `cargo`/`rustc`. Les validations Rust ne sont donc pas déclarées réussies ici. Après application du delta : ```bash cargo fmt --all cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-onchain-transport-lib cargo test --workspace ``` Les commandes `cargo tree` n'ont pas à être répétées puisque le graphe de dépendances est inchangé.