v0.2.3-pre.009
This commit is contained in:
@@ -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`.
|
||||
Reference in New Issue
Block a user