v0.2.9-pre.002-fix.001
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md -->
|
||||
<!-- version: 5 -->
|
||||
<!-- version: 6 -->
|
||||
|
||||
# Plan `0.2.9` — moteur Yellowstone gRPC + standard Solana + PublicNode
|
||||
|
||||
> **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 l’opé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 15–20 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-fix.001` — correctif technique du premier gate opérateur : le channel lazy est conservé comme état N1 de production, `prepare()` refuse proprement l’absence de runtime Tokio au lieu de laisser Tonic paniquer, et les canaries Clippy/runtime sont corrigés. Les gates Cargo doivent être réexécutés après ce fix 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 15–20 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
|
||||
|
||||
@@ -549,6 +549,8 @@ futures-util dépendance existante inchangée
|
||||
|
||||
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.
|
||||
|
||||
Le premier gate opérateur de `pre.002` confirme l'alignement de versions utile : Tonic 0.14.6 réutilise `http` 1.5, `hyper` 1.11, `hyper-util` 0.1, `tower` 0.5 et `bytes` 1.12 déjà présents ; `yellowstone-grpc-proto` unifie `solana-pubkey` en 4.3.0. Les occurrences Prost 0.14.4 visibles dans `cargo tree --duplicates` correspondent aux contextes runtime/build de la même version, notamment `prost-build`/`tonic-prost-build`, et ne constituent pas une seconde génération de version à corriger.
|
||||
|
||||
### C. proto/génération KSP minimale bornée
|
||||
|
||||
Avantage : contrôle maximum du code généré.
|
||||
@@ -895,8 +897,8 @@ Prévision courante :
|
||||
pre.001 DONE — audit upstream/service/proto + providers gratuits + licences/deps + architecture + threat model + sizing
|
||||
budget : 15–20 min nominal ; preuve : plan + matrice + stratégie B + forecast recalibré
|
||||
|
||||
pre.002 IMPLEMENTED — moteur Yellowstone : proto/dependencies + settings/errors + channel minimal
|
||||
budget : 15–20 min ; preuve locale : audit statique KSP clean + redaction/API canaries ajoutés ; compile/tests/cargo tree = gate opérateur
|
||||
pre.002 FIX.001 CANDIDATE — moteur Yellowstone : proto/dependencies + settings/errors + channel minimal
|
||||
budget : 15–20 min ; premier gate : fmt/audit/check PASS, Clippy/test ont révélé return implicite + runtime Tokio ; fix appliqué ; cargo tree inspecté
|
||||
|
||||
pre.003 moteur Yellowstone : TLS/metadata générique + fixture locale + 7 unary RPCs
|
||||
budget : 15–20 min ; preuve : connect/TLS/timeouts/Status safe + wire unary exact
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
|
||||
<!-- version: 5 -->
|
||||
<!-- version: 6 -->
|
||||
|
||||
# Validation `0.2.9` — moteur Yellowstone + standard Solana + PublicNode
|
||||
|
||||
> **Statut : matrice ouverte par `0.2.9-pre.001`, corrigée par `pre.001-fix.002` et avancée par `pre.002`. N1 possède désormais une première matérialisation settings/error/channel lazy ; la validation Cargo de cette tranche reste un gate opérateur. 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é.**
|
||||
> **Statut : matrice ouverte par `0.2.9-pre.001`, corrigée par `pre.001-fix.002`, avancée par `pre.002` puis corrigée par `pre.002-fix.001`. Le premier gate opérateur a validé fmt/audit/check et le graphe, puis a révélé un retour Clippy implicite et l'exigence de runtime Tokio de `connect_lazy()` ; le fix borne désormais ce cas sans panic et attend la réexécution Cargo complète. 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
|
||||
|
||||
@@ -402,7 +402,7 @@ Les autres providers restent en TODO/IDEAS sans release dédiée. Aucune façade
|
||||
|
||||
```text
|
||||
pre.001 DONE audit/sizing/architecture 15–20 min nominal
|
||||
pre.002 IMPLEMENTED / CARGO GATE moteur: deps/settings/errors/channel 15–20 min
|
||||
pre.002 FIX.001 CANDIDATE moteur: deps/settings/errors/channel 15–20 min
|
||||
pre.003 TODO moteur: TLS/metadata + fixture + 7 unary 15–20 min
|
||||
pre.004 TODO standard: Subscribe common/from_slot/bounds 15–20 min
|
||||
pre.005 TODO standard: accounts + slots 15–20 min
|
||||
@@ -446,25 +446,48 @@ Gate de sizing : une prerelease estimée à plus de 20 minutes est scindée ; si
|
||||
|
||||
**Verdict `pre.001` : gate positif ; `pre.002` peut matérialiser la stratégie B sous validation Cargo.**
|
||||
|
||||
## 17. Gate `pre.002`
|
||||
## 17. Gate `pre.002` / `pre.002-fix.001`
|
||||
|
||||
| Critère de tranche | Verdict local |
|
||||
|---------------------------------------------------------|------------------------------------------------|
|
||||
| workspace version `0.2.9-pre.2` | PASS source |
|
||||
| stratégie B matérialisée sans `yellowstone-grpc-client` | PASS source |
|
||||
| proto `12.6` sans default/features KSP | PASS manifest |
|
||||
| Tonic `0.14` limité à `channel` | PASS manifest |
|
||||
| aucun Config/env dans Transport gRPC | PASS source/audit |
|
||||
| aucun couplage WebSocket | PASS source |
|
||||
| settings runtime bornés | PASS source/tests ajoutés |
|
||||
| URL/channel diagnostics redacted | PASS source/tests ajoutés |
|
||||
| channel Tonic lazy privé | PASS source/API canary ajouté |
|
||||
| raw Tonic/Yellowstone absent de l'API publique | PASS source/API canary ajouté |
|
||||
| audit `scripts/audit_rust_workspace_rules.py` | PASS / clean |
|
||||
| `cargo fmt --all` | PENDING opérateur |
|
||||
| `cargo check --workspace` | PENDING opérateur |
|
||||
| `cargo clippy --workspace --all-targets` | PENDING opérateur |
|
||||
| tests Transport/Core/workspace | PENDING opérateur |
|
||||
| `cargo tree` direct/duplicates | PENDING opérateur |
|
||||
Premier passage opérateur sur `pre.002` :
|
||||
|
||||
**Verdict `pre.002` local : implémentation candidate prête pour validation opérateur. La tranche n'est déclarée fermée qu'après les gates Cargo réels.**
|
||||
| Gate / observation | Résultat avant fix | État après `fix.001` |
|
||||
|---------------------------------------------------------|----------------------------------------------------------------------|---------------------------------------------|
|
||||
| workspace version | `0.2.9-pre.2` | `0.2.9-pre.2.fix.1` |
|
||||
| `cargo fmt --all` | PASS | à réexécuter |
|
||||
| audit Rust workspace | PASS / clean | PASS local / clean |
|
||||
| `cargo check --workspace` | PASS, avec warning `channel` jamais lu | warning supprimé par état privé `_channel` |
|
||||
| `cargo clippy --workspace --all-targets` | FAIL : `implicit_return` dans `unit_tests/grpc_settings.rs` | corrigé ; à réexécuter |
|
||||
| `cargo test -p ksp-onchain-transport-lib` | FAIL : `connect_lazy()` appelé hors reactor Tokio, 344/345 avant fix | test/runtime corrigés ; à réexécuter |
|
||||
| dependency canary Core | PASS / 3 passed | inchangé |
|
||||
| `cargo tree -p ksp-onchain-transport-lib` | obtenu et inspecté | PASS graphe |
|
||||
| `cargo tree -p ... --duplicates` / workspace duplicates | obtenu et inspecté | PASS avec doublons build/runtime documentés |
|
||||
|
||||
Correction `fix.001` :
|
||||
|
||||
```text
|
||||
le champ Tonic reste présent en production ; il n'est pas placé sous cfg(test)
|
||||
le champ privé devient `_channel` tant qu'aucune opération pre.003 ne le consomme
|
||||
prepare() vérifie tokio::runtime::Handle::try_current() avant connect_lazy()
|
||||
absence de runtime -> KspError grpc_channel_failed sûr, jamais panic Tonic
|
||||
le test positif s'exécute sous #[tokio::test]
|
||||
un test sync couvre explicitement l'absence de runtime et la redaction
|
||||
la closure de cardinalité settings utilise un return explicite conforme à Clippy
|
||||
```
|
||||
|
||||
Le choix de ne pas mettre le channel sous `#[cfg(test)]` est intentionnel : `pre.002` matérialise une ressource N1 réelle de production qui sera consommée par `pre.003`; une compilation normale sans ce champ rendrait le contrat de tranche artificiellement différent entre production et tests.
|
||||
|
||||
Inspection du graphe opérateur :
|
||||
|
||||
```text
|
||||
tonic 0.14.6
|
||||
yellowstone-grpc-proto 12.6.0
|
||||
prost/prost-types 0.14.4
|
||||
solana-pubkey 4.3.0 unifié
|
||||
http/hyper/hyper-util 1.5.0 / 1.11.0 / 0.1.20
|
||||
tower 0.5.3
|
||||
bytes 1.12.1
|
||||
```
|
||||
|
||||
Aucune version concurrente Tonic/Prost/Solana n'a été introduite dans le graphe Transport. Les répétitions Prost de même version proviennent des unités build/runtime de la crate proto publiée.
|
||||
|
||||
**Verdict `pre.002-fix.001` : correctif source prêt ; `pre.002` reste ouverte jusqu'à réexécution verte de fmt/audit/check/clippy/tests/workspace et confirmation finale du graphe.**
|
||||
|
||||
Reference in New Issue
Block a user