Files
khadhroony-solana-project/docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md
2026-08-18 17:42:12 +02:00

253 lines
9.2 KiB
Markdown

<!-- file: docs/validation/006-V0_2_3_HTTP_TRANSACTIONS.md -->
<!-- version: 2 -->
# Validation finale `0.2.3` — HTTP Transactions
## Objet
Cette matrice enregistre la clôture validée et la publication stable 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 est réalisée par `0.2.3-rel.001` après validation opérateur complète de `pre.009`.
## 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 stable :
```text
0.2.1 foundation 4
0.2.2 Accounts/Tokens/Cluster 22
0.2.3 Transactions 11
surface typée stable 37
0.2.4 Blocks/Economics restant 15
```
Aucun recalibrage de `HttpRpcCoverageRelease` n'est nécessaire.
## Surface Transactions stable
| 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 release stable 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`.
## Preuves opérateur finales
La candidate `0.2.3-pre.009` a été validée le **18 août 2026** avec succès :
```text
cargo fmt --all OK
cargo check --workspace OK
cargo clippy --workspace --all-targets OK, sans warning signalé
Transport
182 unit passed
19 public API passed
14 release completeness passed
1 smoke live ignored par défaut
Config
95 unit passed
5 ownership passed
13 public API passed
1 smoke live ignored par défaut
Core
14 unit passed
3 public API passed
2 workspace dependencies passed
1 workspace logging passed
Config Desk
63 unit passed
2 desktop contract passed
2 desktop security passed
1 public API passed
cargo test --workspace OK
```
Le probe diagnostic d'overhead Logging reste volontairement `ignored`; il ne constitue pas un échec.
Les graphes suivants ont été inspectés pour Transport et Config :
```text
cargo tree
cargo tree -d
cargo tree -e features
cargo tree -e normal
```
Ils confirment la frontière attendue `ksp-config-lib -> ksp-onchain-transport-lib`, sans dépendance inverse Transport -> Config/Store/Program et sans import direct `tracing` dans Transport. Les doublons notables restent transitifs/proc-macro, notamment `syn` 2.x/3.x.
Les deux smokes live ont ensuite été exécutés explicitement et passent :
```text
Transport pur read-only
programmatic_devnet_transport_reaches_accounts_tokens_cluster_and_transaction_read_wrappers
-> 1 passed; 0 failed
Config -> Transport transitoire
committed_devnet_transport_profile_reaches_all_foundation_canaries
-> 1 passed; 0 failed
```
## Publication `rel.001`
`0.2.3-rel.001` reste strictement publicationnelle :
```text
workspace.package.version = 0.2.3
ROADMAP : 0.2.3 -> [X]
CHANGELOG : synthèse stable 0.2.3
commit attendu : v0.2.3-rel.001
tag stable après validation : v0.2.3
```
Aucune nouvelle méthode HTTP, aucun nouveau DTO, aucune dépendance, aucune feature et aucun nouveau comportement runtime ne sont introduits pendant `rel.001`.
Après application du delta publicationnel, la gate finale est :
```bash
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test --workspace
```
Après succès, créer le commit `v0.2.3-rel.001`, puis le tag stable `v0.2.3`. La prochaine session s'ouvre avec `prompts/009-V0_2_4_START_PROMPT.md`.