8.1 KiB
Validation finale 0.2.2 — HTTP Accounts + Tokens + Cluster
Statut
Cette matrice accompagne la candidate 0.2.2-pre.007. Elle ne publie pas encore la release stable : les preuves opérateur finales doivent être enregistrées avant 0.2.2-rel.001.
Base fonctionnelle validée avant pre.007 :
v0.2.2-pre.006-fix.001
L'opérateur a validé cette base le 2026-08-18 avec :
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-onchain-transport-lib
Résultats Transport communiqués :
127 unit tests passed
13 public API tests passed
6 release completeness passed
0 warning clippy signalé
Réaudit officiel final
Le 2026-08-18, l'index officiel courant a été revérifié :
https://solana.com/docs/rpc/http
https://solana.com/docs/rpc/deprecated/confirmtransaction
La matrice reste :
52 méthodes HTTP courantes
14 méthodes historiques Deprecated
Répartition courante utile à cette release :
Accounts : 6 = getBalance acquis en 0.2.1 + 5 en 0.2.2
Tokens : 5 = 5 en 0.2.2
Cluster : 15 = getGenesisHash/getHealth/getVersion acquis en 0.2.1 + 12 en 0.2.2
Aucune méthode 0.2.2 n'est reclassée Deprecated/Unstable. Les 22 descriptors restent Stable / Supported / Read / RetrySafe.
Surface typée candidate
0.2.2 ajoute exactement :
Accounts : 5
Tokens : 5
Cluster : 12
Total : 22
Avec les quatre canaris de 0.2.1, Transport expose donc 26 wrappers typed à la candidate.
Les partitions futures restent intactes :
0.2.3 Transactions : 11
0.2.4 Blocks + Economics : 15
L'API raw execute_standard_rpc() reste disponible mais ne compte pas comme couverture typed d'une méthode future.
Contrats wire à préserver
La candidate doit conserver notamment :
Account.datalegacy / encoded /jsonParsedsans décodage Program ;Account.space: Option<u64>;- comptes absents sous
null; getProgramAccountsbare vs contextualisé ;TokenAmount.amountetuiAmountStringcomme chaînes exactes ;TokenAmount.uiAmount: Option<f64>;- selector Token exclusif
Mint | ProgramId; ClusterNode.clientId: Option<String>;EpochInfo.transactionCount: Option<u64>;SnapshotSlotInfo.incremental: Option<u64>;getLeaderSchedule -> Option<schedule>;VoteAccountInfo.inflationRewardsCommissionBps: Option<u16>;- triplets
epochCreditssans interprétation métier.
Limites locales figées :
getMultipleAccounts <= 100
getProgramAccounts <= 4 filtres
memcmp raw <= 128 octets
getSlotLeaders 1..=5000
Canaries de complétude
tests/release_completeness.rs protège :
current == 52
historical == 14
partition == 4 / 22 / 11 / 15
0.2.1 exact == 4 canaris foundation
0.2.2 exact == 22 Accounts/Tokens/Cluster
0.2.3 count == 11 sans avancement typed prématuré
0.2.4 count == 15 sans avancement typed prématuré
historical => Deprecated + Removed + Historical + NotApplicable
Après pre.007, la suite attendue est :
127 unit tests
13 public API tests
7 release completeness tests
1 smoke Transport live ignored par défaut
Smoke Devnet Transport pur
Nouveau test :
crates/ksp-onchain-transport-lib/tests/transport_devnet_smoke.rs
Il construit HttpTransportSettings programmatiquement, sans Config ni environnement :
https://api.devnet.solana.com
-> getAccountInfo(System Program)
-> getTokenAccountsByOwner(owner ordinaire documenté, selector programId = SPL Token, finalized/jsonParsed)
-> getEpochInfo
-> getVoteAccounts
Exécution explicite :
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 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.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
Le smoke historique 0.2.1 reste disponible :
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
Il valide Config -> profil devnet_public -> Transport -> quatre canaris foundation.
Ownership : ce smoke cross-crates est transitoire. ksp-config-lib ne doit pas devenir la destination générale des smokes Config + autre crate; il migrera vers une future surface d'intégration/orchestration/demo appropriée.
Dépendances, sécurité et logging
La candidate ne doit introduire :
aucune dépendance externe nouvelle
aucune dépendance Transport -> Config/Store/Program
aucun tracing direct hors ksp-logging-lib
aucun client HTTP parallèle
Les invariants de sécurité 0.2.1 restent obligatoires : URL/provider credentials absents des diagnostics ordinaires, reqwest::Error::without_url() avant exposition comme source, aucune réponse/body massif journalisé par défaut.
La baseline Logging Transport reste info avant publication stable.
Documentation candidate
Doivent être synchronisés :
crates/ksp-onchain-transport-lib/README.md
crates/ksp-onchain-transport-lib/USAGE.md
docs/architecture/004-COMPONENT_INVENTORY.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md
ROADMAP.md
prompts/008-V0_2_3_START_PROMPT.md
CHANGELOG.md reste volontairement inchangé avant rel.001.
Validations finales opérateur à exécuter sur pre.007
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
Puis les deux smokes opt-in :
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
Les résultats doivent être reportés dans rel.001; cette matrice ne les anticipe pas.
Passage à rel.001
Si toutes les validations passent, rel.001 doit rester strictement publicationnel :
workspace.package.version -> 0.2.2
ROADMAP : 0.2.2 -> [X]
CHANGELOG : synthèse stable 0.2.2
plan 009 / validation 004 : statut clôturé + preuves opérateur
deltas/0.2.2/rel.001.md
commit v0.2.2-rel.001
tag stable v0.2.2 après validation du commit
Aucune nouvelle méthode HTTP, aucun nouveau DTO et aucun nouveau comportement runtime ne doivent apparaître dans rel.001.