diff --git a/Cargo.toml b/Cargo.toml index 38aefb4..9c9f4b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 129 +# version: 130 [workspace] resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib"] [workspace.package] -version = "0.2.3-pre.8" +version = "0.2.3-pre.9" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/ROADMAP.md b/ROADMAP.md index a2de861..2faaa15 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,5 +1,5 @@ - + # Roadmap KSP @@ -47,7 +47,7 @@ Le roadmap décrit les objectifs à atteindre et les grandes étapes prévues. U - [X] `0.2.1` — **HTTP transport foundation réduite par le gate `pre.001`** : crate/settings/JSON-RPC/registry 52 current + 14 deprecated historiques, pool/rôles/limites/retry, Config adapter, documentation et 4 méthodes typées canari (`getBalance`, `getGenesisHash`, `getHealth`, `getVersion`) publiés stables. - [X] `0.2.2` — HTTP Accounts + Tokens + Cluster : 22 wrappers typés (5 Accounts + 5 Tokens + 12 Cluster), canaries de complétude 52+14, smoke Devnet Transport pur et smoke historique Config -> Transport validés, documentation durable et prompt `0.2.3` publiés stables. -- [/] `0.2.3` — Compléter les 11 méthodes HTTP Transactions, y compris write/submission technique avec politique no-resend ambigu ; `pre.001` confirme le périmètre, la classification `8 Read / 2 WriteSubmission / 1 Simulation`, le gate de sizing positif et l’absence de nouvelle dépendance. +- [/] `0.2.3` — HTTP Transactions candidate : 11/11 wrappers typés implémentés, classification `8 Read / 2 WriteSubmission / 1 Simulation`, no-resend ambigu prouvé pour les write submissions, `KSP-TRANSPORT-007` réaudité sur les 37 wrappers HTTP courants et clôture `pre.009` préparée ; publication stable encore réservée à `rel.001`. - [ ] `0.2.4` — Compléter les 10 méthodes HTTP Blocks + 5 Economics et exécuter la compliance finale de toute la surface HTTP 52 current + 14 deprecated historiques. - [ ] `0.2.5` — Introduire `ksp-wallet-lib`, le format `.kspwallet`, la gestion sûre des secrets et une architecture d'import/export extensible ; exclure `WalletPolicy`. - [ ] `0.2.6` — Introduire `ksp-app-wallet-desk` utilisant Config composite + Wallet + transport HTTP, notamment pour afficher l'identité et le solde d'un wallet. diff --git a/crates/ksp-onchain-transport-lib/README.md b/crates/ksp-onchain-transport-lib/README.md index cc29a7b..4530570 100644 --- a/crates/ksp-onchain-transport-lib/README.md +++ b/crates/ksp-onchain-transport-lib/README.md @@ -1,5 +1,5 @@ - + # `ksp-onchain-transport-lib` @@ -69,16 +69,21 @@ Le registre porte notamment : - remplacement historique éventuel ; - release de couverture typée KSP. -La surface typée stable après `0.2.2` contient **26 méthodes** : +La candidate `0.2.3-pre.009` porte la surface typée à **37 méthodes courantes** : ```text -0.2.1 foundation : 4 -0.2.2 Accounts : 5 -0.2.2 Tokens : 5 -0.2.2 Cluster : 12 +0.2.1 foundation : 4 +0.2.2 Accounts : 5 +0.2.2 Tokens : 5 +0.2.2 Cluster : 12 +0.2.3 Transactions : 11 ``` -Les quatre canaris foundation restent `getBalance`, `getGenesisHash`, `getHealth` et `getVersion`. `0.2.2` ajoute les 22 wrappers Accounts/Tokens/Cluster affectés à `HttpRpcCoverageRelease::V0_2_2`. Les 26 méthodes Transactions/Blocks/Economics encore affectées à `0.2.3`–`0.2.4` peuvent déjà passer par l'exécuteur JSON-RPC standard générique lorsqu'un consumer fournit explicitement descriptor et paramètres JSON, mais cette surface raw/générique **ne vaut pas couverture typée**. +Les quatre canaris foundation restent `getBalance`, `getGenesisHash`, `getHealth` et `getVersion`. `0.2.2` ajoute les 22 wrappers Accounts/Tokens/Cluster. `0.2.3` ajoute les 11 wrappers Transactions, dont `requestAirdrop` et `sendTransaction` en `WriteSubmission / NeverAfterDispatch` et `simulateTransaction` en `Simulation / RetrySafe`. + +Les **15 méthodes Blocks/Economics** encore affectées à `0.2.4` peuvent déjà passer par l'exécuteur JSON-RPC standard générique lorsqu'un consumer fournit explicitement descriptor et paramètres JSON, mais cette surface raw/générique **ne vaut pas couverture typée**. + +`KSP-TRANSPORT-007` impose qu'un wrapper typé couvre toutes les possibilités RPC supportées retenues par l'audit : paramètres/options, overloads et formes legacy encore supportées, contraintes déterministes utiles et variantes de réponse pertinentes sans perte. Le réaudit `0.2.3-pre.008` confirme cette complétude sur les 37 wrappers courants. Les 14 méthodes historiques restent découvrables pour la compliance mais sont `Removed` et ne sont pas simulées comme appelables. @@ -122,7 +127,8 @@ Deux smokes Devnet opt-in sont séparés par responsabilité : ```text Transport pur : settings programmatiques -> HttpTransportPool - -> getAccountInfo/getTokenAccountsByOwner/getEpochInfo/getVoteAccounts + -> Accounts/Tokens/Cluster représentatifs + -> getLatestBlockhash/isBlockhashValid/getTransactionCount Composition historique : Config -> std.transport/devnet_public -> HttpTransportPool -> getHealth/getGenesisHash/getVersion/getBalance @@ -138,4 +144,6 @@ Les deux sont `ignored` par défaut. Le smoke Transport appartient durablement - [`../../docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](../../docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md) — foundation HTTP stable ; - [`../../docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md`](../../docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md) — extension typed Accounts/Tokens/Cluster ; - [`../../docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md`](../../docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md) — matrice finale validée `0.2.2` ; +- [`../../docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`](../../docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md) — plan de la candidate `0.2.3` ; +- [`../../docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md`](../../docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md) — matrice de clôture candidate `0.2.3` ; - [`../../config/std.transport.json`](../../config/std.transport.json) — configuration standard HTTP. diff --git a/crates/ksp-onchain-transport-lib/USAGE.md b/crates/ksp-onchain-transport-lib/USAGE.md index 2f4014a..7d60f25 100644 --- a/crates/ksp-onchain-transport-lib/USAGE.md +++ b/crates/ksp-onchain-transport-lib/USAGE.md @@ -1,5 +1,5 @@ - + # Utilisation de `ksp-onchain-transport-lib` @@ -96,7 +96,24 @@ let epoch = pool.get_epoch_info(&role, None).await; let vote_accounts = pool.get_vote_accounts(&role, None).await; ``` -La surface stable `0.2.2` contient 26 wrappers typés au total : 4 foundation + 5 Accounts + 5 Tokens + 12 Cluster. Les DTOs Transport conservent les `null`, options et formes wire : données Account encodées/`jsonParsed`, `TokenAmount.uiAmount`, contexte RPC, nodes, epoch, leader schedule et vote accounts. Aucun décodage Program/SPL métier n'est effectué ici. +La candidate `0.2.3-pre.009` contient 37 wrappers typés : 4 foundation + 5 Accounts + 5 Tokens + 12 Cluster + 11 Transactions. Les DTOs Transport conservent les `null`, options et formes wire sans décodage Program/SPL métier. + +Exemples Transaction représentatifs : + +```rust +let context = ksp_onchain_transport_lib::SolanaContextConfig::new( + std::option::Option::Some(ksp_onchain_transport_lib::SolanaCommitment::Finalized), + std::option::Option::None, +); +let latest = pool + .get_latest_blockhash(&role, std::option::Option::Some(&context)) + .await; +let transaction_count = pool + .get_transaction_count(&role, std::option::Option::Some(&context)) + .await; +``` + +`getTransaction` expose la config moderne complète et une forme bare-encoding legacy séparée et deprecated. `requestAirdrop` et `sendTransaction` sont des write submissions : elles utilisent la protection centrale `NeverAfterDispatch`. `simulateTransaction` reste une simulation retry-safe et conserve son résultat riche sans introduire de décodage Program. ## 4. Exécution JSON-RPC standard générique @@ -155,13 +172,13 @@ La configuration standard route les événements `info` de Transport vers un fic ## 9. Smokes Devnet opt-in -Le smoke **Transport pur** construit ses settings programmatiquement et exerce un sous-ensemble représentatif de `0.2.2` : +Le smoke **Transport pur** construit ses settings programmatiquement et exerce un sous-ensemble représentatif de `0.2.2` puis trois reads Transactions de `0.2.3` : ```bash cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture ``` -Il appelle `getAccountInfo`, `getTokenAccountsByOwner`, `getEpochInfo` et `getVoteAccounts`. La branche Token suit la forme Devnet documentée : owner Pubkey ordinaire de l'exemple officiel, selector `programId` avec l'ID canonique du programme SPL Token, puis config explicite `commitment: finalized` + `encoding: jsonParsed`. Une réponse vide reste acceptable : le smoke valide ainsi la route Token sans dépendre de la persistance d'un mint ou d'un token account Devnet particulier. +Il appelle `getAccountInfo`, `getTokenAccountsByOwner`, `getEpochInfo`, `getVoteAccounts`, puis `getLatestBlockhash`, `isBlockhashValid` et `getTransactionCount`. La branche Token suit la forme Devnet documentée : owner Pubkey ordinaire de l'exemple officiel, selector `programId` avec l'ID canonique du programme SPL Token, puis config explicite `commitment: finalized` + `encoding: jsonParsed`. Une réponse vide reste acceptable. La branche Transaction reste read-only : elle ne déclenche ni airdrop ni soumission de transaction et ne remplace pas les fixtures déterministes couvrant les 11 wrappers. Le smoke historique de **composition Config -> Transport** reste également disponible : diff --git a/crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs b/crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs index 550642c..b177512 100644 --- a/crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs +++ b/crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs @@ -1,7 +1,7 @@ // file: crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs -// version: 3 +// version: 4 -//! Opt-in live Devnet smoke for the pure Transport Accounts/Tokens/Cluster path. +//! Opt-in live Devnet smoke for representative pure Transport Accounts/Tokens/Cluster/Transactions reads. fn devnet_pool() -> ksp_core_lib::Result { let role = ksp_onchain_transport_lib::HttpRoleName::new("default"); @@ -42,7 +42,7 @@ fn devnet_pool() -> ksp_core_lib::Result 0); + + let blockhash_valid = pool + .is_blockhash_valid(&role, latest_blockhash.value().blockhash(), std::option::Option::Some(&transaction_context)) + .await + .expect("Devnet isBlockhashValid smoke must succeed"); + assert_eq!(blockhash_valid.value(), &true); + + let transaction_count = pool + .get_transaction_count(&role, std::option::Option::Some(&transaction_context)) + .await + .expect("Devnet getTransactionCount smoke must succeed"); + assert!(transaction_count > 0); } diff --git a/deltas/0.2.3/pre.009.md b/deltas/0.2.3/pre.009.md new file mode 100644 index 0000000..fa4164c --- /dev/null +++ b/deltas/0.2.3/pre.009.md @@ -0,0 +1,293 @@ + + + +# Delta `v0.2.3-pre.009` + +## Base + +Base attendue : + +```text +v0.2.3-pre.008 +``` + +La base `pre.008` a été validée localement par l'opérateur le 2026-08-18 avec : + +```text +cargo fmt --all +cargo check --workspace +cargo clippy --workspace --all-targets +cargo test -p ksp-onchain-transport-lib +``` + +Résultats Transport communiqués : + +```text +182 unit tests passed +19 public API tests passed +14 release completeness tests passed +1 smoke live ignored par défaut +0 failure +0 warning clippy signalé +``` + +La matrice `docs/validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md` a été corrigée manuellement par l'opérateur pour réaligner son tableau Markdown avant cette validation. Cette version `2` corrigée constitue la base documentaire de `pre.009` et n'est pas réécrite par ce delta. + +Version Cargo cible : + +```text +0.2.3-pre.9 +``` + +## Objectif + +Amener `0.2.3 — HTTP Transactions` au statut **candidate de clôture** sans ajouter de capacité RPC fonctionnelle : + +- refaire le dernier contrôle de l'inventaire HTTP officiel ; +- figer la surface candidate 37 wrappers typés, dont 11/11 Transactions ; +- synchroniser README/USAGE et la documentation durable ; +- produire la matrice de clôture `0.2.3` ; +- étendre le smoke Devnet Transport pur à trois reads Transactions sans effet de bord ; +- préparer le prompt `0.2.4 — HTTP Blocks + Economics + compliance HTTP finale` ; +- préparer un `rel.001` strictement publicationnel. + +`CHANGELOG.md` reste volontairement inchangé jusqu'à `0.2.3-rel.001`. + +## Réaudit officiel final + +La documentation Solana courante a été revérifiée le 2026-08-18 : + +```text +https://solana.com/docs/rpc/http +https://solana.com/docs/rpc/deprecated/confirmtransaction +https://solana.com/docs/rpc/json-structures +``` + +Le résultat reste : + +```text +52 méthodes HTTP courantes +14 méthodes historiques Deprecated +``` + +La partition KSP reste donc : + +```text +V0_2_1 4 +V0_2_2 22 +V0_2_3 11 +V0_2_4 15 +``` + +Aucun recalibrage du registre n'est requis. + +## Surface candidate `0.2.3` + +Les 11 wrappers Transactions restent complets conformément au plan et à `KSP-TRANSPORT-007` : + +```text +getFeeForMessage +getLatestBlockhash +getRecentPrioritizationFees +getSignaturesForAddress +getSignatureStatuses +getTransaction +getTransactionCount +isBlockhashValid +requestAirdrop +sendTransaction +simulateTransaction +``` + +Classification : + +```text +8 Read / RetrySafe +2 WriteSubmission / NeverAfterDispatch +1 Simulation / RetrySafe +``` + +Le réaudit rétroactif `pre.008` reste la preuve que les 37 wrappers typés courants de `0.2.1`–`0.2.3` ne manquent aucune possibilité RPC supportée retenue par l'audit. + +## Smoke Devnet Transport pur étendu + +Le smoke existant reste dans : + +```text +crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs +``` + +Il conserve Accounts/Tokens/Cluster et ajoute trois reads Transaction : + +```text +getLatestBlockhash(finalized) +isBlockhashValid(blockhash précédent, finalized) +getTransactionCount(finalized) +``` + +La branche ajoutée est volontairement sans effet de bord : + +- aucun `requestAirdrop` ; +- aucun `sendTransaction` ; +- aucune transaction sérialisée nécessaire ; +- aucune nouvelle ownership boundary. + +Les fixtures locales restent les gates déterministes de la surface Transaction complète. + +Commande opt-in : + +```bash +cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture +``` + +## Documentation de clôture + +Nouveau document : + +```text +docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md +``` + +Il rassemble : + +- inventaire 52+14 ; +- partition 4/22/11/15 ; +- matrice des 11 Transactions ; +- sécurité write/simulation ; +- complétude `KSP-TRANSPORT-007` ; +- canaries déterministes ; +- smoke Transport ; +- firewall de dépendances ; +- commandes de validation de candidate ; +- contrat publicationnel `rel.001`. + +README/USAGE Transport passent de la photographie stable `0.2.2` à la candidate `0.2.3-pre.009` avec 37 wrappers typés et 15 Blocks/Economics restants. + +## Prompt `0.2.4` + +Nouveau prompt : + +```text +prompts/009-V0_2_4_START_PROMPT.md +``` + +Il cible exactement : + +```text +10 Blocks +5 Economics +15 wrappers V0_2_4 +``` + +et impose : + +- nouvel audit officiel/Agave à `pre.001` ; +- gate de sizing ; +- `KSP-TRANSPORT-007` dès chaque wrapper ; +- réutilisation des wires Account/Transaction existants ; +- traitement explicite des overloads et legacy, notamment `getBlock` ; +- compliance finale 52/52 current + 14/14 historical ; +- préparation du prompt `0.2.5 — Wallet foundation` à la clôture. + +## Préparation de `rel.001` + +Si toutes les validations de candidate passent : + +```text +workspace.package.version -> 0.2.3 +ROADMAP : 0.2.3 -> [X] +CHANGELOG : synthèse stable 0.2.3 +plan 010 / validation 006 : preuves opérateur finales +deltas/0.2.3/rel.001.md +commit v0.2.3-rel.001 +tag stable v0.2.3 après validation +``` + +Aucun nouveau wrapper, DTO ou comportement runtime ne doit entrer dans `rel.001`. + +## Fichiers ajoutés + +```text +docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md +prompts/009-V0_2_4_START_PROMPT.md +deltas/0.2.3/pre.009.md +``` + +## 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/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/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md +docs/validation/000-README.md +prompts/000-README.md +``` + +## Fichiers non modifiés volontairement + +```text +CHANGELOG.md +crates/ksp-onchain-transport-lib/src/ +crates/ksp-onchain-transport-lib/unit_tests/ +crates/ksp-onchain-transport-lib/tests/public_api.rs +crates/ksp-onchain-transport-lib/tests/release_completeness.rs +docs/validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md +``` + +Aucune dépendance et aucune feature Cargo ne sont ajoutées. + +## Contrôles statiques exécutés pendant la préparation + +- version Cargo `0.2.3-pre.9` ; +- aucune modification de source Rust de production ; +- aucune modification du registre RPC ou des wrappers ; +- smoke live toujours `#[ignore]` ; +- branche Transaction du smoke strictement read-only ; +- matrice audit rétroactif opérateur conservée byte-for-byte depuis la base corrigée ; +- nouveaux tableaux Markdown alignés ; +- index docs/plans/validation/prompts synchronisés ; +- aucune nouvelle dépendance/feature ; +- archive réextraite puis comparée au payload préparé. + +Cargo n'est pas disponible dans l'environnement de préparation ; aucune validation Cargo de `pre.009` n'est donc déclarée réussie ici. + +## Validations opérateur requises + +```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 +``` + +Résultat déterministe Transport attendu avant les smokes live : + +```text +182 unit tests +19 public API tests +14 release completeness tests +1 Transport Devnet smoke ignored par défaut +``` diff --git a/docs/000-README.md b/docs/000-README.md index 659fa51..2770e95 100644 --- a/docs/000-README.md +++ b/docs/000-README.md @@ -1,5 +1,5 @@ - + # Documentation KSP @@ -48,7 +48,9 @@ docs/ │ ├── 001-V0_1_4_CONFIG_DESKTOP.md │ ├── 002-V0_2_0_SERIES_PLANNING.md │ ├── 003-V0_2_1_ONCHAIN_HTTP.md -│ └── 004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md +│ ├── 004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md +│ ├── 005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md +│ └── 006-V0_2_3_HTTP_TRANSACTIONS.md └── rules/ ├── FILE_CONTRACTS.md ├── PROMPT_STRUCTURE.md @@ -65,7 +67,7 @@ D'autres sous-répertoires seront ajoutés uniquement lorsque leur rôle aura é ## Documents de planification -Le plan historique de la phase fondatrice clôturée est conservé dans [`plans/001-V0_0_3_PLAN.md`](plans/001-V0_0_3_PLAN.md). La séquence active des premières releases fonctionnelles est définie dans [`plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md`](plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md). Le plan détaillé de la release stable `0.1.1` est conservé comme historique clôturé dans [`plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md`](plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.2` est conservé comme historique clôturé dans [`plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md`](plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.3 — Configuration foundation` est conservé comme historique clôturé dans [`plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md`](plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.4 — ksp-app-config-desk` est conservé comme historique clôturé dans [`plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md`](plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md), avec sa matrice finale [`validation/001-V0_1_4_CONFIG_DESKTOP.md`](validation/001-V0_1_4_CONFIG_DESKTOP.md). Son prompt d'ouverture historique reste [`../prompts/004-V0_1_4_START_PROMPT.md`](../prompts/004-V0_1_4_START_PROMPT.md). La release stable `0.2.0` clôt l'audit de bot3 et le découpage de la série. Son plan directeur est conservé comme historique clôturé dans [`plans/007-V0_2_0_SERIES_PLANNING.md`](plans/007-V0_2_0_SERIES_PLANNING.md), avec sa matrice finale [`validation/002-V0_2_0_SERIES_PLANNING.md`](validation/002-V0_2_0_SERIES_PLANNING.md). La release stable `0.2.1 — HTTP Solana foundation` a été ouverte par [`../prompts/006-V0_2_1_START_PROMPT.md`](../prompts/006-V0_2_1_START_PROMPT.md). Son gate de sizing et sa matrice exhaustive sont conservés dans [`plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md), avec la validation finale [`validation/003-V0_2_1_ONCHAIN_HTTP.md`](validation/003-V0_2_1_ONCHAIN_HTTP.md), README/USAGE Transport et le smoke Devnet opt-in de composition Config -> Transport. Le prompt [`../prompts/007-V0_2_2_START_PROMPT.md`](../prompts/007-V0_2_2_START_PROMPT.md) a ouvert la release stable `0.2.2 — HTTP Accounts + Tokens + Cluster`. Son plan clôturé [`plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md`](plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md) conserve l'audit et l'implémentation des 22 wrappers typés, tandis que [`validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md`](validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md) enregistre les validations déterministes, les graphes Cargo et les deux smokes Devnet passés avant publication. Le prompt [`../prompts/008-V0_2_3_START_PROMPT.md`](../prompts/008-V0_2_3_START_PROMPT.md) ouvre `0.2.3 — HTTP Transactions`. Son plan actif [`plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`](plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md), établi par `0.2.3-pre.001`, confirme les 11 méthodes, les contrats wire, la classification write/simulation et le gate de sizing avant implémentation. +Le plan historique de la phase fondatrice clôturée est conservé dans [`plans/001-V0_0_3_PLAN.md`](plans/001-V0_0_3_PLAN.md). La séquence active des premières releases fonctionnelles est définie dans [`plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md`](plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md). Le plan détaillé de la release stable `0.1.1` est conservé comme historique clôturé dans [`plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md`](plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.2` est conservé comme historique clôturé dans [`plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md`](plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.3 — Configuration foundation` est conservé comme historique clôturé dans [`plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md`](plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.4 — ksp-app-config-desk` est conservé comme historique clôturé dans [`plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md`](plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md), avec sa matrice finale [`validation/001-V0_1_4_CONFIG_DESKTOP.md`](validation/001-V0_1_4_CONFIG_DESKTOP.md). Son prompt d'ouverture historique reste [`../prompts/004-V0_1_4_START_PROMPT.md`](../prompts/004-V0_1_4_START_PROMPT.md). La release stable `0.2.0` clôt l'audit de bot3 et le découpage de la série. Son plan directeur est conservé comme historique clôturé dans [`plans/007-V0_2_0_SERIES_PLANNING.md`](plans/007-V0_2_0_SERIES_PLANNING.md), avec sa matrice finale [`validation/002-V0_2_0_SERIES_PLANNING.md`](validation/002-V0_2_0_SERIES_PLANNING.md). La release stable `0.2.1 — HTTP Solana foundation` a été ouverte par [`../prompts/006-V0_2_1_START_PROMPT.md`](../prompts/006-V0_2_1_START_PROMPT.md). Son gate de sizing et sa matrice exhaustive sont conservés dans [`plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md), avec la validation finale [`validation/003-V0_2_1_ONCHAIN_HTTP.md`](validation/003-V0_2_1_ONCHAIN_HTTP.md), README/USAGE Transport et le smoke Devnet opt-in de composition Config -> Transport. Le prompt [`../prompts/007-V0_2_2_START_PROMPT.md`](../prompts/007-V0_2_2_START_PROMPT.md) a ouvert la release stable `0.2.2 — HTTP Accounts + Tokens + Cluster`. Son plan clôturé [`plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md`](plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md) conserve l'audit et l'implémentation des 22 wrappers typés, tandis que [`validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md`](validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md) enregistre les validations déterministes, les graphes Cargo et les deux smokes Devnet passés avant publication. Le prompt [`../prompts/008-V0_2_3_START_PROMPT.md`](../prompts/008-V0_2_3_START_PROMPT.md) ouvre `0.2.3 — HTTP Transactions`. Son plan candidat [`plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`](plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md) conduit les 11 wrappers jusqu'à `pre.009`; le réaudit [`validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md`](validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md) confirme la complétude des 37 wrappers HTTP typés et [`validation/006-V0_2_3_HTTP_TRANSACTIONS.md`](validation/006-V0_2_3_HTTP_TRANSACTIONS.md) porte la matrice de clôture candidate. Le prompt [`../prompts/009-V0_2_4_START_PROMPT.md`](../prompts/009-V0_2_4_START_PROMPT.md) prépare la dernière release de complétude HTTP. `IDEAS.md` conserve les pistes et questions qui ne sont pas encore des engagements du roadmap ni des décisions architecturales. diff --git a/docs/architecture/004-COMPONENT_INVENTORY.md b/docs/architecture/004-COMPONENT_INVENTORY.md index 2d09270..618604a 100644 --- a/docs/architecture/004-COMPONENT_INVENTORY.md +++ b/docs/architecture/004-COMPONENT_INVENTORY.md @@ -1,5 +1,5 @@ - + # Inventaire initial des composants KSP @@ -17,41 +17,41 @@ Ce document maintient l'inventaire synthétique des composants retenus ou presse ## Inventaire synthétique -| Domaine | Composant | Type | Statut | Première cible actuelle | Mission | -|-------------------------|------------------------------------------|--------------------|--------------|---------------------------------|----------------------------------------------------------| -| Core | `ksp-core-lib` | lib | Stable | `0.1.1` | Error/Result, Program IDs et primitives fondamentales | -| Logging | `ksp-logging-lib` | lib | Stable | `0.1.2` | façade unique tracing KSP | -| Config | `ksp-config-lib` | lib | Stable | `0.1.3` | documents, profils, env et persistence Config | -| Config Desk | `ksp-app-config-desk` | app | Stable | `0.1.4` | validation/management Config | -| On-chain HTTP | `ksp-onchain-transport-lib` | lib | Stable | `0.2.1` | foundation HTTP + 26 wrappers typés stables après 0.2.2 | -| Wallet | `ksp-wallet-lib` | lib | Retenu | `0.2.5` | `.kspwallet`, secrets, signature, import/export | -| Wallet Desk | `ksp-app-wallet-desk` | app | Retenu | `0.2.6` | Wallet + Config composite + HTTP/balance | -| Standard WS | `ksp-onchain-transport-lib` | lib | Retenu | `0.2.7` | WebSocket Solana complet, sessions/subscriptions | -| Helius WS | `ksp-onchain-transport-lib` | lib | Retenu | `0.2.8` | LaserStream WebSocket comme extension du moteur standard | -| Yellowstone | `ksp-onchain-transport-lib` | lib | Pressenti | `0.2.9` | client gRPC standard/provider-neutral | -| Off-chain price | `ksp-offchain-transport-lib` | lib | Retenu | `0.2.10` | première abstraction/provider de prix SOL/USD, SOL/EUR | -| Price Desk | nom à fixer | app | Retenu | `0.2.11` | visualisation/validation des prix | -| Wire | `ksp-interface-lib` | lib | Retenu | `0.2.12` | façade wire officielle + API publique wire | -| Program API | `ksp-program-api` | API | Retenu | `0.2.13` | contrats extensibles Program | -| Program impl. | `ksp-program-lib` | lib | Retenu | vertical slices ultérieurs | implementations Program officielles | -| Program extension | `ksp-program--lib` | lib externe | À la demande | dès besoin | implementation externe de `ksp-program-api` | -| Store API | `ksp-store-api` | API | Retenu | `0.3.1` | contrats persistence backend-agnostic, RAW d'abord | -| Store PostgreSQL | `ksp-store-lib` | lib | Retenu | `0.3.1` | backend PostgreSQL officiel, RAW d'abord | -| Job lifecycle | `ksp-job-api` | API | Retenu | `0.3.3` | lifecycle des jobs terminables | -| Backfill | `ksp-job-backfill` | job/lib à préciser | Retenu | `0.3.3` | acquisition historique vers RAW | -| Backfill Desk | nom à fixer | app | Retenu | `0.3.4` | contrôle/inspection du backfill RAW | -| Worker lifecycle | `ksp-worker-api` | API | Retenu | fin couche RAW | lifecycle des services continus | -| RAW worker | `ksp-worker-raw-retriever` ou nom révisé | worker | Retenu | fin couche RAW | acquisition live vers RAW | -| CORE processor | nom à fixer | processor/lib | Retenu | couche CORE | normalisation Solana générique RAW -> CORE | -| CORE worker | nom à fixer | worker | Retenu | fin couche CORE | backlog RAW -> CORE continu | -| Materializer API | `ksp-materializer-api` | API | Retenu | premier groupe DECODE | contrats extensibles matérialisation | -| Materializer impl. | `ksp-materializer-lib` | lib | Retenu | premier groupe DECODE | implementations officielles communes | -| Execution policy | `ksp-execution-policy-api` | API | Retenu | premier vrai besoin execution | décision/safety multi-contexte | -| Execution orchestration | `ksp-execution-lib` | lib | Retenu | premier vrai cycle execution | Program + policy + Wallet + transport | -| Scenarios | `ksp-scenario--lib` | lib | Retenu | vertical slices | validation métier/devnet par groupe | -| Scenario API | `ksp-scenario-api` | API | Non retenu | — | norme souple avant trait commun | -| Market Desk | `ksp-app-market-desk` | app | Pressenti | après Meteora/Raydium/Pump/Orca | tokens, pools, trades, liquidity, price, OHLC | -| Trading Intelligence | noms à définir | libs/jobs | Futur | après données stables | features/signaux/anomalies/ML | +| Domaine | Composant | Type | Statut | Première cible actuelle | Mission | +|-------------------------|------------------------------------------|--------------------|--------------|---------------------------------|-----------------------------------------------------------| +| Core | `ksp-core-lib` | lib | Stable | `0.1.1` | Error/Result, Program IDs et primitives fondamentales | +| Logging | `ksp-logging-lib` | lib | Stable | `0.1.2` | façade unique tracing KSP | +| Config | `ksp-config-lib` | lib | Stable | `0.1.3` | documents, profils, env et persistence Config | +| Config Desk | `ksp-app-config-desk` | app | Stable | `0.1.4` | validation/management Config | +| On-chain HTTP | `ksp-onchain-transport-lib` | lib | Stable | `0.2.1` | foundation HTTP + 37 wrappers typés candidats après 0.2.3 | +| Wallet | `ksp-wallet-lib` | lib | Retenu | `0.2.5` | `.kspwallet`, secrets, signature, import/export | +| Wallet Desk | `ksp-app-wallet-desk` | app | Retenu | `0.2.6` | Wallet + Config composite + HTTP/balance | +| Standard WS | `ksp-onchain-transport-lib` | lib | Retenu | `0.2.7` | WebSocket Solana complet, sessions/subscriptions | +| Helius WS | `ksp-onchain-transport-lib` | lib | Retenu | `0.2.8` | LaserStream WebSocket comme extension du moteur standard | +| Yellowstone | `ksp-onchain-transport-lib` | lib | Pressenti | `0.2.9` | client gRPC standard/provider-neutral | +| Off-chain price | `ksp-offchain-transport-lib` | lib | Retenu | `0.2.10` | première abstraction/provider de prix SOL/USD, SOL/EUR | +| Price Desk | nom à fixer | app | Retenu | `0.2.11` | visualisation/validation des prix | +| Wire | `ksp-interface-lib` | lib | Retenu | `0.2.12` | façade wire officielle + API publique wire | +| Program API | `ksp-program-api` | API | Retenu | `0.2.13` | contrats extensibles Program | +| Program impl. | `ksp-program-lib` | lib | Retenu | vertical slices ultérieurs | implementations Program officielles | +| Program extension | `ksp-program--lib` | lib externe | À la demande | dès besoin | implementation externe de `ksp-program-api` | +| Store API | `ksp-store-api` | API | Retenu | `0.3.1` | contrats persistence backend-agnostic, RAW d'abord | +| Store PostgreSQL | `ksp-store-lib` | lib | Retenu | `0.3.1` | backend PostgreSQL officiel, RAW d'abord | +| Job lifecycle | `ksp-job-api` | API | Retenu | `0.3.3` | lifecycle des jobs terminables | +| Backfill | `ksp-job-backfill` | job/lib à préciser | Retenu | `0.3.3` | acquisition historique vers RAW | +| Backfill Desk | nom à fixer | app | Retenu | `0.3.4` | contrôle/inspection du backfill RAW | +| Worker lifecycle | `ksp-worker-api` | API | Retenu | fin couche RAW | lifecycle des services continus | +| RAW worker | `ksp-worker-raw-retriever` ou nom révisé | worker | Retenu | fin couche RAW | acquisition live vers RAW | +| CORE processor | nom à fixer | processor/lib | Retenu | couche CORE | normalisation Solana générique RAW -> CORE | +| CORE worker | nom à fixer | worker | Retenu | fin couche CORE | backlog RAW -> CORE continu | +| Materializer API | `ksp-materializer-api` | API | Retenu | premier groupe DECODE | contrats extensibles matérialisation | +| Materializer impl. | `ksp-materializer-lib` | lib | Retenu | premier groupe DECODE | implementations officielles communes | +| Execution policy | `ksp-execution-policy-api` | API | Retenu | premier vrai besoin execution | décision/safety multi-contexte | +| Execution orchestration | `ksp-execution-lib` | lib | Retenu | premier vrai cycle execution | Program + policy + Wallet + transport | +| Scenarios | `ksp-scenario--lib` | lib | Retenu | vertical slices | validation métier/devnet par groupe | +| Scenario API | `ksp-scenario-api` | API | Non retenu | — | norme souple avant trait commun | +| Market Desk | `ksp-app-market-desk` | app | Pressenti | après Meteora/Raydium/Pump/Orca | tokens, pools, trades, liquidity, price, OHLC | +| Trading Intelligence | noms à définir | libs/jobs | Futur | après données stables | features/signaux/anomalies/ML | ## Contrats séparés retenus @@ -78,7 +78,7 @@ ksp-data-api ## Transport -`ksp-onchain-transport-lib` doit couvrir l'intégralité des opérations documentées de la surface ciblée par chaque release. `0.2.1` stabilise la foundation HTTP et quatre wrappers typés canari. `0.2.2` stabilise 22 wrappers Accounts/Tokens/Cluster supplémentaires, soit 26 wrappers typés au total ; les 26 méthodes Transactions/Blocks/Economics restantes restent affectées à `0.2.3`–`0.2.4`. Les statuts deprecated/obsolete encore fonctionnels et unstable/experimental restent exposés avec warning runtime KSP. +`ksp-onchain-transport-lib` doit couvrir l'intégralité des opérations documentées de la surface ciblée par chaque release. `0.2.1` stabilise la foundation HTTP et quatre wrappers typés canari. `0.2.2` stabilise 22 wrappers Accounts/Tokens/Cluster supplémentaires. La candidate `0.2.3-pre.009` ajoute les 11 Transactions et porte la surface typed à 37 méthodes ; les 15 méthodes Blocks/Economics restent affectées à `0.2.4`, qui exécutera aussi la compliance finale de la surface 52 current + 14 historiques. Les statuts deprecated/obsolete encore fonctionnels et unstable/experimental restent exposés avec warning runtime KSP. La Config standard Transport appartient à `ksp-config-lib`, qui adapte vers les settings publics du transport ; le transport ne dépend jamais de Config. diff --git a/docs/plans/000-README.md b/docs/plans/000-README.md index 32f870d..ff07a53 100644 --- a/docs/plans/000-README.md +++ b/docs/plans/000-README.md @@ -1,5 +1,5 @@ - + # Plans KSP @@ -18,7 +18,7 @@ Un plan décrit le périmètre, les décisions déjà acquises, les questions ou - [`007-V0_2_0_SERIES_PLANNING.md`](007-V0_2_0_SERIES_PLANNING.md) — plan historique clôturé de la release stable `0.2.0`, ouvert par `pre.001`, consolidé par `pre.002`, audité par `pre.003` puis publié par `rel.001`; il fixe l'ordre `0.2.1+`, la stratégie RAW/CORE/DECODE/SPECIALIZED, les vertical slices Program et le prompt `0.2.1`. - [`008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](008-V0_2_1_ONCHAIN_HTTP_PLAN.md) — plan de `0.2.1`, établi par `0.2.1-pre.001`, recalibré par `pre.001-fix.001` et amené en clôture candidate par `pre.007`; il conserve l'inventaire 52 méthodes HTTP courantes + 14 Deprecated historiques, le design Transport/Config et le split de couverture typée sur `0.2.1`–`0.2.4`. - [`009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md`](009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md) — plan clôturé de la release stable `0.2.2`, établi par `pre.001`, corrigé après réaudit Agave v4.2.1 puis exécuté jusqu'à `pre.007-fix.002`; il couvre les 22 wrappers Accounts/Tokens/Cluster, le smoke Transport opt-in et la préparation de `0.2.3`. -- [`010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`](010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md) — plan actif de `0.2.3 — HTTP Transactions`, ouvert par `pre.001`; il confirme les 11 méthodes, la classification `8 Read / 2 WriteSubmission / 1 Simulation`, les wires transactionnels et le no-resend après dispatch ambigu. +- [`010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`](010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md) — plan candidat de `0.2.3 — HTTP Transactions`, ouvert par `pre.001` puis exécuté jusqu'à `pre.009`; il couvre les 11 méthodes, la classification `8 Read / 2 WriteSubmission / 1 Simulation`, `KSP-TRANSPORT-007`, le no-resend et la préparation de `0.2.4`. Le `pre.001` de chaque release fonctionnelle peut introduire son propre plan détaillé lorsque la release s'ouvre. diff --git a/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md b/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md index bdd358a..42ec9b1 100644 --- a/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md +++ b/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md @@ -1,5 +1,5 @@ - + # Séquence des releases fonctionnelles KSP @@ -392,7 +392,7 @@ Chaque `pre.001` réaudite la documentation officielle actuelle. Les méthodes D `0.2.2-pre.001` a confirmé la partition de 22 méthodes et son fix documentaire a recoupé les formes wire avec Agave v4.2.1. Les tranches `pre.002`–`pre.006` ont livré les DTOs puis les 5 Accounts, 5 Tokens et 12 Cluster. `pre.007`, puis `pre.007-fix.001` et `pre.007-fix.002`, ont fermé les canaries exactes 22/22, le smoke Devnet Transport pur, README/USAGE, la matrice de validation `004` et le prompt `0.2.3`. `0.2.2-rel.001` publie cette surface stable après validation du workspace et des deux smokes Devnet. Le smoke cross-crates Config -> Transport de `0.2.1` reste séparé et transitoire. -`0.2.3-pre.001` réaudite le 2026-08-18 la catégorie Transactions contre la documentation Solana actuelle et Agave v4.2.1 : les 11 méthodes prévues restent exactes, la classification `8 Read / RetrySafe`, `2 WriteSubmission / NeverAfterDispatch` et `1 Simulation / RetrySafe` reste correcte, et le gate de sizing est positif. Aucun `base64`, `bs58`, `wincode` ni client RPC Solana supplémentaire n’est ajouté à l’ouverture : les payloads sérialisés restent opaques dans Transport tant qu’un besoin de décodage local n’est pas démontré. Le plan détaillé actif est `docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`. +`0.2.3-pre.001` réaudite le 2026-08-18 la catégorie Transactions contre la documentation Solana actuelle et Agave v4.2.1 : les 11 méthodes prévues restent exactes, la classification `8 Read / RetrySafe`, `2 WriteSubmission / NeverAfterDispatch` et `1 Simulation / RetrySafe` reste correcte, et le gate de sizing est positif. `pre.002`–`pre.007` livrent ensuite les primitives wire puis les 11 wrappers, `pre.008` réaudite rétroactivement `KSP-TRANSPORT-007` sur les 37 wrappers HTTP typés sans remédiation fonctionnelle, et `pre.009` prépare la candidate finale avec documentation, smoke Transport read-only étendu et prompt `0.2.4`. Aucun `base64`, `bs58`, `wincode` ni client RPC Solana supplémentaire n'est ajouté : les payloads sérialisés restent opaques dans Transport tant qu'un besoin de décodage local n'est pas démontré. Le plan détaillé candidat est `docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`. ## `0.2.5` — Wallet foundation diff --git a/docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md b/docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md index beccf59..64e6c49 100644 --- a/docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md +++ b/docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md @@ -1,11 +1,11 @@ - + # Plan `0.2.3` — HTTP Transactions ## Statut -Ce plan est ouvert par `0.2.3-pre.001` sur la base stable `v0.2.2`. +Ce plan est ouvert par `0.2.3-pre.001` sur la base stable `v0.2.2`. `pre.009` amène la release au statut **candidate de clôture** ; la publication stable reste réservée à `0.2.3-rel.001`. `0.2.1` a stabilisé la foundation HTTP Solana et quatre wrappers typés canari. `0.2.2` a ajouté les 22 wrappers Accounts/Tokens/Cluster, les DTOs wire communs, le smoke Devnet Transport pur et les canaries exactes de complétude. @@ -639,6 +639,21 @@ Verdict : **aucune possibilité RPC supportée n'est manquante dans les 37 wrapp Aucune remédiation fonctionnelle artificielle n'est donc introduite en `pre.008`. La tranche ajoute une preuve durable et une canarie nommée couvrant exactement les 37 descriptors courants de `0.2.1` à `0.2.3`, tout en préservant la forme legacy dépréciée de `getTransaction`. La clôture reste déplacée à `pre.009`. +## Résultat de `pre.009` — candidate de clôture + +Le réaudit final du 18 août 2026 confirme que l'index HTTP Solana courant contient toujours **52 méthodes** et que la navigation Deprecated conserve les **14 méthodes historiques** déjà enregistrées. La partition KSP reste donc inchangée : 4 foundation + 22 Accounts/Tokens/Cluster + 11 Transactions déjà typées, puis 15 Blocks/Economics réservées à `0.2.4`. + +La candidate `pre.009` ne modifie aucun wrapper fonctionnel. Elle : + +- synchronise README/USAGE, inventaire composant, séquence fonctionnelle et index documentaires avec la surface réelle de 37 wrappers typés ; +- conserve la matrice `KSP-TRANSPORT-007` corrigée par l'opérateur comme preuve rétroactive durable ; +- ajoute `docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md` comme matrice de clôture de la release ; +- étend le smoke Transport pur avec trois reads Transactions sans effet de bord : `getLatestBlockhash`, `isBlockhashValid` et `getTransactionCount` ; +- prépare `prompts/009-V0_2_4_START_PROMPT.md` pour les 10 Blocks + 5 Economics restants ; +- maintient `CHANGELOG.md` inchangé jusqu'à `rel.001`. + +La publication stable reste strictement publicationnelle : version Cargo finale, ROADMAP `[X]`, CHANGELOG, clôture des preuves opérateur et tag stable après validation. + ## Critères de clôture de `0.2.3` La release ne peut être candidate stable que si : diff --git a/docs/validation/000-README.md b/docs/validation/000-README.md index e20b327..3971d7b 100644 --- a/docs/validation/000-README.md +++ b/docs/validation/000-README.md @@ -1,5 +1,5 @@ - + # Validations KSP @@ -14,3 +14,5 @@ Documents : - [`003-V0_2_1_ONCHAIN_HTTP.md`](003-V0_2_1_ONCHAIN_HTTP.md) — matrice de clôture de `0.2.1 — HTTP Solana foundation`, registry 52+14, résilience, Config -> Transport, quatre canaris et smoke Devnet opt-in. - [`004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md`](004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md) — matrice finale validée de `0.2.2`, 22 wrappers Accounts/Tokens/Cluster, canaries 52+14, graphes Cargo, smoke Devnet Transport pur, smoke historique Config -> Transport et préparation de `0.2.3`. - [`005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md`](005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md) — réaudit rétroactif de complétude `KSP-TRANSPORT-007` des 37 wrappers HTTP typés livrés de `0.2.1` à `0.2.3-pre.007`, avec preuves Solana/Agave et verdict méthode par méthode. + +- [`006-V0_2_3_HTTP_TRANSACTIONS.md`](006-V0_2_3_HTTP_TRANSACTIONS.md) — matrice de clôture candidate `0.2.3`, 11 wrappers Transactions, sécurité write/simulation, réaudit final 52+14, smoke Transport read-only étendu et validations de publication à exécuter avant `rel.001`. diff --git a/docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md b/docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md new file mode 100644 index 0000000..c15df98 --- /dev/null +++ b/docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md @@ -0,0 +1,211 @@ + + + +# Validation candidate `0.2.3` — HTTP Transactions + +## Objet + +Cette matrice porte la clôture candidate de `0.2.3 — HTTP Transactions`. + +Elle complète le réaudit transversal [`005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md`](005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md), qui vérifie la complétude de requête/réponse des 37 wrappers HTTP typés courants. + +La publication stable reste réservée à `0.2.3-rel.001`. + +## Réaudit final de l'inventaire + +Dernier contrôle effectué le **18 août 2026** contre : + +```text +https://solana.com/docs/rpc/http +https://solana.com/docs/rpc/deprecated/confirmtransaction +https://solana.com/docs/rpc/json-structures +``` + +L'inventaire reste : + +```text +52 méthodes HTTP courantes +14 méthodes historiques Deprecated +``` + +Partition KSP candidate : + +```text +0.2.1 foundation 4 +0.2.2 Accounts/Tokens/Cluster 22 +0.2.3 Transactions 11 +surface typée candidate 37 +0.2.4 Blocks/Economics restant 15 +``` + +Aucun recalibrage de `HttpRpcCoverageRelease` n'est nécessaire. + +## Surface Transactions candidate + +| Méthode | Classe KSP | Contrat de clôture principal | +|-------------------------------|--------------------------------------|-------------------------------------------------------------------------------------------------| +| `getFeeForMessage` | Read / RetrySafe | message base64 opaque, contexte, fee nullable | +| `getLatestBlockhash` | Read / RetrySafe | contexte, blockhash non vide, lastValidBlockHeight | +| `getRecentPrioritizationFees` | Read / RetrySafe | comptes optionnels <= 128, ordre serveur | +| `getSignaturesForAddress` | Read / RetrySafe | pagination before/until/1..=1000, newest-first, transactionIndex optionnel | +| `getSignatureStatuses` | Read / RetrySafe | <= 256, liste vide runtime, null positionnels, searchTransactionHistory | +| `getTransaction` | Read / RetrySafe | config moderne complète + bare encoding deprecated, encodings/version/meta/index lossless | +| `getTransactionCount` | Read / RetrySafe | contexte + u64 | +| `isBlockhashValid` | Read / RetrySafe | blockhash opaque + contexte + bool | +| `requestAirdrop` | WriteSubmission / NeverAfterDispatch | commitment + recentBlockhash runtime, signature, aucune resoumission après dispatch ambigu | +| `sendTransaction` | WriteSubmission / NeverAfterDispatch | base58/base64 + toutes options, maxRetries node-side, aucune resoumission après dispatch ambigu | +| `simulateTransaction` | Simulation / RetrySafe | config complète, invariants locaux, résultat riche lossless | + +Classification exacte : + +```text +8 Read / RetrySafe +2 WriteSubmission / NeverAfterDispatch +1 Simulation / RetrySafe +``` + +## Complétude `KSP-TRANSPORT-007` + +Le réaudit `pre.008` conclut **37/37 conformes sans remédiation fonctionnelle**. + +Points particulièrement sensibles conservés : + +- encodings Account/Transaction legacy encore supportés ; +- `getLeaderSchedule` et `getTransaction` avec leurs formes de requête distinctes ; +- `transactionIndex` courant ; +- `requestAirdrop.recentBlockhash` runtime ; +- `sendTransaction.maxRetries` distinct du retry HTTP KSP ; +- `simulateTransaction.accounts` avec encodings de retour supportés et rejet local de `binary/base58` ; +- résultats wire riches conservés sans introduire de dépendance SDK/RPC haut niveau. + +## Résilience et no-resend + +Les deux writes utilisent le descriptor central `WriteSubmission / NeverAfterDispatch`. + +Les fixtures end-to-end déjà livrées prouvent : + +```text +HTTP 429 après dispatch -> une seule requête +HTTP 503 après dispatch -> une seule requête +timeout après dispatch -> une seule requête +NotDispatched prouvé -> retry/fallback central autorisé +``` + +`simulateTransaction` reste retry-safe et possède un scénario déterministe HTTP 503 -> succès. + +## Canaries déterministes + +La candidate conserve : + +```text +current registry == 52 +historical registry == 14 +V0_2_1 exact == 4 +V0_2_2 exact == 22 +V0_2_3 exact == 11 +V0_2_4 restant == 15 +KSP-TRANSPORT-007 == 37 wrappers courants audités +``` + +À la base validée `pre.008`, l'opérateur a confirmé : + +```text +182 tests unitaires Transport passed +19 tests public API passed +14 tests release completeness passed +1 smoke Transport live ignored par défaut +0 failure +0 warning clippy signalé +``` + +## Smoke Devnet Transport pur + +`pre.009` étend le smoke Transport existant sans créer de nouvelle ownership boundary. + +La séquence reste read-only : + +```text +settings programmatiques + -> getAccountInfo + -> getTokenAccountsByOwner + -> getEpochInfo + -> getVoteAccounts + -> getLatestBlockhash + -> isBlockhashValid + -> getTransactionCount +``` + +La branche Transaction ne déclenche ni `requestAirdrop`, ni `sendTransaction`, ni simulation nécessitant une transaction sérialisée. Les fixtures locales restent la preuve déterministe complète des 11 wrappers. + +Commande opt-in : + +```bash +cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture +``` + +Le smoke historique Config -> Transport reste séparé et transitoire : + +```bash +cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture +``` + +## Frontières et dépendances attendues + +À clôture : + +```text +ksp-config-lib -> ksp-onchain-transport-lib +ksp-onchain-transport-lib -> ksp-core-lib +ksp-onchain-transport-lib -> ksp-logging-lib +ksp-onchain-transport-lib -X-> ksp-config-lib +ksp-onchain-transport-lib -X-> Store +ksp-onchain-transport-lib -X-> Program +ksp-onchain-transport-lib -X-> tracing direct +``` + +Aucune nouvelle dépendance `base64`, `bs58`, `wincode`, `solana-client` ou client RPC haut niveau n'est introduite par `0.2.3`. + +## Validations de candidate à exécuter + +La clôture opérateur de `pre.009` doit exécuter : + +```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 +``` + +Aucune de ces commandes n'est considérée réussie avant preuve opérateur. + +## Passage à `rel.001` + +Si la candidate est propre, `0.2.3-rel.001` doit rester strictement publicationnelle : + +```text +workspace.package.version -> 0.2.3 +ROADMAP : 0.2.3 -> [X] +CHANGELOG : synthèse stable 0.2.3 +plan 010 / validation 006 : clôture avec preuves opérateur +deltas/0.2.3/rel.001.md +commit v0.2.3-rel.001 +tag stable v0.2.3 après validation +``` + +Aucune nouvelle méthode HTTP, aucun nouveau DTO et aucun nouveau comportement runtime ne doivent être introduits pendant `rel.001`. diff --git a/prompts/000-README.md b/prompts/000-README.md index 38abbfd..1a539e1 100644 --- a/prompts/000-README.md +++ b/prompts/000-README.md @@ -1,5 +1,5 @@ - + # Prompts KSP @@ -29,3 +29,4 @@ Le prompt générique `0.1.x` a été affiné pendant `0.0.3` puis remplacé par - [`006-V0_2_1_START_PROMPT.md`](006-V0_2_1_START_PROMPT.md) — prompt finalisé par `0.2.0-pre.003`, destiné à ouvrir `0.2.1 — ksp-onchain-transport-lib / HTTP Solana foundation` après publication stable de `0.2.0`; il impose l'audit exhaustif des surfaces HTTP courantes et deprecated/unstable officiellement documentées, la séparation Config/Transport, les pools/rôles et le gate de sizing « une release = une session » ; - [`007-V0_2_2_START_PROMPT.md`](007-V0_2_2_START_PROMPT.md) — prompt préparé par la dernière prerelease de `0.2.1`, destiné à ouvrir `0.2.2 — HTTP Accounts + Tokens + Cluster` après publication stable de `0.2.1`; il cible les 22 wrappers typés restants de ces familles et impose un nouvel audit officiel/gate de sizing à `pre.001`. - [`008-V0_2_3_START_PROMPT.md`](008-V0_2_3_START_PROMPT.md) — prompt préparé par la dernière prerelease de `0.2.2`, destiné à ouvrir `0.2.3 — HTTP Transactions` après publication stable de `0.2.2`; il cible les 11 méthodes Transactions et impose un audit actuel ainsi que la politique no-resend des write submissions. +- [`009-V0_2_4_START_PROMPT.md`](009-V0_2_4_START_PROMPT.md) — prompt préparé par `0.2.3-pre.009`, destiné à ouvrir `0.2.4 — HTTP Blocks + Economics + compliance HTTP finale` après publication stable de `0.2.3`; il cible les 15 wrappers restants et impose `KSP-TRANSPORT-007` ainsi qu'un nouvel audit/sizing à `pre.001`. diff --git a/prompts/009-V0_2_4_START_PROMPT.md b/prompts/009-V0_2_4_START_PROMPT.md new file mode 100644 index 0000000..43f48dc --- /dev/null +++ b/prompts/009-V0_2_4_START_PROMPT.md @@ -0,0 +1,381 @@ + + + +# 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.