v0.2.9-pre.001-fix.002

This commit is contained in:
2026-08-24 09:23:03 +02:00
parent 3081bd1085
commit 21de590aea
5 changed files with 291 additions and 112 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: ROADMAP.md --> <!-- file: ROADMAP.md -->
<!-- version: 84 --> <!-- version: 85 -->
# Roadmap KSP # Roadmap KSP
@@ -53,14 +53,22 @@ Le roadmap décrit les objectifs à atteindre et les grandes étapes prévues. U
- [X] `0.2.6``ksp-app-wallet-desk` + `.kspwallet` V2 stables : composition Config/Wallet/HTTP/Logging, lifecycle VIEW/OWNER, balance, administration/import/export, wire binaire V2, APIs multi-version, migration V1 -> V2 explicite et runtime Tauri packagé user-writable validés ; bundles Linux `.deb`/`.rpm`/`.AppImage` produits avant publication. Plan clôturé : `docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md`. - [X] `0.2.6``ksp-app-wallet-desk` + `.kspwallet` V2 stables : composition Config/Wallet/HTTP/Logging, lifecycle VIEW/OWNER, balance, administration/import/export, wire binaire V2, APIs multi-version, migration V1 -> V2 explicite et runtime Tauri packagé user-writable validés ; bundles Linux `.deb`/`.rpm`/`.AppImage` produits avant publication. Plan clôturé : `docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md`.
- [X] `0.2.7` — WebSocket Solana standard stable : 9 familles subscribe/unsubscribe typées (18/18 opérations), sessions physiques multiples explicites, subscriptions logiques typées, lifecycle/reconnect/resubscribe/backpressure/shutdown bornés, Config V2, non-régression HTTP 52+14, compliance finale, smoke WebSocket Devnet et audit de dépendances validés ; publication `rel.001` et prompt `0.2.8` prêts. - [X] `0.2.7` — WebSocket Solana standard stable : 9 familles subscribe/unsubscribe typées (18/18 opérations), sessions physiques multiples explicites, subscriptions logiques typées, lifecycle/reconnect/resubscribe/backpressure/shutdown bornés, Config V2, non-régression HTTP 52+14, compliance finale, smoke WebSocket Devnet et audit de dépendances validés ; publication `rel.001` et prompt `0.2.8` prêts.
- [X] `0.2.8` — Helius LaserStream WebSocket stable : façade provider dédiée sur lactor WebSocket partagé, sept familles standard réutilisées (`account/logs/program/root/signature/slot/slotsUpdates`) + `transactionSubscribe`/`transactionUnsubscribe`, `block/vote` absents, heartbeat Ping 60 s Helius-only, Config V2/secrets redacted, lifecycle adversarial, compliance HTTP 52+14 / Standard WS 18/18 et graphes Cargo finaux validés ; prompt `0.2.9` prêt. - [X] `0.2.8` — Helius LaserStream WebSocket stable : façade provider dédiée sur lactor WebSocket partagé, sept familles standard réutilisées (`account/logs/program/root/signature/slot/slotsUpdates`) + `transactionSubscribe`/`transactionUnsubscribe`, `block/vote` absents, heartbeat Ping 60 s Helius-only, Config V2/secrets redacted, lifecycle adversarial, compliance HTTP 52+14 / Standard WS 18/18 et graphes Cargo finaux validés ; prompt `0.2.9` prêt.
- [ ] `0.2.9` — Construire le moteur client Yellowstone gRPC partagé, exposer la surface Solana Yellowstone standard et réaliser la première intégration provider PublicNode Mainnet/Testnet sans dupliquer le moteur. - [ ] `0.2.9` — Construire le moteur client Yellowstone gRPC partagé, exposer la surface Solana Yellowstone standard et réaliser la première intégration provider PublicNode Mainnet/Testnet sans dupliquer le moteur ; le provider peut restreindre ou étendre le standard si une divergence réelle est démontrée.
- [ ] `0.2.10` — Ajouter lintégration Yellowstone gRPC OrbitFlare sur le moteur/standard acquis, avec auth/capabilities provider auditées et Devnet comme cible gratuite prioritaire. - [ ] `0.2.10` — Ajouter lintégration Yellowstone gRPC OrbitFlare sur le moteur/standard acquis, avec audit explicite des auth/capabilities/restrictions/extensions et Devnet comme cible gratuite prioritaire.
- [ ] `0.2.11` — Ajouter lintégration Helius LaserStream gRPC sur le moteur Yellowstone partagé, sans confondre cette surface avec LaserStream WebSocket. - [ ] `0.2.11` — Ajouter lintégration Helius LaserStream gRPC sur le moteur Yellowstone partagé, avec audit de compatibilité/replay/auth/extensions, sans confondre cette surface avec LaserStream WebSocket.
- [ ] `0.2.12`Auditer puis, si laccès et le delta provider le justifient, ajouter lintégration eRPC Yellowstone gRPC ; ne pas créer une façade vide si seule lURL diffère. - [ ] `0.2.12`Introduire `ksp-offchain-transport-lib` avec un premier lecteur de prix, au minimum SOL/USD et SOL/EUR.
- [ ] `0.2.13` — Introduire `ksp-offchain-transport-lib` avec un premier lecteur de prix, au minimum SOL/USD et SOL/EUR. - [ ] `0.2.13` — Introduire une petite application desk de visualisation/validation des prix offchain, puis intégrer cette capacité dans `ksp-app-wallet-desk` sans dupliquer la logique de récupération/normalisation possédée par le composant spécialisé.
- [ ] `0.2.14` — Introduire une petite application desk de visualisation/validation des prix offchain, puis intégrer cette capacité dans `ksp-app-wallet-desk` sans dupliquer la logique de récupération/normalisation possédée par le composant spécialisé. - [ ] `0.2.14` — Introduire la première surface de `ksp-interface-lib`, comprenant une API wire publique utilisable par les implémentations officielles et externes.
- [ ] `0.2.15` — Introduire la première surface de `ksp-interface-lib`, comprenant une API wire publique utilisable par les implémentations officielles et externes. - [ ] `0.2.15` — Introduire `ksp-program-api` comme premier contrat Program extensible, sans imposer encore `ksp-program-lib` complet.
- [ ] `0.2.16` — Introduire `ksp-program-api` comme premier contrat Program extensible, sans imposer encore `ksp-program-lib` complet.
### TODO/IDEAS — providers Yellowstone non planifiés
- [ ] **TODO** — eRPC : réauditer accès, auth/IP policy, capabilities et produits complémentaires avant toute décision dimplémentation.
- [ ] **TODO** — Triton : réauditer la frontière Yellowstone upstream / extensions Triton, notamment Deshred et futures extensions.
- [ ] **TODO** — Alchemy : réauditer auth, replay, limites et capabilities Yellowstone avant toute intégration.
- [ ] **TODO** — QuickNode : réauditer auth, compression, `from_slot`, filtres et limites de plan.
- [ ] **TODO** — Chainstack : réauditer networks, auth, add-on et capabilities Yellowstone.
- [ ] **IDEAS** — Tatum, Shyft, Solinfra, NodeFlare et autres providers : conserver comme candidats exploratoires sans numéro de release ni engagement dimplémentation.
### Règles Transport pour toute la série ### Règles Transport pour toute la série

View File

@@ -0,0 +1,154 @@
<!-- file: deltas/0.2.9/pre.001-fix.002.md -->
<!-- version: 1 -->
# Delta `0.2.9-pre.001-fix.002` — provider divergence + waitlist Yellowstone
## 1. Base requise
```text
0.2.9-pre.001-fix.001
workspace.package.version = 0.2.9-pre.1
```
Ce correctif est **documentaire uniquement**. Conformément au workflow de version, il ne modifie pas `workspace.package.version`.
## 2. Motif du correctif
Le cadrage `pre.001-fix.001` avait correctement séparé :
```text
N1 moteur Yellowstone partagé
N2 façade Solana Yellowstone standard
N3 intégration provider
```
mais la formulation « sans duplication du moteur ni du wire standard » pouvait être comprise comme une hypothèse d'équivalence wire/capabilities entre Yellowstone upstream et tous les providers.
Cette hypothèse n'est pas acceptable : un provider peut implémenter seulement un sous-ensemble du standard, imposer des limites/auth/lifecycle différents ou proposer des extensions propres.
Le correctif ferme aussi la liste des providers à implémenter à court terme :
```text
0.2.9 PublicNode
0.2.10 OrbitFlare
0.2.11 Helius LaserStream gRPC
```
Les autres providers ne reçoivent plus de numéro de release réservé.
## 3. Décisions corrigées
### 3.1 Règle N1 / N2 / N3
```text
N1 = moteur client Yellowstone unique
N2 = contrat Solana Yellowstone standard KSP
N3 = adaptation provider
```
Invariant N1 :
```text
aucun second actor/channel/stream moteur par provider
```
Règle N2/N3 :
```text
réutiliser N2 lorsqu'une capacité provider est réellement compatible
restreindre explicitement N2 lorsqu'une capacité standard est absente/non supportée
ajouter une extension typed N3 lorsqu'un provider étend le protocole/wire
porter en N3 les différences auth/metadata/compression/keepalive/replay/from_slot/limites/lifecycle
ne jamais présumer une équivalence provider/standard sans preuve
```
Une divergence réelle n'est donc ni dupliquée arbitrairement ni masquée derrière le standard.
### 3.2 Providers actuellement planifiés
```text
0.2.9 moteur Yellowstone + standard Solana + PublicNode
0.2.10 OrbitFlare Yellowstone gRPC
0.2.11 Helius LaserStream gRPC
```
Chaque release provider commence par un delta audit avec Yellowstone upstream courant et ne matérialise que ses différences réelles.
### 3.3 Providers en attente
Les providers suivants sont retirés de la séquence numérotée :
```text
TODO eRPC
TODO Triton
TODO Alchemy
TODO QuickNode
TODO Chainstack
IDEAS Tatum
IDEAS Shyft
IDEAS Solinfra
IDEAS NodeFlare
IDEAS autres providers
```
Aucun Config profile, type public, dépendance, smoke ou forecast n'est préparé pour eux tant qu'une décision explicite d'implémentation n'est pas prise.
### 3.4 Séquence fonctionnelle libérée
La suppression de la réservation `0.2.12 eRPC` ramène la suite active à :
```text
0.2.12 off-chain price transport
0.2.13 Price Desk + intégration prix Wallet Desk
0.2.14 interface/wire foundation
0.2.15 program-api foundation
```
## 4. Fichiers modifiés
```text
ROADMAP.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md
docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md
```
## 5. Fichier ajouté
```text
deltas/0.2.9/pre.001-fix.002.md
```
## 6. Fichiers non modifiés intentionnellement
```text
Cargo.toml
prompts/014-V0_2_9_START_PROMPT.md
crates/**
config/**
.env.example
```
Le prompt `014` reste l'autorité historique d'ouverture ; le plan et les deltas successifs enregistrent les décisions prises pendant le gate.
## 7. Validation
Correctif documentaire :
```bash
python3 scripts/audit_rust_workspace_rules.py
```
Aucun `cargo check/clippy/test` supplémentaire n'est requis par ce correctif tant qu'aucun artefact code/build/runtime/config n'est modifié.
## 8. État de sortie
```text
N1 moteur unique explicite
N2 standard non présumé universel
N3 peut réutiliser/restreindre/étendre
PublicNode/OrbitFlare/Helius seuls providers planifiés
reste des providers en TODO/IDEAS non numérotés
off-chain price revient en 0.2.12
aucun changement runtime/dependency
```

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md --> <!-- file: docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md -->
<!-- version: 87 --> <!-- version: 88 -->
# Séquence des releases fonctionnelles KSP # Séquence des releases fonctionnelles KSP
@@ -366,11 +366,10 @@ Par défaut :
0.2.9 Yellowstone gRPC engine + Solana standard + PublicNode 0.2.9 Yellowstone gRPC engine + Solana standard + PublicNode
0.2.10 OrbitFlare Yellowstone gRPC 0.2.10 OrbitFlare Yellowstone gRPC
0.2.11 Helius LaserStream gRPC 0.2.11 Helius LaserStream gRPC
0.2.12 eRPC Yellowstone gRPC (conditionnel après réaudit accès/capabilities) 0.2.12 off-chain price transport
0.2.13 off-chain price transport 0.2.13 price visualization desk + intégration prix dans Wallet Desk
0.2.14 price visualization desk + intégration prix dans Wallet Desk 0.2.14 interface/wire foundation
0.2.15 interface/wire foundation 0.2.15 program-api foundation
0.2.16 program-api foundation
``` ```
`0.2.1-pre.001` a appliqué le gate de sizing et refusé le scope HTTP monolithique initial : l'inventaire du 2026-08-17 contient 52 méthodes courantes et 14 méthodes Deprecated historiques. Ce premier delta avait réparti la couverture typée sur `0.2.1``0.2.6`. `0.2.1-pre.001-fix.001` recalibre ensuite les 48 méthodes restantes sur trois releases complémentaires `0.2.2``0.2.4`, soit trois sessions nominales au maximum si chaque release utilise sa session complète. Si une release se clôt plus vite que prévu, la même session peut enchaîner la suivante après clôture complète de la précédente et nouveau gate de sizing positif. Un Wallet Desk utile doit pouvoir lire le solde du wallet : `getBalance` fait donc partie des quatre canaris de la foundation `0.2.1`, avant Wallet. Les transports live arrivent ensuite ; Interface/Program restent préparés avant les couches de données décodées. `0.2.1-pre.001` a appliqué le gate de sizing et refusé le scope HTTP monolithique initial : l'inventaire du 2026-08-17 contient 52 méthodes courantes et 14 méthodes Deprecated historiques. Ce premier delta avait réparti la couverture typée sur `0.2.1``0.2.6`. `0.2.1-pre.001-fix.001` recalibre ensuite les 48 méthodes restantes sur trois releases complémentaires `0.2.2``0.2.4`, soit trois sessions nominales au maximum si chaque release utilise sa session complète. Si une release se clôt plus vite que prévu, la même session peut enchaîner la suivante après clôture complète de la précédente et nouveau gate de sizing positif. Un Wallet Desk utile doit pouvoir lire le solde du wallet : `getBalance` fait donc partie des quatre canaris de la foundation `0.2.1`, avant Wallet. Les transports live arrivent ensuite ; Interface/Program restent préparés avant les couches de données décodées.
@@ -480,33 +479,51 @@ Mission : construire un moteur client Yellowstone gRPC partagé dans `ksp-onchai
Le `pre.001` est un gate de sizing : chaque prerelease vise 1520 minutes de travail effectif et la release complète doit rester clôturable dans une seule session. Si cette clôture devient incertaine, `0.2.9` est scindée avant implémentation lourde supplémentaire. Le `pre.001` est un gate de sizing : chaque prerelease vise 1520 minutes de travail effectif et la release complète doit rester clôturable dans une seule session. Si cette clôture devient incertaine, `0.2.9` est scindée avant implémentation lourde supplémentaire.
La séparation cible reprend le modèle WebSocket : moteur physique partagé -> protocole standard -> adaptations provider. PublicNode est la première intégration provider ; une façade spécialisée n'est cée que si une différence réelle de capabilities/wire/lifecycle le justifie. La séparation cible reprend le modèle WebSocket : moteur physique partagé -> protocole standard -> adaptations provider. PublicNode est la première intégration provider. Le moteur n'est jamais dupliqué ; le standard n'est réutilisé que pour les capacités réellement compatibles. Une couche provider peut restreindre le standard ou porter des extensions wire/lifecycle explicites.
### `0.2.10``0.2.12` — providers Yellowstone ### `0.2.10``0.2.11` — providers Yellowstone retenus
```text ```text
0.2.10 OrbitFlare Yellowstone gRPC 0.2.10 OrbitFlare Yellowstone gRPC
0.2.11 Helius LaserStream gRPC 0.2.11 Helius LaserStream gRPC
0.2.12 eRPC Yellowstone gRPC, conditionné à un accès exploitable et à un delta provider réel
``` ```
Chaque release réutilise le moteur et le standard de `0.2.9`. Un provider qui ne diffère finalement que par son URL/configuration ne justifie ni second actor ni façade vide ; son gate peut réduire/fusionner le scope avant implémentation. Chaque release réutilise le moteur de `0.2.9`, audite son delta avec Yellowstone upstream et matérialise uniquement les restrictions/extensions réelles du provider.
### `0.2.13` / `0.2.14` — Off-chain price + app ### TODO/IDEAS — providers Yellowstone en attente
`0.2.13` introduit `ksp-offchain-transport-lib` avec au minimum SOL/USD et SOL/EUR via une abstraction indépendante du premier provider. Aucune release n'est réservée pour :
`0.2.14` ajoute une petite application desk de visualisation/validation. Après stabilisation de cette application spécialisée, la même release doit intégrer la capacité de prix offchain dans `ksp-app-wallet-desk` sans dupliquer la récupération/normalisation appartenant au composant spécialisé. ```text
TODO eRPC
TODO Triton
TODO Alchemy
TODO QuickNode
TODO Chainstack
IDEAS Tatum
IDEAS Shyft
IDEAS Solinfra
IDEAS NodeFlare
IDEAS autres providers à réauditer
```
Ces providers ne déplacent pas la séquence active et ne reçoivent ni façade, ni Config profile, ni smoke tant qu'une décision explicite d'implémentation n'est pas prise.
### `0.2.12` / `0.2.13` — Off-chain price + app
`0.2.12` introduit `ksp-offchain-transport-lib` avec au minimum SOL/USD et SOL/EUR via une abstraction indépendante du premier provider.
`0.2.13` ajoute une petite application desk de visualisation/validation. Après stabilisation de cette application spécialisée, la même release doit intégrer la capacité de prix offchain dans `ksp-app-wallet-desk` sans dupliquer la récupération/normalisation appartenant au composant spécialisé.
Metadata HTTP/IPFS/Arweave viendra au premier besoin Metadata réel. Metadata HTTP/IPFS/Arweave viendra au premier besoin Metadata réel.
### `0.2.15` — Interface foundation ### `0.2.14` — Interface foundation
`ksp-interface-lib` devient la façade wire officielle et expose une API publique wire utilisable par les implementations officielles et externes. `ksp-interface-lib` devient la façade wire officielle et expose une API publique wire utilisable par les implementations officielles et externes.
Aucune `ksp-interface-api` séparée n'est retenue pour l'instant. Aucune `ksp-interface-api` séparée n'est retenue pour l'instant.
### `0.2.16` — Program API foundation ### `0.2.15` — Program API foundation
Introduire `ksp-program-api`, sans suffixe `-lib`, comme contrat d'extension Program. Introduire `ksp-program-api`, sans suffixe `-lib`, comme contrat d'extension Program.

View File

@@ -1,9 +1,9 @@
<!-- file: docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md --> <!-- file: docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md -->
<!-- version: 3 --> <!-- version: 4 -->
# Plan `0.2.9` — moteur Yellowstone gRPC + standard Solana + PublicNode # Plan `0.2.9` — moteur Yellowstone gRPC + standard Solana + PublicNode
> **Statut : `0.2.9-pre.001-fix.001` — gate audit/sizing corrigé. `0.2.9` est bornée à un moteur client Yellowstone partagé, une façade Solana Yellowstone standard et une première intégration concrète PublicNode. Les autres providers Yellowstone sont sortis de la release et planifiés séparément. Chaque prerelease vise 1520 minutes de travail effectif et la release complète doit rester clôturable dans une seule session de chat.** > **Statut : `0.2.9-pre.001-fix.002` — gate audit/sizing corrigé. `0.2.9` est bornée à un moteur client Yellowstone partagé, une façade Solana Yellowstone standard et une première intégration concrète PublicNode. Seuls OrbitFlare puis Helius LaserStream gRPC sont actuellement planifiés comme releases provider suivantes ; les autres providers restent en TODO/IDEAS sans numéro réservé. Chaque prerelease vise 1520 minutes de travail effectif et la release complète doit rester clôturable dans une seule session de chat.**
## 1. Objet, base et état d'ouverture ## 1. Objet, base et état d'ouverture
@@ -56,21 +56,31 @@ N2 façade protocolaire Solana Yellowstone standard
N3 première intégration provider : PublicNode / Allnodes-backed N3 première intégration provider : PublicNode / Allnodes-backed
Mainnet + Testnet, capabilities/profile/config + smokes live opt-in Mainnet + Testnet, capabilities/profile/config + smokes live opt-in
sans duplication du moteur ni du wire standard sans duplication du moteur ; le wire standard est réutilisé uniquement pour les capacités réellement compatibles
``` ```
Le moteur est **Yellowstone-specific**, pas une abstraction gRPC universelle. Le serveur/plugin Geyser reste hors de KSP ; KSP implémente le client du protocole Yellowstone exposé par les providers. Le moteur est **Yellowstone-specific**, pas une abstraction gRPC universelle. Le serveur/plugin Geyser reste hors de KSP ; KSP implémente le client du protocole Yellowstone exposé par les providers.
La première intégration PublicNode peut rester volontairement mince si le provider n'ajoute aucun wire ou lifecycle propriétaire : l'objectif est de matérialiser la frontière provider, les capabilities et la validation live, pas de créer artificiellement un second actor/session. Un type/facade provider-specific public n'est justifié que si PublicNode impose une différence réelle de contrat. La première intégration PublicNode peut rester volontairement mince si le provider n'ajoute aucun wire ou lifecycle propriétaire : l'objectif est de matérialiser la frontière provider, les capabilities et la validation live, pas de créer artificiellement un second actor/session. Un type/facade provider-specific public n'est justifié que si PublicNode impose une différence réelle de contrat.
La compatibilité provider n'est toutefois **jamais présumée totale**. Pour chaque provider, N3 peut :
```text
réutiliser N2 pour une capacité Yellowstone réellement compatible
restreindre une capacité standard absente/non supportée
ajouter une extension provider-specific typed
adapter auth/metadata, compression, keepalive, replay/from_slot, limites ou lifecycle
```
Le moteur N1 reste unique. Le wire N2 n'est jamais recopié quand il est identique, mais une divergence réelle de wire ou de sémantique doit être isolée explicitement dans N3 plutôt que masquée derrière le standard.
Sont explicitement exclus de `0.2.9` : Sont explicitement exclus de `0.2.9` :
```text ```text
SubscribeDeshred et pré-exécution/deshred SubscribeDeshred et pré-exécution/deshred
OrbitFlare provider integration OrbitFlare provider integration
Helius LaserStream gRPC provider integration Helius LaserStream gRPC provider integration
eRPC provider integration eRPC/Triton/Alchemy/QuickNode/Chainstack/Tatum/Shyft/Solinfra/NodeFlare/autres providers
Tatum/Triton/Chainstack/Shyft/autres providers
client autoreconnect upstream comme contrat public KSP client autoreconnect upstream comme contrat public KSP
pool/scheduler automatique complexe de sessions gRPC pool/scheduler automatique complexe de sessions gRPC
exactly-once / lossless / ordre global garanti exactly-once / lossless / ordre global garanti
@@ -78,7 +88,7 @@ serveur Geyser/plugin validator
Store/workers/backfill historique Store/workers/backfill historique
``` ```
Les providers suivants sont **des releases ultérieures**, comme Helius LaserStream WebSocket l'a été après le moteur WebSocket standard. Ils réutiliseront N1/N2 et n'ajouteront une façade spécialisée que lorsqu'une différence d'authentification, de capabilities, de wire, de keepalive, de replay ou de lifecycle le nécessite. Après `0.2.9`, seules deux releases provider sont actuellement réservées : **OrbitFlare**, puis **Helius LaserStream gRPC**. Elles réutiliseront N1/N2 lorsque compatibles et isoleront leurs restrictions/extensions dans N3. Tous les autres providers restent en TODO/IDEAS sans numéro réservé jusqu'à décision explicite ultérieure.
## 3. Sources internes relues ## 3. Sources internes relues
@@ -551,10 +561,10 @@ Helius LaserStream WS HeliusLaserStreamWsSession
Yellowstone gRPC engine nouveau runtime/session physique partagé Yellowstone gRPC engine nouveau runtime/session physique partagé
Solana Yellowstone standard façade typed standard sur ce moteur Solana Yellowstone standard façade typed standard sur ce moteur
PublicNode Yellowstone première intégration provider sur standard PublicNode Yellowstone première intégration provider sur standard
future providers adapters/facades séparés seulement si différence réelle future providers adapters/capabilities pouvant réutiliser, restreindre ou étendre le standard
``` ```
Cette structure reprend le principe validé par `0.2.7`/`0.2.8` : **le moteur physique n'est jamais recopié par provider**. Cette structure reprend le principe validé par `0.2.7`/`0.2.8` : **le moteur physique n'est jamais recopié par provider**. En revanche, l'intégration provider doit pouvoir exprimer un sous-ensemble du standard, des overrides de comportement ou des extensions wire réelles ; l'équivalence complète avec N2 n'est jamais supposée.
Interdictions : Interdictions :
@@ -587,11 +597,14 @@ YellowstoneUpdate / typed update projections
# N3 — provider # N3 — provider
provider descriptor/capabilities ouverts provider descriptor/capabilities ouverts
standard capabilities supportées / restreintes explicitement
provider extensions typed si nécessaires
provider auth/metadata/compression/replay/lifecycle policy
PublicNode integration/profile/canaries PublicNode integration/profile/canaries
PublicNode-specific facade seulement si une différence réelle le justifie PublicNode-specific facade seulement si une différence réelle le justifie
``` ```
Le backend wire Tonic/Prost reste privé. Tous les types publics nécessaires sont réexportés au crate root conformément aux règles KSP. Le provider et le protocole restent deux axes distincts : `PublicNode` décrit **où/comment** on exécute Yellowstone standard, pas un nouveau protocole. Le backend wire Tonic/Prost reste privé. Tous les types publics nécessaires sont réexportés au crate root conformément aux règles KSP. Le provider et le protocole restent deux axes distincts : `PublicNode` décrit **où/comment et avec quelles capabilities** on exécute Yellowstone. Si une capacité provider est strictement standard, elle réutilise N2 ; si elle diverge, N3 porte explicitement cette divergence.
### 12.3 Metadata/auth provider-neutral ### 12.3 Metadata/auth provider-neutral
@@ -607,7 +620,7 @@ Il ne connaît :
```text ```text
aucun nom KSP_SECRET_* aucun nom KSP_SECRET_*
aucun std::env aucun std::env
aucun header PublicNode/OrbitFlare/Tatum hardcodé comme contrat standard aucun header PublicNode/OrbitFlare/Helius hardcodé comme contrat standard
``` ```
Les clés metadata sont validées avant I/O ; les valeurs sensibles ne sont jamais dans `Debug`, `Display`, `KspError`, logs ou snapshots. Les clés metadata sont validées avant I/O ; les valeurs sensibles ne sont jamais dans `Debug`, `Display`, `KspError`, logs ou snapshots.
@@ -721,13 +734,14 @@ Credit Limits = Unlimited
Cela répond au besoin « gratuit durable » mieux qu'un trial de quelques jours, mais nécessite un compte/credential. Cela répond au besoin « gratuit durable » mieux qu'un trial de quelques jours, mais nécessite un compte/credential.
Décision `0.2.9` : Décision de séquence :
```text ```text
OrbitFlare Devnet = smoke live opt-in secondaire OrbitFlare = release provider dédiée 0.2.10
auth = via generic secret metadata Config -> Transport Devnet Free = cible live prioritaire de cette release
aucun OrbitFlareGrpc* public auth/capabilities/limites = auditées comme delta provider N3
aucun header provider hardcodé avant vérification exacte de la doc/live réutilisation de N2 seulement pour les capacités réellement compatibles
aucun OrbitFlareGrpc* public vide si aucune divergence de contrat ne le justifie
``` ```
Source : Source :
@@ -736,49 +750,27 @@ Source :
https://orbitflare.com/pricing https://orbitflare.com/pricing
``` ```
### 14.3 Tatum — candidat tertiaire, non gate ### 14.3 Helius LaserStream gRPC — provider planifié après OrbitFlare
Tatum documente un endpoint Yellowstone Solana Mainnet et un plan Free utilisable sans abonnement payant, mais le plan courant impose : Helius reste volontairement hors `0.2.9` et `0.2.10`. Sa release dédiée `0.2.11` devra auditer son delta réel avec Yellowstone upstream : auth, endpoints, replay, reconnect/continuity, capacités supplémentaires ou restrictions, et toute extension wire éventuelle. La compatibilité Yellowstone annoncée ne vaut pas preuve d'équivalence complète.
### 14.4 TODO/IDEAS — autres providers non planifiés
Aucune version n'est réservée actuellement pour les providers suivants :
```text ```text
3 RPS TODO eRPC — réauditer accès, auth/IP policy, capabilities et éventuels produits Burst/Shred séparés
100K lifetime credits TODO Triton — réauditer upstream vs extensions Triton, notamment Deshred et évolutions futures
5 subscriptions TODO Alchemy — réauditer capabilities, auth, replay et limites du produit Yellowstone
TODO QuickNode — réauditer auth, compression, from_slot, filtres et limites par plan
TODO Chainstack — réauditer add-on, networks, auth et capabilities
IDEAS Tatum — accès borné par lifetime credits ; intérêt secondaire
IDEAS Shyft — réauditer seulement si gRPC durable devient accessible
IDEAS Solinfra — free tier + Yellowstone annoncés mais entitlement gRPC gratuit non confirmé
IDEAS NodeFlare — réauditer seulement si offre Yellowstone gratuite durable apparaît
``` ```
Le caractère « forever » du plan n'en fait donc pas une ressource illimitée dans le temps : le quota de crédits est lifetime. Ces entrées n'ont **aucun numéro de release**, aucun forecast et aucun engagement d'implémentation. Elles ne sont reprises dans la séquence active que sur décision explicite ultérieure. Bitquery/CoreCast reste hors de cette file Yellowstone tant que son protocole n'est pas Yellowstone standard.
Décision : **candidat manuel tertiaire**, utile pour interop Mainnet authentifiée, mais pas dépendance du gate `0.2.9`.
Sources :
```text
https://docs.tatum.io/reference/solana-grpc
https://tatum.io/pricing
```
### 14.4 Fournisseurs vérifiés mais non retenus comme gratuits gRPC
État courant vérifié :
```text
Helius Free: pas de LaserStream gRPC ; Devnet à partir de Developer, Mainnet Business
Shyft Free: No gRPC Access
Alchemy Yellowstone gRPC: PAYG ou Enterprise requis
QuickNode Yellowstone gRPC: Scale/Business ou add-on payant
Chainstack Yellowstone gRPC: add-on payant à partir de 49 USD/mois, Growth+
ERPC Geyser gRPC payant ; seulement trial 1 jour sur le plan Standard
NodeFlare endpoint Yellowstone publié, mais plan Yellowstone à forfait mensuel
Bitquery CoreCast gRPC n'est pas Yellowstone ; accès stream gratuit non garanti et offre publique payante/trial
```
Candidat non validé comme gratuit durable :
```text
Solinfra site public = free tier + Yellowstone annoncés, mais entitlement gRPC du free tier non explicite
```
Solinfra pourra être revalidé en `pre.011` si une grille publique ou le dashboard confirme un droit Yellowstone durable à 0 USD. Triton et d'autres providers peuvent également être réaudités si leur offre change, mais aucun autre accès Yellowstone gratuit durable n'a été confirmé avec une preuve publique suffisante pendant ce gate.
## 15. Smoke ownership ## 15. Smoke ownership
@@ -791,7 +783,7 @@ Hiérarchie cible :
2. Transport pur programmatic -> PublicNode Testnet, si endpoint exact confirmé 2. Transport pur programmatic -> PublicNode Testnet, si endpoint exact confirmé
3. Config V3 -> Transport -> PublicNode profile, si Config est matérialisée dans 0.2.9 3. Config V3 -> Transport -> PublicNode profile, si Config est matérialisée dans 0.2.9
OrbitFlare et les providers authentifiés sont validés dans leurs releases dédiées. OrbitFlare et Helius sont validés dans leurs releases dédiées. Les autres providers ne font l'objet d'aucun smoke planifié tant qu'ils restent en TODO/IDEAS.
4. Tatum Mainnet authentifié, opérateur-only si utile 4. Tatum Mainnet authentifié, opérateur-only si utile
``` ```
@@ -1027,7 +1019,7 @@ Config V3 backward V1/V2 si Config intégrée
PublicNode intégration provider matérialisée sans duplication du moteur PublicNode intégration provider matérialisée sans duplication du moteur
PublicNode interop Mainnet validée opt-in ou impossibilité externe documentée PublicNode interop Mainnet validée opt-in ou impossibilité externe documentée
PublicNode Testnet validé si endpoint live confirmé, sinon raison documentée PublicNode Testnet validé si endpoint live confirmé, sinon raison documentée
OrbitFlare/Helius/eRPC absents du runtime 0.2.9 hors documentation de séquence OrbitFlare/Helius absents du runtime 0.2.9 hors documentation de séquence ; autres providers uniquement TODO/IDEAS
HTTP 52+14 non régressé HTTP 52+14 non régressé
standard WS 18/18 non régressé standard WS 18/18 non régressé
Helius WS non régressé Helius WS non régressé
@@ -1040,17 +1032,18 @@ workspace final vert
## 21. Releases suivantes recalibrées ## 21. Releases suivantes recalibrées
Le gate `pre.001-fix.001` reprend la logique WebSocket : moteur/standard d'abord, providers ensuite, un provider par release lorsque son intégration apporte un delta réel. Le gate `pre.001-fix.002` reprend la logique WebSocket : moteur/standard d'abord, puis uniquement les providers effectivement retenus pour implémentation.
```text ```text
0.2.9 moteur Yellowstone + Solana standard + PublicNode 0.2.9 moteur Yellowstone + Solana standard + PublicNode
0.2.10 OrbitFlare Yellowstone gRPC 0.2.10 OrbitFlare Yellowstone gRPC
0.2.11 Helius LaserStream gRPC 0.2.11 Helius LaserStream gRPC
0.2.12 eRPC Yellowstone gRPC, conditionné à un accès exploitable et à un delta provider réel 0.2.12 off-chain price transport
0.2.13 off-chain price transport 0.2.13 Price Desk + intégration prix Wallet Desk
0.2.14 Price Desk + intégration prix Wallet Desk 0.2.14 interface/wire foundation
0.2.15 interface/wire foundation 0.2.15 program-api foundation
0.2.16 program-api foundation
``` ```
La numérotation `0.2.10+` reste réauditable au gate de chaque release : un provider qui n'ajoute finalement qu'une URL interchangeable sans contrat propre ne doit pas provoquer une façade vide ni une release artificielle. Les autres providers Yellowstone — eRPC, Triton, Alchemy, QuickNode, Chainstack, Tatum, Shyft, Solinfra, NodeFlare et autres — restent en **TODO/IDEAS non numérotés**. Ils ne doivent pas déplacer la séquence active tant qu'une décision explicite d'implémentation n'est pas prise.
Pour toute intégration provider future, la règle reste : N1 n'est jamais dupliqué ; N2 est réutilisé seulement là où le provider est réellement compatible ; N3 exprime explicitement les restrictions, overrides et extensions.

View File

@@ -1,9 +1,9 @@
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md --> <!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
<!-- version: 3 --> <!-- version: 4 -->
# Validation `0.2.9` — moteur Yellowstone + standard Solana + PublicNode # Validation `0.2.9` — moteur Yellowstone + standard Solana + PublicNode
> **Statut : matrice ouverte par `0.2.9-pre.001` et corrigée par `pre.001-fix.001`. Le scope distingue désormais moteur Yellowstone, façade Solana standard et première intégration PublicNode. OrbitFlare/Helius/eRPC sont reportés dans des releases provider dédiées.** > **Statut : matrice ouverte par `0.2.9-pre.001` et corrigée par `pre.001-fix.002`. Le scope distingue moteur Yellowstone, façade Solana standard et première intégration PublicNode. OrbitFlare et Helius sont les seules releases provider suivantes actuellement planifiées ; les autres providers restent en TODO/IDEAS sans numéro réservé.**
## 1. Autorités du gate ## 1. Autorités du gate
@@ -230,20 +230,22 @@ prost/prost-types 0.14.x (0.14.4 latest observé)
## 9. Architecture / ownership ## 9. Architecture / ownership
| Invariant | Preuve cible | État | | Invariant | Preuve cible | État |
|--------------------------------------------------------------------------------|--------------------------|------| |--------------------------------------------------------------------------------|--------------------------------|------|
| backend gRPC distinct HTTP/WS | source/API canary | TODO | | backend gRPC distinct HTTP/WS | source/API canary | TODO |
| aucun `WsProtocolKind` gRPC | source scan | TODO | | aucun `WsProtocolKind` gRPC | source scan | TODO |
| Transport owns gRPC | dependency graph | TODO | | Transport owns gRPC | dependency graph | TODO |
| Config -> Transport seulement | ownership test | TODO | | Config -> Transport seulement | ownership test | TODO |
| Transport -X-> Config | ownership test | TODO | | Transport -X-> Config | ownership test | TODO |
| Transport -X-> std::env KSP_* | ownership test | TODO | | Transport -X-> std::env KSP_* | ownership test | TODO |
| Logging façade KSP only | logging ownership | TODO | | Logging façade KSP only | logging ownership | TODO |
| no raw Tonic client escape hatch | public API canary | TODO | | no raw Tonic client escape hatch | public API canary | TODO |
| moteur Yellowstone partagé sans duplication provider | source/API canary | TODO | | moteur Yellowstone partagé sans duplication provider | source/API canary | TODO |
| façade Solana Yellowstone standard distincte du moteur | public API canary | TODO | | façade Solana Yellowstone standard distincte du moteur | public API canary | TODO |
| PublicNode représenté comme provider/capabilities, pas comme nouveau protocole | public API/config canary | TODO | | PublicNode représenté comme provider/capabilities, pas comme nouveau protocole | public API/config canary | TODO |
| façade provider spécialisée seulement si delta réel | completeness review | TODO | | provider peut réutiliser, restreindre ou étendre N2 sans dupliquer N1 | capability/completeness review | TODO |
| aucune équivalence provider/standard présumée sans preuve | provider matrix/tests | TODO |
| façade provider spécialisée seulement si delta réel | completeness review | TODO |
## 10. Settings, bounds et redaction ## 10. Settings, bounds et redaction
@@ -341,14 +343,17 @@ Canaries :
## 13. Providers — validation et séquence ## 13. Providers — validation et séquence
| Provider | Accès gratuit/durable observé | Rôle architectural | Release cible | Verdict | | Provider | Accès gratuit/durable observé | Rôle architectural | Release cible | Verdict |
|----------------------------------|-------------------------------------------|-----------------------------------------------------|-------------------------|-----------------| |-----------------------------------------------|------------------------------------|-----------------------------------------------------------|---------------|-----------------|
| **PublicNode / Allnodes-backed** | Mainnet + Testnet Yellowstone gRPC | première intégration concrète du standard | **0.2.9** | **IN provider** | | **PublicNode / Allnodes-backed** | Mainnet + Testnet Yellowstone gRPC | première intégration concrète | **0.2.9** | **IN provider** |
| **OrbitFlare** | Devnet Free | provider authentifié réutilisant standard | **0.2.10** | **REPORT** | | **OrbitFlare** | Devnet Free | provider dédié ; compat/restrictions/extensions à auditer | **0.2.10** | **PLANNED** |
| **Helius LaserStream gRPC** | accès dépendant du plan | compat Yellowstone + sémantiques provider à auditer | **0.2.11** | **REPORT** | | **Helius LaserStream gRPC** | accès dépendant du plan | provider dédié ; compat/replay/auth/extensions à auditer | **0.2.11** | **PLANNED** |
| **eRPC** | gratuit durable non confirmé au gate | provider à réauditer | **0.2.12 conditionnel** | **REPORT** | | eRPC | à réauditer | waitlist provider | non réservé | TODO |
| Tatum | Free durable mais crédits lifetime bornés | candidat ultérieur | non réservé | REPORT | | Triton | à réauditer | upstream + extensions provider possibles | non réservé | TODO |
| Triton/Chainstack/Shyft/autres | selon accès/capabilities | candidats ultérieurs | non réservé | REPORT | | Alchemy | à réauditer | waitlist provider | non réservé | TODO |
| QuickNode | à réauditer | waitlist provider | non réservé | TODO |
| Chainstack | à réauditer | waitlist provider | non réservé | TODO |
| Tatum / Shyft / Solinfra / NodeFlare / autres | selon accès/capabilities | attente exploratoire | non réservé | IDEAS |
### PublicNode `0.2.9` ### PublicNode `0.2.9`
@@ -365,14 +370,16 @@ utilise le moteur Yellowstone partagé
utilise la façade standard Solana utilise la façade standard Solana
provider/capabilities/profile explicitement identifiables provider/capabilities/profile explicitement identifiables
aucune duplication actor/channel/stream aucune duplication actor/channel/stream
aucun wire PublicNode inventé si le provider reste standard wire N2 réutilisé seulement pour les capacités réellement compatibles ; divergence N3 explicite
Mainnet smoke opt-in Mainnet smoke opt-in
Testnet smoke opt-in si endpoint exact confirmé Testnet smoke opt-in si endpoint exact confirmé
``` ```
### Providers suivants ### Providers suivants
OrbitFlare, Helius et eRPC ne sont plus des smokes secondaires de `0.2.9`. Chacun est audité dans sa release dédiée et ne reçoit une façade/type spécialisé que si l'authentification, les capabilities, le wire, le keepalive, le replay ou le lifecycle diffèrent réellement du standard. OrbitFlare (`0.2.10`) et Helius LaserStream gRPC (`0.2.11`) sont les seules intégrations provider actuellement planifiées après PublicNode. Pour chacune, le gate doit comparer le provider au Yellowstone upstream courant : capacités supportées, restrictions, extensions wire, auth/metadata, compression, keepalive, replay/from_slot, limites et lifecycle.
Les autres providers restent en TODO/IDEAS sans release dédiée. Aucune façade, dépendance, Config profile ou smoke n'est préparé pour eux tant qu'une décision explicite ne les fait pas entrer dans la séquence active.
## 14. Non-régressions obligatoires ## 14. Non-régressions obligatoires