# Delta `v0.2.1-rel.001` ## Base Base attendue : ```text v0.2.1-pre.007 ``` `pre.007` a été validée localement par l'opérateur le 2026-08-17 avec : - `cargo fmt --all` ; - `cargo check --workspace` ; - `cargo clippy --workspace --all-targets` ; - `cargo test -p ksp-onchain-transport-lib` ; - `cargo test -p ksp-config-lib` ; - `cargo test -p ksp-core-lib` ; - `cargo test -p ksp-app-config-desk` ; - `cargo test --workspace` ; - les graphes `cargo tree`, `cargo tree -d`, `cargo tree -e features` et `cargo tree -e normal` pour Transport et Config ; - le smoke Devnet opt-in `cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture`, avec `1 passed; 0 failed`. Version Cargo cible : ```text 0.2.1 ``` ## Objectif Publier `0.2.1 — HTTP Solana foundation` sans ajouter de capacité fonctionnelle après la candidate `pre.007`. `rel.001` est strictement publicationnelle : - passage du workspace à la version stable `0.2.1` ; - clôture `[X]` de `0.2.1` dans le ROADMAP ; - ajout de l'entrée stable `0.2.1` au CHANGELOG ; - clôture du plan HTTP et de sa matrice de validation avec les preuves opérateur ; - synchronisation des index/plans généraux ; - conservation explicite du TODO d'ownership du smoke cross-crates. Aucun fichier Rust de production, aucune API publique, aucune configuration runtime, aucune dépendance et aucune feature Cargo ne changent dans cette livraison. ## Surface stable publiée `0.2.1` stabilise `ksp-onchain-transport-lib` avec : ```text JSON-RPC 2.0 sur HTTP POST 52 méthodes HTTP courantes auditées 14 méthodes historiques Deprecated / Removed 4 wrappers typés : getBalance/getGenesisHash/getHealth/getVersion partition typed restante : 22 / 11 / 15 sur 0.2.2–0.2.4 pool rôles/capabilities/priorités/fairness RPS/burst/concurrence/cooldown deadline commune + timeout/retry/backoff no-resend après dispatch ambigu 429/Retry-After + statuts temporaires std.transport + schema + example adapter ksp-config-lib -> ksp-onchain-transport-lib redaction URL/provider credentials neutralisation des URLs contenues dans reqwest::Error sink Logging Transport dédié à info fixtures HTTP déterministes canaries de complétude smoke Devnet opt-in README/USAGE Transport ``` La surface raw/générique reste distincte de la couverture typée : elle ne vaut pas implémentation des 48 wrappers reportés. ## Validation de la candidate Les tests de `pre.007` ont confirmé notamment : ```text Transport : 70 unit + 8 public API + 2 release completeness = 80 Config : 95 unit + 5 ownership + 13 public API + 1 smoke ignored = 114 Core : tests unit/public/workspace canaries propres Config Desk : tests unit/desktop/public propres workspace : propre, hors probes explicitement ignored ``` Le smoke Devnet a ensuite été lancé explicitement et a atteint les quatre canaris foundation via le profil `devnet_public` committé. Les graphes Cargo confirment la frontière voulue : ```text ksp-config-lib -> ksp-onchain-transport-lib ksp-onchain-transport-lib -X-> ksp-config-lib Transport -X-> Store/Program/tracing direct ``` Les features directes restent activées localement dans les crates consommatrices. Les doublons observés par `cargo tree -d` sur les graphes inspectés se limitent à `syn` 2.x/3.x dans les chaînes transitive/proc-macro ; aucune stack HTTP/Tokio KSP concurrente n'est introduite. ## TODO ownership des smoke tests cross-crates Le fichier actuel : ```text crates/ksp-config-lib/tests/transport_devnet_smoke.rs ``` reste temporairement sous Config parce que la direction de dépendance existante permet d'y composer Config -> Transport sans violer le firewall Transport -> Config. Cette localisation est une **exception transitoire** et ne devient jamais une convention KSP : - `ksp-config-lib` ne doit pas devenir la destination générale des smoke tests ; - cela inclut explicitement les futurs scénarios `Config + autre crate` ; - les tests déterministes de mapping/validation Config restent dans Config ; - un smoke autonome d'une crate peut rester dans cette crate s'il n'exige pas de composition interdite ; - les smokes cross-crates doivent appartenir à une future surface dédiée d'intégration/orchestration/demo ; - le smoke `Config -> Transport -> Devnet` devra migrer vers cette surface lorsqu'elle existera. ## Documentation de clôture Mises à jour : ```text CHANGELOG.md docs/000-README.md docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md docs/validation/003-V0_2_1_ONCHAIN_HTTP.md ROADMAP.md ``` Le prompt de reprise `prompts/007-V0_2_2_START_PROMPT.md` était déjà livré en `pre.007` et reste inchangé ; il attend comme base le tag stable `v0.2.1`. ## Commit et tag Identifiant de commit attendu : ```text v0.2.1-rel.001 ``` Le tag stable ne doit être créé qu'après application et validation de ce delta : ```text v0.2.1 ``` Le tag porte uniquement la publication stable ; aucun tag prerelease/fix n'est requis. ## Validation finale après application Comme `rel.001` ne modifie aucun code de production et ne change que la version workspace et la documentation, la gate finale reste : ```bash cargo fmt --all cargo check --workspace cargo clippy --workspace --all-targets cargo test --workspace ``` Après succès : commit `v0.2.1-rel.001`, puis création du tag `v0.2.1`.