v0.2.9-pre.002

This commit is contained in:
2026-08-24 09:54:14 +02:00
parent 21de590aea
commit 835de48cb7
14 changed files with 1302 additions and 75 deletions

View File

@@ -1,9 +1,9 @@
<!-- file: docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md -->
<!-- version: 4 -->
<!-- version: 5 -->
# Plan `0.2.9` — moteur Yellowstone gRPC + standard Solana + PublicNode
> **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.**
> **Statut : `0.2.9-pre.002` — première matérialisation N1 préparée : dépendances Yellowstone/Tonic minimales, settings runtime bornés, error mapping initial et channel Tonic lazy privé. Les gates Cargo restent à exécuter par lopérateur avant commit. `0.2.9` reste 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
@@ -298,14 +298,20 @@ https://docs.rs/crate/yellowstone-grpc-proto/latest
KSP suit la **Rust stable courante de l'opérateur** et ne documente pas de numéro Rust upstream comme objectif de projet. Le seul gate utile est opérationnel : les dépendances finalement retenues doivent compiler avec la stable courante utilisée par le workspace.
Éléments build à vérifier en `pre.002` :
Résultat de matérialisation `pre.002` :
```text
proto crate crate publiée/pré-générée ; pas de vendoring de .proto KSP
client KSP autour de Tonic features client/TLS minimales
protoc/build.rs aucun outil système ajouté sauf besoin démontré
yellowstone-grpc-proto ^12.6 workspace dependency, default-features = false, aucune feature KSP activée
tonic ^0.14 workspace dependency, default-features = false ; Transport active seulement `channel`
yellowstone-grpc-client absent
prost/prost-types aucune dépendance KSP directe
tonic-prost aucune dépendance KSP directe à ce stade
proto crate publiée/générée ; aucun .proto copié dans KSP
protoc aucun outil système KSP ajouté ; la crate proto publiée utilise son build vendored
```
Le feature `tonic` optionnel de `yellowstone-grpc-proto` n'est **pas** activé en `pre.002`. KSP n'a besoin à ce stade que des messages Protobuf générés bruts ; le channel physique est construit directement avec Tonic. Cette décision évite de tirer prématurément la surface client/serveur Tonic générée et laisse `pre.003` choisir explicitement les features supplémentaires réellement nécessaires aux unary/TLS/metadata.
Un minimum Rust déclaré par une dépendance n'est enregistré que s'il devient un **blocage réel** lors de la compilation ; il n'est pas suivi comme métrique de release.
## 6. Matrice du service `Geyser` courant
@@ -529,16 +535,19 @@ Avantages :
**Décision : stratégie cible retenue.**
Matérialisation attendue en `pre.002` :
Matérialisation réalisée en `pre.002` :
```text
yellowstone-grpc-proto ^12.6 workspace dependency, features minimales
tonic ^0.14 workspace dependency, features client/TLS minimales
prost/prost-types pas de direct dependency KSP sauf besoin démontré
tokio-stream/futures seulement si nécessaire et sans doublon gratuit
yellowstone-grpc-proto ^12.6 root : default-features = false ; Transport : .workspace = true sans feature
tonic ^0.14 root : default-features = false ; Transport : features = ["channel"]
yellowstone-grpc-client absent
prost/prost-types pas de dépendance KSP directe
tonic-prost pas de dépendance KSP directe en pre.002
tokio-stream pas ajouté
futures-util dépendance existante inchangée
```
L'exacte feature set sera déterminée par compilation et `cargo tree`, pas par anticipation documentaire.
Le choix est volontairement plus étroit que le forecast initial : `pre.002` matérialise les messages wire publiés et le channel HTTP/2 lazy, mais **pas encore le client RPC généré, TLS, metadata ou compression**. Les éventuelles features/dependencies supplémentaires doivent être justifiées par `pre.003` et vérifiées par `cargo tree`; elles ne sont pas activées par anticipation.
### C. proto/génération KSP minimale bornée
@@ -582,11 +591,17 @@ pas de façade provider vide uniquement pour renommer le même protocole
Noms cibles, affinables sans casser le principe :
```text
# N1 — moteur Yellowstone
# N1 — moteur Yellowstone matérialisé en pre.002
YellowstoneGrpcEndpointUrl
YellowstoneGrpcProviderName
YellowstoneGrpcClusterName
YellowstoneGrpcReconnectSettings
YellowstoneGrpcEndpointSettings
YellowstoneGrpcSessionSettings
YellowstoneGrpcTransportSettings
YellowstoneGrpcChannel # channel Tonic lazy privé, sans I/O réseau en pre.002
# N1 — étapes ultérieures
YellowstoneGrpcSession
YellowstoneSubscriptionHandle<T>
@@ -880,8 +895,8 @@ Prévision courante :
pre.001 DONE — audit upstream/service/proto + providers gratuits + licences/deps + architecture + threat model + sizing
budget : 1520 min nominal ; preuve : plan + matrice + stratégie B + forecast recalibré
pre.002 moteur Yellowstone : proto/dependencies + settings/errors + channel minimal
budget : 1520 min ; preuve : features minimales + compile/tests + redaction + cargo tree
pre.002 IMPLEMENTED — moteur Yellowstone : proto/dependencies + settings/errors + channel minimal
budget : 1520 min ; preuve locale : audit statique KSP clean + redaction/API canaries ajoutés ; compile/tests/cargo tree = gate opérateur
pre.003 moteur Yellowstone : TLS/metadata générique + fixture locale + 7 unary RPCs
budget : 1520 min ; preuve : connect/TLS/timeouts/Status safe + wire unary exact
@@ -936,10 +951,16 @@ et le reste est replanifié explicitement ; aucune capacité n'est abandonnée s
## 18. Fichiers attendus par tranche
Cibles probables, sans imposer artificiellement le découpage source :
Cibles réelles ouvertes par `pre.002`, puis cibles probables suivantes :
```text
# pre.002
crates/ksp-onchain-transport-lib/src/grpc_settings.rs
crates/ksp-onchain-transport-lib/src/grpc_channel.rs
crates/ksp-onchain-transport-lib/unit_tests/grpc_settings.rs
crates/ksp-onchain-transport-lib/unit_tests/grpc_channel.rs
# pre.003+
crates/ksp-onchain-transport-lib/src/grpc_session.rs
crates/ksp-onchain-transport-lib/src/grpc_protocol.rs
crates/ksp-onchain-transport-lib/src/grpc_subscribe.rs