# Prompt de démarrage `0.2.4` — HTTP Blocks + Economics + compliance HTTP finale ## 1. Contexte de reprise La base attendue est la release stable : ```text v0.2.3 ``` La surface HTTP acquise doit être : ```text 52 méthodes HTTP courantes enregistrées 14 méthodes historiques Deprecated / runtime Removed 37 wrappers typed courants : 4 foundation 22 Accounts/Tokens/Cluster 11 Transactions 15 wrappers typed restants : 10 Blocks + 5 Economics ``` `0.2.3` a aussi formalisé `KSP-TRANSPORT-007` : un wrapper RPC KSP ne compte comme complet que s'il expose toutes les possibilités supportées retenues par l'audit — paramètres, options, overloads/formes legacy encore supportés, contraintes déterministes utiles et variantes de réponse pertinentes sans perte. La release à ouvrir est : ```text 0.2.4 — HTTP Blocks + Economics + compliance HTTP finale ``` La première tranche est `0.2.4-pre.001` et commence par **audit officiel actuel + brainstorming + sizing**, avant toute implémentation lourde. ## 2. Mission Compléter exactement les 15 méthodes actuellement affectées à `HttpRpcCoverageRelease::V0_2_4`. ### Blocks — 10 ```text getBlock getBlockCommitment getBlockHeight getBlockProduction getBlocks getBlocksWithLimit getBlockTime getFirstAvailableBlock getRecentPerformanceSamples minimumLedgerSlot ``` ### Economics — 5 ```text getInflationGovernor getInflationRate getInflationReward getStakeMinimumDelegation getSupply ``` La partition doit être revérifiée contre la documentation Solana du jour avant confirmation. Après ces 15 wrappers, `0.2.4` doit exécuter la **compliance finale de toute la surface HTTP** : ```text 52 current 14 historical Deprecated / Removed 52 wrappers typed courants ``` ## 3. Gate de sizing obligatoire Répondre explicitement à `pre.001` : ```text Les 15 wrappers Blocks/Economics, leurs DTOs/wires, les overloads/legacy, les tests, la compliance 52+14 et la documentation peuvent-ils être clôturés proprement dans cette release/session ? ``` Si NON, scinder avant implémentation fonctionnelle lourde. Une prerelease vise environ 15–20 minutes de travail effectif. ## 4. Sources internes obligatoires Relire avant modification : ```text ROADMAP.md CHANGELOG.md RULES.md docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md docs/validation/003-V0_2_1_ONCHAIN_HTTP.md docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md docs/validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md docs/architecture/002-LAYERS_AND_DEPENDENCIES.md docs/architecture/003-COMPONENT_CONTRACTS.md docs/architecture/004-COMPONENT_INVENTORY.md docs/architecture/005-DEPENDENCY_GRAPH.md docs/rules/RULES_DEPENDENCIES.md docs/rules/RULES_RUST.md docs/rules/RULES_KSP.md docs/rules/FILE_CONTRACTS.md docs/rules/VERSION_WORKFLOW.md docs/rules/PROMPT_STRUCTURE.md crates/ksp-onchain-transport-lib/README.md crates/ksp-onchain-transport-lib/USAGE.md crates/ksp-onchain-transport-lib/src/ crates/ksp-onchain-transport-lib/unit_tests/ crates/ksp-onchain-transport-lib/tests/ ``` Les deltas historiques ne sont pas réécrits. ## 5. Sources externes normatives Au début de `pre.001`, réauditer : ```text https://solana.com/docs/rpc/http https://solana.com/docs/rpc/json-structures ``` Recouper avec les sources primaires Agave stables actuelles lorsque la documentation publique ne détaille pas une option, un overload, une limite ou un champ wire. Ne pas supposer que `v4.2.1` est encore la référence au moment de l'ouverture de `0.2.4` : vérifier la génération Agave effectivement stable/recommandée ce jour-là. ## 6. Règle `KSP-TRANSPORT-007` Pour **chaque** wrapper Blocks/Economics : - couvrir tous les paramètres ordonnés ; - couvrir tous les champs de config supportés ; - conserver les overloads distincts ; - conserver les formes legacy encore supportées, marquées deprecated si nécessaire ; - appliquer avant I/O les contraintes déterministes connues lorsqu'elles n'exigent pas de décodage métier disproportionné ; - préserver `null`, omissions significatives, ordre et cardinalités ; - conserver losslessly les sous-arbres wire riches lorsque leur typage intégral créerait un couplage SDK inutile. Une simplification volontaire n'est acceptable que si elle est explicitement justifiée et ne retire aucune capacité RPC. ## 7. Points sensibles Blocks ### `getBlock` Auditer en priorité : - config moderne complète ; - forme bare encoding legacy si elle est toujours supportée ; - encodings actuels ; - transactionDetails ; - rewards ; - commitment autorisé ; - maxSupportedTransactionVersion ; - résultat `null` ; - transaction/meta/version/rewards/blockTime/blockHeight/numRewardPartitions ; - erreurs de version/non-disponibilité pertinentes. La stratégie wire doit réutiliser les primitives Transaction de `0.2.3` lorsque pertinentes, sans copier `solana-rpc-client`. ### `getBlockCommitment` Préserver commitment nullable et totalStake. ### `getBlockHeight` Auditer config contextuelle et contraintes de commitment/minContextSlot. ### `getBlockProduction` Auditer identity, range firstSlot/lastSlot, commitment et forme contextualisée. ### `getBlocks` Vérifier les overloads actuels autour de start/end/config. Ne pas réduire la surface à la seule signature d'un client SDK. ### `getBlocksWithLimit` Auditer start slot, limit, config et limite runtime éventuelle. ### `getBlockTime` Préserver `i64|null` et les erreurs significatives. ### `getFirstAvailableBlock` Pas de config si le contrat courant reste sans paramètre. ### `getRecentPerformanceSamples` Auditer limite optionnelle/default/max et tous les champs de sample. ### `minimumLedgerSlot` Pas de config si le contrat courant reste sans paramètre ; préserver les erreurs RPC runtime. ## 8. Points sensibles Economics ### `getInflationGovernor` Auditer commitment éventuel et tous les champs governor. ### `getInflationRate` Préserver total/validator/foundation/epoch. ### `getInflationReward` Auditer : - liste d'adresses et limite éventuelle ; - epoch ; - commitment ; - minContextSlot ; - ordre et `null` positionnels ; - commission et extension runtime `commissionBps` si toujours supportée. ### `getStakeMinimumDelegation` Auditer config contextuelle et résultat contextualisé. ### `getSupply` Auditer commitment et `excludeNonCirculatingAccountsList`, puis total/circulating/nonCirculating/liste de comptes. ## 9. Architecture Transport Conserver le flux unique : ```text wrapper typed -> descriptor central -> execute_standard_rpc -> pool/admission -> executor HTTP -> validation JSON-RPC -> decode typed ``` Interdits : ```text client HTTP parallèle reqwest direct par wrapper retry/deadline/admission bypass Transport -> Config Transport -> Store/Program tracing direct solana-rpc-client pour masquer les possibilités RPC ``` ## 10. Réutilisation des wires Réutiliser les contrats `0.2.1`–`0.2.3` lorsqu'ils représentent réellement le même wire : - `SolanaCommitment` / configs contextuelles ; - `SolanaRpcContext` / `SolanaRpcResponse` ; - Account encodings/types ; - Transaction encodings/version/meta et `SolanaWireField`. Ne pas dédupliquer artificiellement des contrats qui ont des sémantiques différentes. ## 11. Tests déterministes Pour chaque wrapper : - request JSON exacte ; - omission/config vide ; - toutes options et overloads significatifs ; - encodings ; - success typed ; - `null`/omitted ; - ordre/cardinalité ; - erreurs RPC ; - limites avant I/O pertinentes. Conserver les canaries acquises : ```text 52 current registry 14 historical 0.2.1 exact == 4 0.2.2 exact == 22 0.2.3 exact == 11 0.2.4 exact == 15 KSP-TRANSPORT-007 sur les 37 wrappers précédents ``` À la clôture `0.2.4`, ajouter la preuve finale : ```text 52/52 méthodes courantes couvertes par wrapper typed 14/14 historiques conservées pour compliance ``` ## 12. Smokes live Les smokes live restent opt-in et ne remplacent jamais les fixtures locales. Le smoke Transport pur peut être étendu à quelques reads Blocks/Economics stables si cela apporte une vraie preuve sans dépendre d'un état Devnet fragile. Éviter les écritures ou scénarios nécessitant des fonds/wallets dans la couche Transport seule. Le smoke Config -> Transport reste transitoire et ne doit pas devenir la destination générale des scénarios cross-crates. ## 13. Dépendances Ne pas ajouter une crate RPC/client Solana haut niveau. Toute nouvelle dépendance doit : - répondre à un besoin réel non couvert par les primitives existantes ; - être déclarée sous `[workspace.dependencies]` ; - respecter le firewall Transport ; - être justifiée dans le delta/plan. ## 14. Dernière prerelease et publication La dernière prerelease de `0.2.4` doit : - réauditer une dernière fois l'inventaire courant/deprecated ; - figer la compliance **52/52 + 14/14** ; - synchroniser README/USAGE et matrices ; - exécuter les smokes pertinents ; - auditer les graphes de dépendances ; - préparer le prompt `0.2.5 — Wallet foundation` ; - laisser `CHANGELOG.md` à `rel.001`. `0.2.4-rel.001` doit rester strictement publicationnelle. ## 15. Validations Pendant le développement : ```bash cargo fmt --all cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-onchain-transport-lib ``` À la clôture : ```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 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 ``` Ne jamais déclarer une commande réussie sans preuve opérateur ou exécution réelle.