# Delta `0.2.4-pre.009` — clôture HTTP finale, compliance `52/52 + 14/14` et préparation Wallet ## Base requise Livraison précédente validée : ```text 0.2.4-pre.008-fix.001 workspace.package.version = "0.2.4-pre.8.fix.1" ``` La validation locale fournie pour cette base est entièrement propre : ```text cargo fmt --all -> terminé cargo check --workspace -> terminé sans warning cargo clippy --workspace --all-targets -> terminé sans warning cargo test -p ksp-onchain-transport-lib -> 240 unit tests OK 26 public API tests OK 21 release-completeness tests OK 1 smoke Devnet ignoré comme prévu 0 échec ``` Cette base inclut donc le fix purement Clippy de `pre.008-fix.001` sans modification fonctionnelle de `getInflationReward`. ## Objectif `pre.009` est la prerelease de clôture de la série HTTP commencée en `0.2.1`. Elle ne doit ajouter aucun nouveau comportement RPC standard. Elle doit au contraire prouver et documenter que la surface acquise est complète et cohérente : ```text 52 méthodes HTTP courantes officielles 52 wrappers typed KSP correspondants 14 méthodes historiques Deprecated / runtime Removed 14 descriptors historiques KSP correspondants partition typed : 4 foundation + 22 Accounts/Tokens/Cluster + 11 Transactions + 15 Blocks/Economics ``` Elle doit également : - réauditer la référence HTTP officielle et les SIMDs susceptibles de modifier cette surface ; - figer les canaries finales de présence, de classification et de frontières ; - étendre le smoke Transport pur aux nouvelles familles Blocks/Economics ; - publier le document de conformité final `0.2.4` ; - mettre à jour les documents vivants de la série ; - fournir le prompt de démarrage de `0.2.5 — Wallet foundation` ; - préparer `rel.001`, qui devra rester strictement publicationnel. ## Version Cargo Nouvelle prerelease technique : ```text 0.2.4-pre.8.fix.1 -> 0.2.4-pre.9 ``` Aucune dépendance, feature Cargo ou frontière de crate n'est modifiée. ## Réaudit officiel final de la surface HTTP Le réaudit de la référence Solana HTTP courante retrouve exactement les `52` méthodes enregistrées par KSP. La comparaison est effectuée sur les noms, pas seulement sur un compteur : ```text officiel courant - registre KSP = {} registre KSP - officiel courant = {} ``` Les `14` méthodes historiques présentées dans la navigation Deprecated officielle correspondent également exactement au registre historique KSP : ```text officiel Deprecated - historique KSP = {} historique KSP - officiel Deprecated = {} ``` Aucun nouveau RPC HTTP standard n'est donc introduit dans la release à cette date. La baseline runtime de contrat utilisée pendant `0.2.4` reste : ```text Agave v4.2.1 ``` La rollout Agave `v4.2` est en cours pendant cette clôture ; cette prerelease ne transforme pas un calendrier de déploiement en affirmation d'activation cluster-wide. ## Réaudit SIMD final Les statuts upstream observés pendant la clôture sont : | SIMD | Sujet lié au HTTP KSP | Statut courant | Conséquence pour `0.2.4` | |--------|---------------------------------------------|---------------------|---------------------------------------------------------------------------| | `0180` | leader schedule keyed by vote account | `Review` | aucune nouvelle méthode HTTP officielle ; conserver le wire stable audité | | `0298` | `bank_hash` dans le block footer | `Idea` | ne pas ajouter `bankHash` spéculativement | | `0301` | remplacement proposé par `parent_bank_hash` | PR fermé, non mergé | aucune surface KSP | | `0307` | block footer + extension `getBlock` | `Review` | pas de `footer` dans le contrat stable `v4.2.1` | | `0385` | transaction V1 | `Review` | conserver `SolanaTransactionVersion::Number(u8)` générique | | `0490` | Stake Program v5 / minimum delegation | `Review` | valeur fournie par le runtime, jamais codée en dur | | `0550` | double disinflation | `Review` | valeurs inflation runtime, aucune formule KSP | | `0553` | base inclusion + resource fee | `Draft` | évolution économique/fee ; aucun nouveau wrapper HTTP stable | Les extensions wire déjà acquises sont également réauditées pour éviter qu'une clôture centrée sur la watchlist n'en perde une : | SIMD | Statut courant | Contrat KSP confirmé | |-----------------------------------------------|----------------|----------------------------------------------------------------------------------------------------------| | `0118` Partitioned Epoch Rewards Distribution | `Activated` | `numRewardPartitions` reste lossless en omitted/null/value ; aucune synthèse locale | | `0291` Commission Rate in Basis Points | `Review` | `commission` et `commissionBps` restent indépendants dans les rewards ; aucun calcul de conversion local | Le statut `Review` de SIMD-0291 ne retire pas le wire déjà livré par Agave `v4.2.1`. Le réaudit ne justifie donc aucune extension wire spéculative dans `pre.009` ni aucune suppression d'un champ stable déjà acquis. ## Canarie public API finale `tests/public_api.rs` ajoute : ```text public_v0_2_4_pre_009_all_52_current_typed_wrappers_and_legacy_forms_are_available_from_crate_root ``` Cette canarie référence les `52` wrappers typed des méthodes courantes via `HttpTransportPool`. Elle référence aussi séparément les deux formes legacy de requête qui ne constituent pas des méthodes RPC supplémentaires : ```text get_block_legacy get_transaction_legacy ``` Le but est de détecter immédiatement une suppression ou une invisibilité accidentelle d'un wrapper public pendant les futures refactorisations. ## Canarie release-completeness finale `tests/release_completeness.rs` ajoute : ```text release_v0_2_4_pre_009_final_http_inventory_and_coverage_partition_are_exact ``` Elle fige explicitement : ```text 52 noms courants exacts 14 noms historiques exacts 4 méthodes Foundation 22 méthodes V0_2_2 11 méthodes V0_2_3 15 méthodes V0_2_4 ``` Elle vérifie également les invariants de classification : ```text courant -> runtime Supported, documentation non Deprecated Read -> RetrySafe Simulation -> RetrySafe WriteSubmission -> NeverAfterDispatch historique -> Deprecated + Removed + Historical + NotApplicable ``` Cette preuve complète les canaries `KSP-TRANSPORT-007` déjà acquises ; elle ne les remplace pas. ## Compliance `KSP-TRANSPORT-007` Le document final : ```text docs/validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md ``` consolide la preuve `52/52` et les points sensibles accumulés depuis `0.2.1` : - ordre et cardinalité des paramètres/réponses ; - configs omises versus objets explicitement présents ; - overloads modernes et historiques ; - validations déterministes avant I/O ; - préservation `omitted / null / value` ; - listes positionnelles et ordre provider ; - `getBlock` moderne + bare encoding legacy ; - `transactionDetails` complet ; - SIMD-0118 `numRewardPartitions` ; - SIMD-0291 `commissionBps` ; - version transaction numérique non nulle ; - Economics runtime sans constantes locales inventées ; - `getInflationReward` positionnel et cardinalité stricte. ## Smoke Transport pur final Le smoke opt-in : ```text crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs ``` reste : - purement Transport ; - settings construits programmatiquement ; - read-only ; - opt-in / ignoré par défaut ; - indépendant de Config. Il conserve les appels déjà présents Accounts/Tokens/Cluster/Transactions et ajoute trois appels peu fragiles : ```text getBlockHeight(finalized) getInflationRate() getStakeMinimumDelegation(finalized) ``` Aucune valeur économique exacte n'est codée en dur. Le smoke vérifie uniquement des invariants de santé de réponse. Le smoke de composition `Config -> Transport -> Devnet` reste une exception transitoire dans `ksp-config-lib` et doit toujours migrer vers une future surface dédiée d'intégration/orchestration/demo. ## Documentation finale `0.2.4` Sont mis à jour : ```text ROADMAP.md crates/ksp-onchain-transport-lib/README.md crates/ksp-onchain-transport-lib/USAGE.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/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md docs/validation/000-README.md prompts/000-README.md ``` Le plan `011` passe en version `6` et enregistre le réaudit final sans modifier les contrats RPC déjà matérialisés. Le raw RPC est désormais décrit comme une surface d'extension provider/diagnostic hors registre standard ; il ne constitue pas une alternative aux `52` wrappers typed standard. `CHANGELOG.md` reste volontairement inchangé dans cette prerelease : la publication stable et son entrée finale appartiennent à `rel.001`. ## Document de validation final Ajout : ```text docs/validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md ``` Ce document sert de point de contrôle avant `rel.001`. Il contient notamment : - le réaudit officiel `52 + 14` ; - la matrice des `52` méthodes courantes ; - la matrice des `14` historiques ; - la partition `4 / 22 / 11 / 15` ; - le réaudit SIMD ; - les contrats sensibles Blocks/Economics ; - les commandes de validation immédiate et finale ; - les audits `cargo tree` de frontières ; - les deux smokes Devnet opt-in ; - les conditions de passage à `rel.001`. ## Prompt `0.2.5 — Wallet foundation` Ajout : ```text prompts/010-V0_2_5_START_PROMPT.md ``` Le prompt impose une `0.2.5-pre.001` d'audit + brainstorming + sizing avant toute implémentation cryptographique lourde. Il cadre notamment : ```text ksp-wallet-lib format natif versionné .kspwallet Wallet -> Core/Logging + primitives crypto/key low-level seulement Wallet -X-> Config/Transport/Store/Tauri/ExecutionPolicy pas de crypto maison pas de secret dans Config pas de WalletPolicy dans 0.2.5 pas de Wallet Desk dans 0.2.5 ``` La sélection du KDF, de l'AEAD, du CSPRNG et de la stratégie de secret en mémoire n'est pas préjugée : elle doit être auditée contre les primitives actuelles lors de `pre.001`. Le prompt exige également les invariants de sécurité principaux : mauvais mot de passe, tampering, format inconnu/tronqué, redaction, absence de secret en clair, changement de mot de passe sans changement de keypair, persistence atomique/no-clobber et signature vérifiable. ## Fichiers modifiés ```text Cargo.toml ROADMAP.md crates/ksp-onchain-transport-lib/README.md crates/ksp-onchain-transport-lib/USAGE.md crates/ksp-onchain-transport-lib/src/lib.rs crates/ksp-onchain-transport-lib/tests/public_api.rs crates/ksp-onchain-transport-lib/tests/release_completeness.rs crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs docs/000-README.md docs/architecture/004-COMPONENT_INVENTORY.md docs/plans/000-README.md docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md docs/plans/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md docs/validation/000-README.md prompts/000-README.md ``` ## Fichiers ajoutés ```text docs/validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md prompts/010-V0_2_5_START_PROMPT.md deltas/0.2.4/pre.009.md ``` Aucun fichier n'est supprimé. ## Validation immédiate attendue Après application de l'overlay : ```bash cargo fmt --all cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-onchain-transport-lib ``` Compte attendu pour Transport : ```text 240 unit tests OK 27 public API tests OK 22 release-completeness tests OK 1 smoke Devnet ignoré comme prévu 0 échec ``` Le nombre de unit tests reste volontairement stable : `pre.009` ajoute des canaries d'intégration/public API et non une nouvelle logique RPC. ## Checkpoint final avant `rel.001` Une fois la validation immédiate propre, exécuter aussi : ```bash cargo test -p ksp-config-lib cargo test -p ksp-core-lib cargo test -p ksp-app-config-desk cargo test --workspace ``` Audits de graphes : ```bash cargo tree -p ksp-onchain-transport-lib -i ksp-config-lib cargo tree -p ksp-onchain-transport-lib -i ksp-store-lib cargo tree -p ksp-onchain-transport-lib -i ksp-program-lib cargo tree -p ksp-onchain-transport-lib -i tracing cargo tree -p ksp-config-lib -i ksp-onchain-transport-lib cargo tree -p ksp-config-lib -i tracing cargo tree -p ksp-onchain-transport-lib | grep -E 'solana-(client|rpc-client|rpc-client-api)' cargo tree -p ksp-onchain-transport-lib | grep -E 'ksp-(config|store|program)' ``` Les commandes `cargo tree -i` qui signalent qu'un package n'existe pas dans le graphe sont acceptables lorsqu'elles démontrent précisément l'absence de dépendance recherchée ; le résultat doit être interprété et consigné, pas masqué. Pour `tracing`, une présence transitive sous `ksp-logging-lib` est conforme : l'interdit architectural porte sur une dépendance **directe** de Transport vers `tracing`, pas sur l'absence totale de `tracing` dans son graphe transitif. Smokes réseau opt-in : ```bash cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture ``` Le premier est le smoke Transport pur durable. Le second reste la composition transitoire `Config -> Transport` déjà documentée. ## Commit attendu Après validation immédiate et checkpoint final propres : ```text v0.2.4-pre.009 ``` ## Suite — `rel.001` La livraison suivante doit être : ```text 0.2.4-rel.001 ``` Elle doit être strictement publicationnelle : - finaliser `CHANGELOG.md` et les statuts ROADMAP/documents de publication ; - produire `deltas/0.2.4/rel.001.md` ; - passer `workspace.package.version` de la prerelease candidate à `0.2.4` ; - ne pas ajouter de wrapper, DTO, validation RPC ou comportement réseau ; - rejouer les contrôles de publication nécessaires ; - créer le tag stable `v0.2.4` après validation et commit de la release. `0.2.5` ne commence qu'après cette publication stable.