v0.2.3-pre.009
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: ROADMAP.md -->
|
||||
<!-- version: 38 -->
|
||||
<!-- version: 39 -->
|
||||
|
||||
# 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.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: crates/ksp-onchain-transport-lib/README.md -->
|
||||
<!-- version: 5 -->
|
||||
<!-- version: 6 -->
|
||||
|
||||
# `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.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.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: crates/ksp-onchain-transport-lib/USAGE.md -->
|
||||
<!-- version: 5 -->
|
||||
<!-- version: 6 -->
|
||||
|
||||
# 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 :
|
||||
|
||||
|
||||
@@ -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<ksp_onchain_transport_lib::HttpTransportPool> {
|
||||
let role = ksp_onchain_transport_lib::HttpRoleName::new("default");
|
||||
@@ -42,7 +42,7 @@ fn devnet_pool() -> ksp_core_lib::Result<ksp_onchain_transport_lib::HttpTranspor
|
||||
|
||||
#[tokio::test(flavor = "current_thread")]
|
||||
#[ignore = "opt-in live Solana Devnet smoke; performs external network requests"]
|
||||
async fn programmatic_devnet_transport_reaches_accounts_tokens_and_cluster_wrappers() {
|
||||
async fn programmatic_devnet_transport_reaches_accounts_tokens_cluster_and_transaction_read_wrappers() {
|
||||
let pool = devnet_pool().expect("programmatic Devnet Transport settings must construct a pool");
|
||||
let role = ksp_onchain_transport_lib::HttpRoleName::new("default");
|
||||
|
||||
@@ -94,4 +94,27 @@ async fn programmatic_devnet_transport_reaches_accounts_tokens_and_cluster_wrapp
|
||||
|
||||
let vote_accounts = pool.get_vote_accounts(&role, std::option::Option::None).await.expect("Devnet getVoteAccounts smoke must succeed");
|
||||
assert!(!vote_accounts.current().is_empty() || !vote_accounts.delinquent().is_empty());
|
||||
|
||||
let transaction_context = ksp_onchain_transport_lib::SolanaContextConfig::new(
|
||||
std::option::Option::Some(ksp_onchain_transport_lib::SolanaCommitment::Finalized),
|
||||
std::option::Option::None,
|
||||
);
|
||||
let latest_blockhash = pool
|
||||
.get_latest_blockhash(&role, std::option::Option::Some(&transaction_context))
|
||||
.await
|
||||
.expect("Devnet getLatestBlockhash smoke must succeed");
|
||||
assert!(!latest_blockhash.value().blockhash().is_empty());
|
||||
assert!(latest_blockhash.value().last_valid_block_height() > 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);
|
||||
}
|
||||
|
||||
293
deltas/0.2.3/pre.009.md
Normal file
293
deltas/0.2.3/pre.009.md
Normal file
@@ -0,0 +1,293 @@
|
||||
<!-- file: deltas/0.2.3/pre.009.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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
|
||||
```
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/000-README.md -->
|
||||
<!-- version: 28 -->
|
||||
<!-- version: 29 -->
|
||||
|
||||
# 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.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/architecture/004-COMPONENT_INVENTORY.md -->
|
||||
<!-- version: 10 -->
|
||||
<!-- version: 11 -->
|
||||
|
||||
# Inventaire initial des composants KSP
|
||||
|
||||
@@ -18,12 +18,12 @@ 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 |
|
||||
| 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 |
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/000-README.md -->
|
||||
<!-- version: 35 -->
|
||||
<!-- version: 36 -->
|
||||
|
||||
# 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.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md -->
|
||||
<!-- version: 37 -->
|
||||
<!-- version: 38 -->
|
||||
|
||||
# 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
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<!-- file: docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md -->
|
||||
<!-- version: 7 -->
|
||||
<!-- version: 8 -->
|
||||
|
||||
# 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 :
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/000-README.md -->
|
||||
<!-- version: 7 -->
|
||||
<!-- version: 8 -->
|
||||
|
||||
# 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`.
|
||||
|
||||
211
docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md
Normal file
211
docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md
Normal file
@@ -0,0 +1,211 @@
|
||||
<!-- file: docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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`.
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: prompts/000-README.md -->
|
||||
<!-- version: 12 -->
|
||||
<!-- version: 13 -->
|
||||
|
||||
# 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`.
|
||||
|
||||
381
prompts/009-V0_2_4_START_PROMPT.md
Normal file
381
prompts/009-V0_2_4_START_PROMPT.md
Normal file
@@ -0,0 +1,381 @@
|
||||
<!-- file: prompts/009-V0_2_4_START_PROMPT.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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<T>` ;
|
||||
- Account encodings/types ;
|
||||
- Transaction encodings/version/meta et `SolanaWireField<T>`.
|
||||
|
||||
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.
|
||||
Reference in New Issue
Block a user