# Delta `v0.2.1-pre.007` ## Base Base attendue : ```text v0.2.1-pre.006-fix.002 ``` Cette base 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-app-config-desk` ; - `cargo test -p ksp-config-lib` ; - `cargo test -p ksp-core-lib` ; - `cargo test --workspace`. Le test Transport renforcé contre la fuite d'URL dans les sources `reqwest::Error` passe également sur cette base. Version Cargo cible : ```text 0.2.1-pre.7 ``` ## Objectif Fermer la dernière prerelease fonctionnelle de `0.2.1` sans rouvrir le périmètre HTTP : - revérifier la matrice officielle Solana ; - figer la complétude `52 + 14` et la partition `4 / 22 / 11 / 15` par des canaries publiques ; - fournir un smoke Devnet opt-in de bout en bout Config -> Transport ; - produire le README et le guide d'utilisation durables de Transport ; - remettre la baseline Logging Transport à `info` avant stable ; - absorber les écarts documentaires réservés par l'audit complet de `pre.006-fix.002` ; - produire la matrice de validation finale et le prompt de démarrage `0.2.2` ; - préparer un `rel.001` strictement publicationnel. Aucune cinquième méthode HTTP typée n'est ajoutée dans cette tranche. ## Revérification officielle HTTP Solana La documentation officielle Solana a été revérifiée le 2026-08-17 : ```text https://solana.com/docs/rpc/http https://solana.com/docs/rpc/deprecated/confirmtransaction ``` Le résultat reste compatible avec la matrice acquise : ```text 52 méthodes HTTP courantes 14 méthodes historiques Deprecated ``` L'index courant confirme également le transport JSON-RPC 2.0 sur HTTP `POST` avec `Content-Type: application/json`. Les 14 méthodes historiques restent représentées dans KSP comme `Deprecated / Removed / Historical` et ne sont pas simulées comme appelables. ## Canaries de complétude de release Nouveau test public : ```text crates/ksp-onchain-transport-lib/tests/release_completeness.rs ``` Il fige depuis l'API publique : ```text current == 52 historical == 14 coverage == 4 / 22 / 11 / 15 V0_2_1 == getBalance/getGenesisHash/getHealth/getVersion historical => Deprecated + Removed + Historical + NotApplicable ``` La candidate déclare désormais **80 tests Transport**. La surface raw/générique `execute_standard_rpc()` reste disponible mais ne compte pas comme couverture typée des 48 méthodes reportées à `0.2.2`–`0.2.4`. ## Smoke Devnet opt-in Config -> Transport Nouveau test : ```text crates/ksp-config-lib/tests/transport_devnet_smoke.rs ``` Il est volontairement : ```rust #[ignore = "opt-in live Solana Devnet smoke; performs external network requests"] ``` Le chemin validé est : ```text ConfigFileRegistry::defaults() -> cfg.std.transport -> profile devnet_public -> ConfigEnvironment -> ResolvedTransportConfig -> HttpTransportSettings -> HttpTransportPool -> getHealth -> getGenesisHash -> getVersion -> getBalance(System Program) ``` Transport ne lit donc toujours pas directement l'environnement. Le test Config nécessite Tokio uniquement comme dev-dependency local : ```toml [dev-dependencies] tokio = { workspace = true, features = ["macros", "rt"] } ``` La candidate déclare **114 tests Config**, dont cet unique smoke Devnet `ignored`. Exécution opt-in : ```bash cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture ``` Un incident ou rate-limit du RPC public Devnet reste un signal externe à analyser ; les gates reproductibles restent les tests déterministes par défaut. ## Logging Transport avant stable Le sink dédié introduit pendant le développement est conservé, mais sa baseline revient de `debug` à `info` conformément à la politique de clôture : ```text output_id : file.onchain_transport.info path : transport/onchain/ksp-onchain-transport.log target : ksp-onchain-transport-lib level : info ``` La console et le fichier général restent à `info`. Un niveau `debug`/`trace` ciblé peut être réactivé temporairement via Config lors d'un futur développement, puis doit être refermé avant publication stable. ## Documentation durable Transport Nouveaux documents : ```text crates/ksp-onchain-transport-lib/README.md crates/ksp-onchain-transport-lib/USAGE.md ``` Ils documentent : - responsabilités et firewall de dépendances ; - registre `52 current + 14 historical` ; - différence raw/générique vs couverture typée ; - quatre canaris `0.2.1` ; - pool/routing/admission/résilience ; - retry/no-resend ; - sécurité des URLs et sources `reqwest` ; - target Logging explicite ; - construction directe ou via Config ; - snapshots et smoke Devnet opt-in. ## Normalisation documentaire issue de l'audit complet Les écarts purement documentaires réservés par `pre.006-fix.002` sont absorbés ici : - `FILE-GEN-003` décrit désormais `bindings/` et `gen/` comme artefacts générés/reconstructibles ignorés par défaut, et non comme convention encore future ; - `crates/ksp-config-lib/README.md` ne présente plus `ksp-app-config-desk` comme future ; - l'inventaire des composants décrit `0.2.1` comme foundation HTTP + registre `52+14` + quatre wrappers canari, et non comme surface typed HTTP complète ; - les index docs/plans/validation/prompts sont synchronisés avec les nouveaux livrables ; - le ROADMAP conserve uniquement l'état synthétique de la candidate et reste `[/]` jusqu'à la publication stable. Les prompts et deltas historiques consommés restent immuables même lorsqu'ils décrivent l'état de leur époque. ## Matrice de validation finale Nouveau document : ```text docs/validation/003-V0_2_1_ONCHAIN_HTTP.md ``` Il regroupe les critères de clôture, les preuves acquises, les commandes Cargo/cargo-tree attendues et les conditions de passage à `rel.001`. ## Prompt de reprise `0.2.2` Nouveau prompt : ```text prompts/007-V0_2_2_START_PROMPT.md ``` Il ouvre `0.2.2 — HTTP Accounts + Tokens + Cluster` par un nouveau `pre.001` d'audit/brainstorming/sizing et conserve la partition nominale actuelle de 22 méthodes : ```text Accounts : 5 Tokens : 5 Cluster : 12 ``` Il exige une revérification officielle du jour avant toute implémentation lourde et rappelle que l'appel raw ne vaut jamais couverture typée. ## Préparation de `rel.001` `CHANGELOG.md` n'est volontairement pas modifié dans cette prerelease. Si la candidate passe les validations opérateur, `rel.001` doit rester minimal : ```text workspace.package.version -> 0.2.1 ROADMAP : 0.2.1 -> [X] CHANGELOG : synthèse stable 0.2.1 plan 008 / validation 003 : statut clôturé + preuves opérateur deltas/0.2.1/rel.001.md commit v0.2.1-rel.001 tag v0.2.1 ``` Aucune nouvelle fonctionnalité HTTP ne doit être introduite dans `rel.001`. ## Fichiers ajoutés ```text crates/ksp-config-lib/tests/transport_devnet_smoke.rs crates/ksp-onchain-transport-lib/README.md crates/ksp-onchain-transport-lib/USAGE.md crates/ksp-onchain-transport-lib/tests/release_completeness.rs docs/validation/003-V0_2_1_ONCHAIN_HTTP.md prompts/007-V0_2_2_START_PROMPT.md deltas/0.2.1/pre.007.md ``` ## Fichiers modifiés ```text Cargo.toml ROADMAP.md config/std.logging.json crates/ksp-config-lib/Cargo.toml crates/ksp-config-lib/README.md docs/000-README.md docs/architecture/004-COMPONENT_INVENTORY.md docs/plans/000-README.md docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md docs/rules/FILE_CONTRACTS.md docs/validation/000-README.md prompts/000-README.md ``` Aucun ancien delta et aucun `CHANGELOG.md` ne sont modifiés. ## Validation statique de génération Effectuée dans le sandbox : - comparaison différentielle avec `pre.006-fix.002` ; - parsing de tous les TOML et JSON du workspace ; - validation Draft 2020-12 de `std.logging.json`, `std.transport.json` et de l'exemple Transport contre leurs schemas ; - contrôle des headers et incréments de version des fichiers modifiés ; - contrôle de l'unique fin de ligne des fichiers livrés ; - contrôle des lignes Rust/TOML <= 160 colonnes ; - contrôle des fences Markdown et des liens Markdown relatifs des fichiers modifiés ; - confirmation que les anciens deltas sont byte-for-byte inchangés ; - contrôle de la baseline Logging Transport `info` ; - comptage statique de 80 tests Transport et 114 tests Config, dont un smoke Config `ignored` ; - contrôle des tableaux de registre Rust `[52]` et `[14]`. Non exécutées dans le sandbox : `cargo`, `rustc` et `rustfmt` n'y sont pas disponibles. Aucune réussite Cargo de `pre.007` n'est donc déclarée avant validation opérateur. ## Validation requise après application ```bash 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 cargo tree -p ksp-onchain-transport-lib cargo tree -p ksp-onchain-transport-lib -d cargo tree -p ksp-onchain-transport-lib -e features cargo tree -p ksp-onchain-transport-lib -e normal cargo tree -p ksp-config-lib cargo tree -p ksp-config-lib -d cargo tree -p ksp-config-lib -e features cargo tree -p ksp-config-lib -e normal ``` Puis, de manière opt-in : ```bash cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture ``` Les `cargo tree` Config sont requis car `pre.007` ajoute un dev-dependency Tokio local au smoke live. Si les validations déterministes et les audits de graphe sont propres, la tranche suivante est `0.2.1-rel.001`.