v0.2.10-pre.001

This commit is contained in:
2026-08-25 10:14:37 +02:00
parent 09aacc36ab
commit 7f567bc1bb
8 changed files with 1235 additions and 21 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/000-README.md -->
<!-- version: 24 -->
<!-- version: 25 -->
# Validations KSP
@@ -20,4 +20,5 @@ Documents :
- [`009-V0_2_6_WALLET_DESK_COMPLIANCE.md`](009-V0_2_6_WALLET_DESK_COMPLIANCE.md) — matrice finale validée de la release stable `0.2.6`, couvrant Wallet Desk, les wires V1/V2, la migration explicite, le runtime Tauri packagé, les frontières sécurité/ownership et le gate opérateur `pre.018-fix.001` avec build final Linux vert.
- [`010-V0_2_7_ONCHAIN_WEBSOCKET.md`](010-V0_2_7_ONCHAIN_WEBSOCKET.md) — matrice finale validée de la release stable `0.2.7`, ouverte par `pre.001`, fermée techniquement par `pre.014` puis publiée par `rel.001` : inventaire 9 subscribe + 9 unsubscribe, lifecycle borné, statuts unstable, compliance 18/18, non-régression HTTP 52+14, composition Config V2, smoke WebSocket Devnet et audit de dépendances.
- [`011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md`](011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md) — matrice finale validée de la release stable `0.2.8`, ouverte par `pre.001`, consolidée jusquà `pre.011` puis publiée par `rel.001` : Helius `account/logs/program/root/signature/slot/slotsUpdates + transaction`, `block/vote` absents, heartbeat provider, sécurité/redaction, lifecycle adversarial, non-régressions HTTP/WS, stratégie smoke live et graphes Cargo finaux.
- [`012-V0_2_9_YELLOWSTONE_GRPC.md`](012-V0_2_9_YELLOWSTONE_GRPC.md) — matrice active ouverte par `0.2.9-pre.001` : service Geyser courant, `Subscribe` standard, 7 unary, filtres/updates, dépendances/licence, replay/backpressure, Config V3 et interopérabilité PublicNode/OrbitFlare.
- [`012-V0_2_9_YELLOWSTONE_GRPC.md`](012-V0_2_9_YELLOWSTONE_GRPC.md) — matrice finale de la release stable `0.2.9` : service Geyser courant, `Subscribe` standard, 7 unary, filtres/updates, dépendances/licence, replay/backpressure, Config V3 et smoke PublicNode Mainnet/Testnet.
- [`013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md`](013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md) — matrice active ouverte par `0.2.10-pre.001` : Free Devnet, auth provider, endpoint security, heartbeat standard, capabilities, Config V3, smoke live et invariant N1/N2 immuable.

View File

@@ -0,0 +1,272 @@
<!-- file: docs/validation/013-V0_2_10_ORBITFLARE_YELLOWSTONE_GRPC.md -->
<!-- version: 1 -->
# Validation `0.2.10` — OrbitFlare Yellowstone gRPC
**Statut courant : matrice ouverte par `0.2.10-pre.001`. Le gate d'architecture est positif. Le premier objectif live est le Devnet gratuit OrbitFlare via le standard Yellowstone KSP inchangé. Les verdicts provider non encore testés restent explicitement `PENDING` ou `UNKNOWN`.**
## 1. Autorités
```text
RULES.md + docs/rules/*
archive stable v0.2.9
plan 016 et validation 012 pour N1/N2
plan 017 courant
prompt 015 pour les contraintes non supersédées
deltas/0.2.10/*
OrbitFlare docs/pricing/SDK/CLI actuels
Yellowstone upstream actuel
```
## 2. Baseline stable
| Gate | Résultat |
|------------------------------------------|----------------------------------|
| version de base | `0.2.9` PASS |
| `deltas/0.2.9/rel.001.md` | PASS |
| prompt `015` | PASS |
| `cargo fmt --all` | PASS |
| audit Rust | PASS |
| audit Markdown | PASS |
| `cargo check --workspace` | PASS |
| `cargo clippy --workspace --all-targets` | PASS |
| `cargo test --workspace` | PASS |
| Transport unit | 383 sur 383 PASS |
| Transport public API | 49 sur 49 PASS |
| Transport release completeness | 43 sur 43 PASS |
| Config unit | 113 sur 113 PASS |
| graph duplicates Transport | fourni, aucun conflit N1 visible |
| graph complet Transport | PENDING avant commit |
## 3. Invariant architecture
| Exigence | Verdict |
|----------------------------------------|----------|
| moteur gRPC N1 modifié pour OrbitFlare | **NO** |
| standard Yellowstone N2 modifié | **NO** |
| second client Tonic | **NO** |
| SDK OrbitFlare runtime | **NO** |
| provider séparé du protocol | **PASS** |
| Config -> Transport seulement | **PASS** |
| Transport -> Config/env | **PASS** |
| façade provider sans divergence | **NO** |
Toute modification de `grpc_stream.rs`, `grpc_channel.rs`, `grpc_settings.rs`, `grpc_unary.rs` ou `grpc_subscribe.rs` motivée uniquement par OrbitFlare invalide ce gate.
## 4. Pricing et réseau
| Point | Preuve actuelle | Verdict |
|----------------------|------------------------------------------|-------------|
| plan Solana Free | 0 USD par mois | **PASS** |
| gRPC Free | Devnet only | **PASS** |
| RPS Free | 10 | INFO |
| TPS Free | 1 | INFO |
| crédit | unlimited dans le RPS | INFO |
| Devnet gRPC endpoint | `http://devnet.rpc.orbitflare.com:10000` | **PASS** |
| Devnet live KSP | non encore exécuté | **PENDING** |
| Mainnet gratuit | non documenté | **OUT** |
| Testnet endpoint | non prouvé | **UNKNOWN** |
Sources :
```text
https://orbitflare.com/pricing
https://orbitflare.com/products/rpc-nodes
https://docs.orbitflare.com/cli
```
## 5. Transport security
| Forme endpoint | Classification | Verdict |
|---------------------------------------|-----------------------|----------|
| `http://*.rpc.orbitflare.com:10000` | HTTP/2 plaintext | **PASS** |
| `https://*.grpc.orbitflare.com` | HTTP/2 TLS | **PASS** |
| transformation automatique http/https | interdite | **PASS** |
| endpoint Dashboard | autoritaire si fourni | **PASS** |
KSP ne prétend pas qu'un canal gRPC plaintext bénéficie d'une sécurité TLS implicite.
## 6. Auth classification
| Élément | Usage prouvé | Verdict |
|-----------------------------|--------------------------------|-----------------------|
| `X-ORBIT-KEY` | Customer API | **CONTROL-PLANE** |
| Bearer Customer API | Customer API v2 | **CONTROL-PLANE** |
| RPC `api_key` | Solana HTTP RPC | **HTTP ONLY** |
| API key compte opérateur | CLI/Customer API | **NOT GRPC PROOF** |
| token gRPC Dashboard | quickstart Yellowstone | **ACCOUNT DEPENDENT** |
| metadata upstream `x-token` | mécanisme Yellowstone standard | **POSSIBLE** |
| aucune metadata gRPC | SDK Go OrbitFlare | **DOCUMENTED** |
| auth Devnet Free réelle | smoke KSP à exécuter | **PENDING** |
Aucun secret opérateur n'est demandé pour `pre.001`.
## 7. Heartbeat
| Point | Preuve | Verdict |
|----------------------------------------|------------------------------------------|-------------|
| OrbitFlare idle timeout partagé | environ 10 minutes | **PASS** |
| OrbitFlare recommande client Ping | 30 secondes | **PASS** |
| Yellowstone serveur Ping périodique | upstream documenté | **PASS** |
| KSP auto reply au serveur Ping | test N1 `0.2.9` | **PASS** |
| moteur N1 à modifier | non | **PASS** |
| Ping serveur OrbitFlare Devnet observé | live non encore exécuté | **PENDING** |
| heartbeat provider additionnel | non justifié tant que live non contraire | **NO** |
Critère de fermeture : observer le Ping standard sur OrbitFlare Devnet ou qualifier précisément pourquoi il n'est pas observable et quelle divergence provider existe.
## 8. Capabilities streaming
| Capability | Docs OrbitFlare | KSP N2 | Live provider |
|---------------------|-----------------|--------|---------------|
| accounts | oui | PASS | PENDING |
| slots | oui | PASS | PENDING |
| transactions | oui | PASS | PENDING |
| transactions_status | partiel | PASS | PENDING |
| blocks | oui | PASS | PENDING |
| blocks_meta | oui | PASS | PENDING |
| entry | oui | PASS | PENDING |
| commitment | oui | PASS | PENDING |
| accounts_data_slice | oui | PASS | PENDING |
| Subscribe Ping/Pong | oui | PASS | PENDING |
Le premier smoke n'a pas besoin de démontrer chaque famille. Il doit prouver que le provider exécute le standard KSP sur Devnet ; les capacités supplémentaires sont sondées sans élargir N2.
## 9. Unary et replay
| Capability | N2 KSP | OrbitFlare docs | Live |
|---------------------|--------|-----------------|---------|
| SubscribeReplayInfo | PASS | non prouvé | PENDING |
| Ping unary | PASS | non prouvé | PENDING |
| GetLatestBlockhash | PASS | non prouvé | PENDING |
| GetBlockHeight | PASS | non prouvé | PENDING |
| GetSlot | PASS | non prouvé | PENDING |
| IsBlockhashValid | PASS | non prouvé | PENDING |
| GetVersion | PASS | non prouvé | PENDING |
| from_slot | PASS | non prouvé | PENDING |
| retention | N/A | non documentée | UNKNOWN |
Une restriction provider ne rétrograde jamais la disponibilité de la méthode dans le standard global KSP.
## 10. Limits provider
| Limite | Valeur | Verdict |
|------------------------------|--------------------------|---------|
| concurrent gRPC connections | 50 par IP | INFO |
| subscriptions par connection | unlimited | INFO |
| cap partagé entre régions | oui | INFO |
| idle timeout | environ 10 minutes | INFO |
| dépassement | `RESOURCE_EXHAUSTED` | INFO |
| backoff recommandé | exponentiel jusqu'à 30 s | INFO |
Ces valeurs restent provider-owned et ne deviennent pas des validations génériques de `YellowstoneGrpcSessionSettings`.
## 11. Config V3
| Exigence | Verdict |
|-------------------------------------|-------------|
| nouveau format Config nécessaire | **NO** |
| `provider = orbitflare` | **PLANNED** |
| `protocol = solana_yellowstone` | **PASS** |
| `cluster = devnet` | **PLANNED** |
| Devnet URL publique | **PLANNED** |
| secret metadata par défaut | **NO** |
| `X-ORBIT-KEY` dans Transport Config | **FORBID** |
| `x-token` si token gRPC prouvé | **DEFER** |
| heartbeat dans `grpc_defaults` | **NO** |
## 12. Smoke Devnet attendu
Premier smoke :
```text
Config/fixture -> YellowstoneGrpcEndpointSettings
provider = orbitflare
cluster = devnet
url = http://devnet.rpc.orbitflare.com:10000
metadata vide
open standard Subscribe
request slots confirmed
receive Slot non nul
observe Ping serveur pendant fenêtre bornée de caractérisation
close borné
```
Verdicts actuels :
| Preuve | Verdict |
|-----------------------------|-------------|
| endpoint parsé par N1 | EXPECTED |
| connect Devnet | **PENDING** |
| Subscribe accepté | **PENDING** |
| Slot reçu | **PENDING** |
| server Ping reçu | **PENDING** |
| auto reply KSP déterministe | **PASS** |
| close borné | **PASS N1** |
## 13. Provider overlay gate
La release reste sans façade OrbitFlare si `pre.002` démontre :
```text
standard Subscribe fonctionne
heartbeat standard fonctionne
Config V3 exprime endpoint/auth
aucune restriction consumer-visible ne requiert un type provider
```
Une façade/policy OrbitFlare devient admissible seulement après preuve live d'une divergence. Même dans ce cas :
```text
N1 ne change pas
N2 ne change pas
pas de raw Tonic
pas de SDK OrbitFlare
ownership/close provider bornés
```
## 14. Non-régressions finales
| Surface | Baseline | Final |
|-----------------------------------|--------------|---------|
| HTTP current typed | 52 sur 52 | PENDING |
| HTTP historical | 14 sur 14 | PENDING |
| WebSocket standard | 18 sur 18 | PENDING |
| Helius LaserStream WebSocket | stable 0.2.8 | PENDING |
| Yellowstone N1/N2 | stable 0.2.9 | PENDING |
| PublicNode Mainnet/Testnet | stable 0.2.9 | PENDING |
| Config V1/V2/V3 backward readable | stable 0.2.9 | PENDING |
| dependency firewall | stable 0.2.9 | PENDING |
## 15. Gate `pre.001`
| Critère | Verdict |
|-------------------------------------|------------------------|
| base stable `v0.2.9` | **PASS** |
| baseline fmt/audits/check/clippy | **PASS** |
| workspace test | **PASS** |
| graph duplicates | **PASS** |
| graph complet Transport | **PENDING OPERATOR** |
| sources OrbitFlare actuelles | **PASS** |
| sources Yellowstone actuelles | **PASS** |
| Free Devnet gRPC confirmé | **PASS** |
| endpoints classifiés | **PASS** |
| auth planes distingués | **PASS** |
| heartbeat KSP vs provider classifié | **PASS, LIVE PENDING** |
| capabilities auditées | **PASS, LIVE PENDING** |
| replay/from_slot | **UNKNOWN PROVIDER** |
| N1 immutable | **PASS** |
| N2 immutable | **PASS** |
| Config V3 shape | **PASS** |
| smoke ownership | **PASS** |
| threat model | **PASS** |
| sizing/forecast | **PASS** |
| provider runtime lourd ajouté | **NO** |
Verdict :
```text
architecture/sizing gate = POSITIVE
operator commit gate = PENDING full cargo tree + validations overlay
live provider gate = reserved for pre.002+
```