v0.2.2-pre.007-fix.002
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 117
|
# version: 118
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
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"]
|
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]
|
[workspace.package]
|
||||||
version = "0.2.2-pre.7.fix.1"
|
version = "0.2.2-pre.7.fix.2"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: crates/ksp-onchain-transport-lib/README.md -->
|
<!-- file: crates/ksp-onchain-transport-lib/README.md -->
|
||||||
<!-- version: 3 -->
|
<!-- version: 4 -->
|
||||||
|
|
||||||
# `ksp-onchain-transport-lib`
|
# `ksp-onchain-transport-lib`
|
||||||
|
|
||||||
@@ -128,6 +128,8 @@ Composition historique : Config -> std.transport/devnet_public -> HttpTransportP
|
|||||||
-> getHealth/getGenesisHash/getVersion/getBalance
|
-> getHealth/getGenesisHash/getVersion/getBalance
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Le smoke Transport utilise pour sa branche Token la forme Devnet documentée `getTokenAccountsByOwner(owner, { programId }, { commitment: finalized, encoding: jsonParsed })`. L'owner est une Pubkey ordinaire de l'exemple officiel ; aucune présence de token account n'est exigée, donc une liste vide reste valide.
|
||||||
|
|
||||||
Les deux sont `ignored` par défaut. Le smoke Transport appartient durablement à cette crate ; le smoke cross-crates hébergé dans Config reste transitoire jusqu'à l'existence d'une surface KSP d'intégration/orchestration appropriée.
|
Les deux sont `ignored` par défaut. Le smoke Transport appartient durablement à cette crate ; le smoke cross-crates hébergé dans Config reste transitoire jusqu'à l'existence d'une surface KSP d'intégration/orchestration appropriée.
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: crates/ksp-onchain-transport-lib/USAGE.md -->
|
<!-- file: crates/ksp-onchain-transport-lib/USAGE.md -->
|
||||||
<!-- version: 3 -->
|
<!-- version: 4 -->
|
||||||
|
|
||||||
# Utilisation de `ksp-onchain-transport-lib`
|
# Utilisation de `ksp-onchain-transport-lib`
|
||||||
|
|
||||||
@@ -161,7 +161,7 @@ Le smoke **Transport pur** construit ses settings programmatiquement et exerce u
|
|||||||
cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture
|
cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture
|
||||||
```
|
```
|
||||||
|
|
||||||
Il appelle `getAccountInfo`, `getTokenAccountsByOwner`, `getEpochInfo` et `getVoteAccounts`. La branche Token utilise le selector `programId` avec l'ID canonique du programme SPL Token et `System Program` comme owner valide ; 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` 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.
|
||||||
|
|
||||||
Le smoke historique de **composition Config -> Transport** reste également disponible :
|
Le smoke historique de **composition Config -> Transport** reste également disponible :
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs
|
// file: crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs
|
||||||
// version: 2
|
// version: 3
|
||||||
|
|
||||||
//! Opt-in live Devnet smoke for the pure Transport Accounts/Tokens/Cluster path.
|
//! Opt-in live Devnet smoke for the pure Transport Accounts/Tokens/Cluster path.
|
||||||
|
|
||||||
@@ -59,16 +59,25 @@ async fn programmatic_devnet_transport_reaches_accounts_tokens_and_cluster_wrapp
|
|||||||
assert!(account.context().slot() > 0);
|
assert!(account.context().slot() > 0);
|
||||||
assert!(account.value().is_some());
|
assert!(account.value().is_some());
|
||||||
|
|
||||||
// Use the stable SPL Token program selector with a valid owner that need not own any token account.
|
// Follow the current official Devnet example shape with an ordinary owner, the canonical SPL Token program selector,
|
||||||
// The smoke therefore validates the Token RPC path without depending on one mutable Devnet mint/account fixture.
|
// and an explicit finalized/jsonParsed config. The owner need not retain any token account; an empty list remains valid.
|
||||||
|
let token_owner = "A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd"
|
||||||
|
.parse::<ksp_core_lib::Pubkey>()
|
||||||
|
.expect("official Devnet token-owner example must remain a valid Pubkey literal");
|
||||||
let token_program = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
|
let token_program = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
|
||||||
.parse::<ksp_core_lib::Pubkey>()
|
.parse::<ksp_core_lib::Pubkey>()
|
||||||
.expect("canonical SPL Token program id must remain a valid Pubkey literal");
|
.expect("canonical SPL Token program id must remain a valid Pubkey literal");
|
||||||
let token_selector = ksp_onchain_transport_lib::SolanaTokenAccountSelector::ProgramId(token_program);
|
let token_selector = ksp_onchain_transport_lib::SolanaTokenAccountSelector::ProgramId(token_program);
|
||||||
|
let token_config = ksp_onchain_transport_lib::SolanaAccountInfoConfig::new(
|
||||||
|
std::option::Option::Some(ksp_onchain_transport_lib::SolanaAccountEncoding::JsonParsed),
|
||||||
|
std::option::Option::None,
|
||||||
|
std::option::Option::Some(ksp_onchain_transport_lib::SolanaCommitment::Finalized),
|
||||||
|
std::option::Option::None,
|
||||||
|
);
|
||||||
let token_accounts = pool
|
let token_accounts = pool
|
||||||
.get_token_accounts_by_owner(&role, &ksp_core_lib::PRGIDPK_SOLANA_SYSTEM, &token_selector, std::option::Option::None)
|
.get_token_accounts_by_owner(&role, &token_owner, &token_selector, std::option::Option::Some(&token_config))
|
||||||
.await
|
.await
|
||||||
.expect("Devnet getTokenAccountsByOwner smoke must succeed with the canonical SPL Token program selector");
|
.expect("Devnet getTokenAccountsByOwner smoke must succeed with the documented finalized/jsonParsed request shape");
|
||||||
assert!(token_accounts.context().slot() > 0);
|
assert!(token_accounts.context().slot() > 0);
|
||||||
|
|
||||||
let epoch = pool
|
let epoch = pool
|
||||||
|
|||||||
88
deltas/0.2.2/pre.007-fix.002.md
Normal file
88
deltas/0.2.2/pre.007-fix.002.md
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
<!-- file: deltas/0.2.2/pre.007-fix.002.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# Delta `0.2.2-pre.007-fix.002`
|
||||||
|
|
||||||
|
## Base requise
|
||||||
|
|
||||||
|
- `0.2.2-pre.007-fix.001` appliqué et commité ;
|
||||||
|
- `workspace.package.version = "0.2.2-pre.7.fix.1"` avant application de ce delta.
|
||||||
|
|
||||||
|
## Objectif
|
||||||
|
|
||||||
|
Corriger le deuxième échec opérateur du smoke Devnet Transport introduit en `pre.007`, sans modifier les wrappers HTTP typés ni la surface publique `0.2.2`.
|
||||||
|
|
||||||
|
La passe `pre.007-fix.001` a validé `cargo fmt --all`, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, les tests Transport et `cargo test --workspace`. Le smoke historique `Config -> Transport` a également réussi. En revanche, le smoke Transport pur a reçu RPC `-32600` sur `getTokenAccountsByOwner` lorsqu'il utilisait `System Program` comme owner, le selector `{ programId: SPL Token }` et omettait le troisième paramètre de config.
|
||||||
|
|
||||||
|
## Décision
|
||||||
|
|
||||||
|
Le wrapper conserve son contrat existant : la config Account reste optionnelle, conformément à la surface RPC auditée et aux tests déterministes.
|
||||||
|
|
||||||
|
Le scénario live adopte la forme la plus conservatrice de l'exemple RPC public Devnet :
|
||||||
|
|
||||||
|
- owner Pubkey ordinaire de l'exemple officiel ;
|
||||||
|
- selector `{ programId: SPL Token }` ;
|
||||||
|
- config explicite `{ commitment: "finalized", encoding: "jsonParsed" }`.
|
||||||
|
|
||||||
|
Le smoke ne dépend toujours pas de l'existence d'un token account particulier : une liste vide reste un succès valide.
|
||||||
|
|
||||||
|
## Fichiers modifiés
|
||||||
|
|
||||||
|
- `Cargo.toml`
|
||||||
|
- version de fichier `117 -> 118` ;
|
||||||
|
- `workspace.package.version`: `0.2.2-pre.7.fix.1 -> 0.2.2-pre.7.fix.2`.
|
||||||
|
- `crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs`
|
||||||
|
- version `2 -> 3` ;
|
||||||
|
- remplace le scénario Token `System Program + selector seul` par la forme documentée `owner ordinaire + selector + finalized/jsonParsed`.
|
||||||
|
- `crates/ksp-onchain-transport-lib/README.md`
|
||||||
|
- version `3 -> 4` ;
|
||||||
|
- précise la forme du smoke Token.
|
||||||
|
- `crates/ksp-onchain-transport-lib/USAGE.md`
|
||||||
|
- version `3 -> 4` ;
|
||||||
|
- synchronise la commande et la sémantique du smoke Token.
|
||||||
|
- `docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md`
|
||||||
|
- version `5 -> 6` ;
|
||||||
|
- consigne l'échec live `-32600` et la correction du scénario.
|
||||||
|
- `docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md`
|
||||||
|
- version `2 -> 3` ;
|
||||||
|
- synchronise la matrice de validation avec le scénario corrigé.
|
||||||
|
|
||||||
|
## Fichier ajouté
|
||||||
|
|
||||||
|
- `deltas/0.2.2/pre.007-fix.002.md`.
|
||||||
|
|
||||||
|
## Fichiers supprimés
|
||||||
|
|
||||||
|
Aucun.
|
||||||
|
|
||||||
|
## Validations observées avant ce fix
|
||||||
|
|
||||||
|
Réussies sur le checkout opérateur `0.2.2-pre.7.fix.1` :
|
||||||
|
|
||||||
|
- `cargo fmt --all` ;
|
||||||
|
- `cargo check --workspace` ;
|
||||||
|
- `cargo clippy --workspace --all-targets` ;
|
||||||
|
- `cargo test -p ksp-onchain-transport-lib` : `127 + 13 + 7`, smoke live ignoré par défaut ;
|
||||||
|
- `cargo test --workspace` : succès ;
|
||||||
|
- `cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture` : succès.
|
||||||
|
|
||||||
|
Échec observé :
|
||||||
|
|
||||||
|
- `cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture` ;
|
||||||
|
- `getTokenAccountsByOwner` a reçu `onchain_transport.rpc_application_error`, `rpc_code = -32600`.
|
||||||
|
|
||||||
|
## Validations à exécuter après application
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo fmt --all
|
||||||
|
cargo check --workspace
|
||||||
|
cargo clippy --workspace --all-targets
|
||||||
|
cargo test -p ksp-onchain-transport-lib
|
||||||
|
cargo test --workspace
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
||||||
|
## Questions ouvertes
|
||||||
|
|
||||||
|
Aucune question d'architecture nouvelle. Si la forme RPC publique documentée échoue encore sur Devnet, le prochain diagnostic devra capturer/Comparer le wire live ou considérer explicitement une limitation du RPC public, plutôt que remplacer une troisième fois arbitrairement le scénario Token.
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md -->
|
<!-- file: docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md -->
|
||||||
<!-- version: 5 -->
|
<!-- version: 6 -->
|
||||||
|
|
||||||
# Plan `0.2.2` — HTTP Accounts + Tokens + Cluster
|
# Plan `0.2.2` — HTTP Accounts + Tokens + Cluster
|
||||||
|
|
||||||
@@ -478,10 +478,12 @@ future : 11 Transactions + 15 Blocks/Economics
|
|||||||
|
|
||||||
Le réaudit final du 2026-08-18 de `https://solana.com/docs/rpc/http` confirme toujours les 52 méthodes HTTP courantes et la même répartition des familles. La navigation Deprecated conserve les 14 méthodes historiques déjà enregistrées. Aucune méthode de `0.2.2` n'est déplacée ou reclassée.
|
Le réaudit final du 2026-08-18 de `https://solana.com/docs/rpc/http` confirme toujours les 52 méthodes HTTP courantes et la même répartition des familles. La navigation Deprecated conserve les 14 méthodes historiques déjà enregistrées. Aucune méthode de `0.2.2` n'est déplacée ou reclassée.
|
||||||
|
|
||||||
Un smoke Devnet opt-in **propre à Transport** est ajouté sous `crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs`. Il construit ses settings programmatiquement et exerce `getAccountInfo`, `getTokenAccountsByOwner`, `getEpochInfo` et `getVoteAccounts`. La branche Token utilise le programme SPL Token canonique comme selector `programId` et n'exige aucun mint/token account Devnet persistant. Le smoke historique `Config -> Transport` reste distinct et transitoirement hébergé dans Config. Les fixtures HTTP locales restent les preuves reproductibles par défaut.
|
Un smoke Devnet opt-in **propre à Transport** est ajouté sous `crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs`. Il construit ses settings programmatiquement et exerce `getAccountInfo`, `getTokenAccountsByOwner`, `getEpochInfo` et `getVoteAccounts`. La branche Token suit la forme Devnet documentée avec un owner Pubkey ordinaire, le programme SPL Token canonique comme selector `programId`, et une config explicite `finalized/jsonParsed`; elle n'exige aucun mint/token account Devnet persistant. Le smoke historique `Config -> Transport` reste distinct et transitoirement hébergé dans Config. Les fixtures HTTP locales restent les preuves reproductibles par défaut.
|
||||||
|
|
||||||
`pre.007-fix.001` corrige la première exécution opérateur de ce smoke : le mint repris de l'exemple officiel `getTokenSupply` a renvoyé RPC `-32602` sur Devnet, et deux `expect()` dans le helper de construction violaient le gate Clippy. Le nouveau chemin Token évite cette dépendance d'état externe et le helper retourne explicitement le `Result` de construction.
|
`pre.007-fix.001` corrige la première exécution opérateur de ce smoke : le mint repris de l'exemple officiel `getTokenSupply` a renvoyé RPC `-32602` sur Devnet, et deux `expect()` dans le helper de construction violaient le gate Clippy. Le nouveau chemin Token évite cette dépendance d'état externe et le helper retourne explicitement le `Result` de construction.
|
||||||
|
|
||||||
|
`pre.007-fix.002` corrige la deuxième exécution opérateur : le scénario `getTokenAccountsByOwner(System Program, { programId })` sans troisième paramètre a renvoyé RPC `-32600` sur le RPC public Devnet, alors que les validations déterministes et le smoke Config -> Transport restaient verts. Le smoke adopte donc la forme complète de l'exemple RPC public (`owner` ordinaire + `{ programId }` + config `finalized/jsonParsed`) sans modifier le contrat optionnel du wrapper.
|
||||||
|
|
||||||
La matrice durable de clôture est `docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md` et le prompt suivant est `prompts/008-V0_2_3_START_PROMPT.md`. `CHANGELOG.md` reste réservé à `rel.001`.
|
La matrice durable de clôture est `docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md` et le prompt suivant est `prompts/008-V0_2_3_START_PROMPT.md`. `CHANGELOG.md` reste réservé à `rel.001`.
|
||||||
|
|
||||||
## Hors périmètre
|
## Hors périmètre
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<!-- file: docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md -->
|
<!-- file: docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md -->
|
||||||
<!-- version: 2 -->
|
<!-- version: 3 -->
|
||||||
|
|
||||||
# Validation finale `0.2.2` — HTTP Accounts + Tokens + Cluster
|
# Validation finale `0.2.2` — HTTP Accounts + Tokens + Cluster
|
||||||
|
|
||||||
@@ -143,7 +143,7 @@ Il construit `HttpTransportSettings` programmatiquement, sans Config ni environn
|
|||||||
```text
|
```text
|
||||||
https://api.devnet.solana.com
|
https://api.devnet.solana.com
|
||||||
-> getAccountInfo(System Program)
|
-> getAccountInfo(System Program)
|
||||||
-> getTokenAccountsByOwner(System Program, selector programId = SPL Token)
|
-> getTokenAccountsByOwner(owner ordinaire documenté, selector programId = SPL Token, finalized/jsonParsed)
|
||||||
-> getEpochInfo
|
-> getEpochInfo
|
||||||
-> getVoteAccounts
|
-> getVoteAccounts
|
||||||
```
|
```
|
||||||
@@ -154,10 +154,12 @@ Exécution explicite :
|
|||||||
cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture
|
cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture
|
||||||
```
|
```
|
||||||
|
|
||||||
Le test est `ignored` par défaut. Sa branche Token ne dépend plus d'un mint d'exemple : elle accepte naturellement une liste vide et vérifie seulement qu'un appel Token structurellement valide atteint Devnet. Un incident réseau/rate-limit doit être analysé séparément ; le smoke ne remplace jamais les fixtures HTTP locales.
|
Le test est `ignored` par défaut. Sa branche Token ne dépend plus d'un mint d'exemple : elle utilise un owner Pubkey ordinaire de l'exemple RPC public, le selector `programId` canonique et une config explicite `finalized/jsonParsed`. Elle accepte naturellement une liste vide et vérifie seulement qu'un appel Token structurellement documenté atteint Devnet. Un incident réseau/rate-limit doit être analysé séparément ; le smoke ne remplace jamais les fixtures HTTP locales.
|
||||||
|
|
||||||
Correction `pre.007-fix.001` : lors de la première passe opérateur de `pre.007`, `getTokenSupply` sur le mint d'exemple de la documentation a échoué avec le code RPC `-32602`. Le smoke Config -> Transport, lui, a réussi. La branche Token est donc volontairement passée à `getTokenAccountsByOwner` avec selector `programId`, qui ne requiert aucun mint mutable pour prouver la traversée live du wrapper Token.
|
Correction `pre.007-fix.001` : lors de la première passe opérateur de `pre.007`, `getTokenSupply` sur le mint d'exemple de la documentation a échoué avec le code RPC `-32602`. Le smoke Config -> Transport, lui, a réussi. La branche Token est donc volontairement passée à `getTokenAccountsByOwner` avec selector `programId`, qui ne requiert aucun mint mutable pour prouver la traversée live du wrapper Token.
|
||||||
|
|
||||||
|
Correction `pre.007-fix.002` : lors de la passe suivante, `getTokenAccountsByOwner(System Program, { programId })` sans config explicite a échoué avec RPC `-32600`, tandis que `fmt`, `check`, `clippy`, les tests Transport, le workspace et le smoke Config -> Transport étaient verts. Le smoke Transport utilise désormais la forme complète documentée `owner ordinaire + { programId } + { commitment: finalized, encoding: jsonParsed }`. Ce changement reste limité au scénario live et ne redéfinit pas l'optionalité de la config dans le wrapper.
|
||||||
|
|
||||||
## Smoke de composition Config -> Transport
|
## Smoke de composition Config -> Transport
|
||||||
|
|
||||||
Le smoke historique `0.2.1` reste disponible :
|
Le smoke historique `0.2.1` reste disponible :
|
||||||
|
|||||||
Reference in New Issue
Block a user