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

182 lines
9.6 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: 2 -->
# 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` et les preuves opérateur ayant autorisé la publication stable `0.2.1-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 stable `0.2.1` | 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 validée déclare **80 tests Transport** et **114 tests Config**, dont le smoke Devnet Config unique marqué `ignored`. Cargo a confirmé ces surfaces sur le dépôt canonique avant `rel.001`.
## Smoke Devnet opt-in
Le smoke live est temporairement hébergé dans `ksp-config-lib`, car la direction de dépendance actuelle permet dy prouver la chaîne sans introduire Transport -> Config :
```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. Il a été exécuté explicitement avec succès avant `rel.001`.
**TODO ownership :** `ksp-config-lib` ne doit jamais devenir la destination générale des smoke tests, y compris pour les futurs scénarios `Config + autre crate`. Dès qu'une surface KSP d'intégration/orchestration appropriée existe, ce smoke doit y migrer ; les futurs smokes cross-crates doivent être créés directement sur cette surface dédiée.
## Audit `cargo tree` final
Les graphes ont été exécutés sur le dépôt canonique pour Transport et Config sous les formes normale, duplicates et features. Ils confirment :
- aucune dépendance Config sous Transport ;
- Config dépend de Transport dans le sens autorisé ;
- aucune dépendance Store/Program ;
- aucune dépendance `tracing` directe de Transport ;
- `reqwest/rustls`, `serde/derive`, Tokio Transport et Tokio de test Config restent activés localement par les crates consommatrices ;
- les doublons signalés par `cargo tree -d` sont limités à `syn` 2.x/3.x dans les graphes inspectés et proviennent des chaînes proc-macro/transitives, sans duplication d'une stack HTTP/Tokio KSP concurrente.
## Validations finales opérateur
Validé le 2026-08-17 sur le dépôt canonique :
```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
```
Le smoke live a ensuite été exécuté explicitement :
```bash
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
```
Résultat : `1 passed; 0 failed`; les quatre canaris foundation sont donc atteints via le profil Devnet committé.
## Publication `rel.001`
`0.2.1-rel.001` ne contient aucune nouvelle capacité HTTP. Il publie :
```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
delta deltas/0.2.1/rel.001.md
commit v0.2.1-rel.001
tag stable v0.2.1 après validation du commit de release
```