Files
khadhroony-solana-project/docs/validation/003-V0_2_1_ONCHAIN_HTTP.md
2026-08-17 22:43:07 +02:00

195 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- file: docs/validation/003-V0_2_1_ONCHAIN_HTTP.md -->
<!-- version: 1 -->
# Validation `0.2.1` — HTTP Solana foundation
## Objet
Cette matrice synthétise les critères de clôture de `0.2.1 — ksp-onchain-transport-lib / HTTP Solana foundation`, les preuves acquises jusqu'à `pre.006-fix.002` et les validations finales attendues de `pre.007` avant publication `rel.001`.
Elle ne remplace ni `docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md` ni les deltas `0.2.1`.
## Base de clôture
```text
base validée : 0.2.1-pre.6.fix.2
candidate finale : 0.2.1-pre.7
```
La base `pre.006-fix.002` a été validée par l'opérateur le 2026-08-17 avec `cargo fmt --all`, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, les tests ciblés Transport/Config Desk/Config/Core et `cargo test --workspace`.
## Revérification officielle Solana
Revérification de clôture effectuée le 2026-08-17.
Index HTTP officiel :
```text
https://solana.com/docs/rpc/http
```
L'index courant expose toujours **52 méthodes HTTP** et confirme JSON-RPC 2.0 sur HTTP `POST` avec `Content-Type: application/json`.
La navigation officielle `Deprecated Methods`, visible depuis les pages deprecated telles que :
```text
https://solana.com/docs/rpc/deprecated/confirmtransaction
```
expose toujours les **14 noms historiques** audités :
```text
confirmTransaction
getConfirmedBlock
getConfirmedBlocks
getConfirmedBlocksWithLimit
getConfirmedSignaturesForAddress2
getConfirmedTransaction
getFeeCalculatorForBlockhash
getFeeRateGovernor
getFees
getRecentBlockhash
getSignatureConfirmation
getSignatureStatus
getSnapshotSlot
getStakeActivation
```
KSP les conserve comme `Deprecated / Removed / Historical`; `0.2.1` ne simule pas leur appelabilité runtime.
## Matrice de clôture
| Critère | État candidat `pre.007` | Preuve / contrat |
|------------------------------------------------------------|-------------------------|-----------------------------------------------------------------------|
| Crate `ksp-onchain-transport-lib` présente et indépendante | OK | manifest + canary Core `workspace_dependencies` |
| Transport -X-> Config/Store/Program | OK | canary de firewall workspace |
| Transport -X-> `tracing` direct | OK | ownership Logging + `ksp-logging-lib` |
| Features Cargo activées localement par consumer | OK | canary workspace + manifests |
| Target Logging explicite possédé par la crate | OK | `src/constants.rs` + canary `workspace_logging` |
| URL endpoint redacted dans settings/snapshots/Debug | OK | tests settings/client/pool/public API |
| `reqwest::Error` source sans URL sensible | OK | `without_url()` + canary timeout secret |
| JSON-RPC 2.0 request/response/id/error | OK | tests `json_rpc` |
| Registry HTTP courant | OK | 52 descriptors + canary de release |
| Registry historique Deprecated | OK | 14 descriptors `Removed` + canary de release |
| Partition typed future | OK | `4 / 22 / 11 / 15` pour `0.2.1``0.2.4` |
| Quatre canaris typés exacts | OK | `getBalance`, `getGenesisHash`, `getHealth`, `getVersion` |
| Pool rôles/capabilities/priorités/fairness | OK | tests pool |
| RPS/burst/concurrence/cooldown | OK | tests resilience/pool |
| Deadline/timeout/retry borné | OK | tests executor/resilience |
| No-resend après dispatch ambigu | OK | descriptor + policy + tests |
| 429/Retry-After et statuts temporaires | OK | tests executor |
| Config standard Transport | OK | `std.transport.json` + schema + example |
| Direction Config -> Transport | OK | adapter `load_resolved_transport_config` |
| Sensibilité/provenance/env Transport | OK | tests Config |
| Logging Transport dédié | OK | sink dédié `info` dans `std.logging.json` |
| Tests réseau par défaut déterministes | OK | fixtures + serveur HTTP local |
| Smoke Devnet | OPT-IN | `tests/transport_devnet_smoke.rs`, ignored par défaut |
| README durable | OK | `crates/ksp-onchain-transport-lib/README.md` |
| USAGE durable | OK | `crates/ksp-onchain-transport-lib/USAGE.md` |
| Prompt release suivante | OK | `prompts/007-V0_2_2_START_PROMPT.md` |
| Matrice HTTP globale préservée | OK | plan `008`; 48 méthodes restantes restent affectées à `0.2.2``0.2.4` |
## Canaries de complétude finales
`pre.007` ajoute une intégration publique dédiée qui vérifie :
```text
current == 52
historical == 14
coverage == 4 / 22 / 11 / 15
V0_2_1 == getBalance/getGenesisHash/getHealth/getVersion
historical => Deprecated + Removed + NotApplicable
```
Ces checks complètent les tests unitaires existants du registre et protègent la frontière de release depuis l'API publique.
La candidate déclare **80 tests Transport** et **114 tests Config**, dont le smoke Devnet Config unique marqué `ignored`. Ces nombres sont des canaries de clôture de la candidate et devront être confirmés par Cargo sur le dépôt canonique.
## Smoke Devnet opt-in
Le smoke live appartient à `ksp-config-lib`, car il doit prouver la chaîne :
```text
Config
-> profile devnet_public
-> HttpTransportSettings
-> HttpTransportPool
-> getHealth
-> getGenesisHash
-> getVersion
-> getBalance(System Program)
```
Transport ne lit donc pas directement l'environnement.
Exécution explicite :
```bash
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
```
Ce test dépend d'un service Devnet externe. Il reste ignoré dans les suites déterministes et un incident/rate-limit du RPC public n'est pas assimilé à une régression locale sans analyse.
## Audit `cargo tree` final attendu
À exécuter sur le dépôt canonique :
```bash
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
```
Points attendus :
- pas de Config sous Transport ;
- Config dépend de Transport dans le sens autorisé ;
- pas de Store/Program ;
- pas de `tracing` direct chez Transport ;
- `reqwest/rustls`, `serde/derive`, Tokio Transport et Tokio de test Config restent activés localement par les crates consommatrices.
## Validations finales de `pre.007`
Avant commit :
```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
```
Puis, de manière opt-in :
```bash
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
```
Le smoke live est une preuve supplémentaire ; les suites déterministes restent la gate reproductible de publication.
## Préparation de `rel.001`
Si les validations de `pre.007` sont propres, `rel.001` doit rester minimal :
```text
workspace.package.version -> 0.2.1
ROADMAP : 0.2.1 -> [X]
CHANGELOG : synthèse stable 0.2.1
plan 008 / matrice 003 : statut clôturé et preuves opérateur
nouveau delta deltas/0.2.1/rel.001.md
commit v0.2.1-rel.001
tag v0.2.1
```
Aucune nouvelle capacité HTTP ne doit être introduite dans `rel.001`.