v0.2.9-pre.005
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md -->
|
||||
<!-- version: 11 -->
|
||||
<!-- version: 12 -->
|
||||
|
||||
# Plan `0.2.9` — moteur Yellowstone gRPC + standard Solana + PublicNode
|
||||
|
||||
> **Statut : `0.2.9-pre.004-fix.001` candidate. Le premier gate opérateur de `pre.004` est fonctionnellement vert (359 unit + 44 public API + 37 completeness + 4 doctests, workspace PASS) mais `cargo check`/Clippy/workspace émettent 10 warnings `dead_code` sur les conversions protobuf encore utilisées uniquement par les tests. Le fix compile ces helpers sous `#[cfg(test)]` jusqu'à leur consommation runtime lors de l'ouverture du stream. Aucun contrat public, filtre ou wire n'est modifié. `pre.003-fix.001` est fermée sur gate opérateur intégralement vert : fmt/audit/check/Clippy/workspace PASS, Transport 354 unit + 43 public API + 36 completeness + 4 doctests, et graphes Cargo inspectés sans seconde version Tonic/Prost/Solana. `pre.004` matérialise uniquement la fondation `SubscribeRequest` standard : sept maps nommées, commitment, account-data slices ordonnées, ping, `from_slot`, bornes communes, unicité globale des noms et Debug sans payload arbitraire. Les champs détaillés Accounts/Slots/Transactions/Blocks restent réservés à `pre.005–007` et aucun stream bidi n'est encore ouvert. PublicNode et Config V3 restent hors tranche. `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.004-fix.001` est fermée sur gate opérateur sans warning : fmt/audit/check/Clippy/workspace PASS, Transport 359 unit + 44 public API + 37 completeness + 4 doctests. `0.2.9-pre.005` est candidate et complète uniquement les familles Yellowstone standard Accounts + Slots : filtres request complets, Cuckoo standard, memcmp bytes/base58/base64, predicates datasize/token-state/lamports, options Slots et DTOs/decode Account/Slot. Les conversions wire/decode restent test-only tant que le stream bidi n'est pas ouvert en `pre.008`. Transactions/Blocks, PublicNode et Config V3 restent hors tranche. `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
|
||||
|
||||
@@ -919,11 +919,11 @@ pre.002 DONE — moteur Yellowstone : proto/dependencies + settings/errors + ch
|
||||
pre.003 DONE — moteur TLS/metadata + façade N2 unary + fixture locale + 7 unary RPCs
|
||||
budget : 15–20 min ; gate final fix.001 : fmt/audit/check/Clippy/workspace PASS + graphes Cargo inspectés
|
||||
|
||||
pre.004 FIX.001 CANDIDATE — standard Solana : Subscribe foundation + maps/commitment/ping/from_slot/data slices/bounds
|
||||
budget : 15–20 min ; premier gate fonctionnel PASS, fix warning-only sur helpers wire test-only
|
||||
pre.004 DONE — standard Solana : Subscribe foundation + maps/commitment/ping/from_slot/data slices/bounds
|
||||
budget : 15–20 min ; gate final fix.001 : fmt/audit/check/Clippy/workspace PASS sans warning + Transport 359/44/37/4
|
||||
|
||||
pre.005 standard Solana : Accounts + Slots filters/updates
|
||||
budget : 15–20 min ; preuve : fixtures exactes + enum/optional/malformed/adversarial
|
||||
pre.005 CANDIDATE — standard Solana : Accounts + Slots filters/updates
|
||||
budget : 15–20 min ; preuve : request wire complet + Cuckoo/memcmp/predicates + Account/Slot updates exacts/malformed/adversarial
|
||||
|
||||
pre.006 standard Solana : Transactions + transaction_status
|
||||
budget : 15–20 min ; preuve : include/exclude/required/Cuckoo/token expansion + tx/meta
|
||||
@@ -1086,6 +1086,44 @@ OUT : Subscribe, SubscribeDeshred, PublicNode, Config V3, reconnect/stream lifec
|
||||
|
||||
Le runtime n'active pas la feature `tonic` de `yellowstone-grpc-proto`; cette feature et `tonic codegen/server` sont réservées au graphe dev/test de la fixture. Le gate Cargo opérateur reste requis avant commit.
|
||||
|
||||
## 19.3 Gate opérateur final `pre.004-fix.001`
|
||||
|
||||
Preuve opérateur du `2026-08-24` :
|
||||
|
||||
```text
|
||||
cargo fmt --all PASS
|
||||
python3 scripts/audit_rust_workspace_rules.py PASS / clean
|
||||
cargo check --workspace PASS sans warning gRPC pre.004
|
||||
cargo clippy --workspace --all-targets PASS sans warning gRPC pre.004
|
||||
Transport unit PASS 359/359
|
||||
Transport public_api PASS 44/44
|
||||
Transport release_completeness PASS 37/37
|
||||
Transport doctests PASS 4/4
|
||||
cargo test --workspace PASS ; seuls smokes/bench diagnostics explicitement ignored
|
||||
```
|
||||
|
||||
`pre.004` est donc **fermée**. Aucun changement de dépendance n'ayant eu lieu depuis `pre.003`, les graphes Cargo déjà inspectés restent l'autorité du dependency set.
|
||||
|
||||
## 19.4 Gate source `pre.005` — Accounts + Slots
|
||||
|
||||
La candidate matérialise exactement :
|
||||
|
||||
```text
|
||||
Accounts request : account[]/owner[]/filters[]/nonempty_txn_signature?/cuckoo_accounts_filter?
|
||||
Account predicates : memcmp bytes/base58/base64, datasize, token_account_state, lamports eq/ne/lt/gt
|
||||
Slots request : filter_by_commitment? + interslot_updates?
|
||||
Account update : filters/created_at + account info + slot + is_startup
|
||||
Slot update : filters/created_at + slot + parent? + 7 SlotStatus + dead_error?
|
||||
```
|
||||
|
||||
Les bornes provider-neutral KSP de cette tranche couvrent notamment les sélecteurs Accounts, predicates, memcmp, Cuckoo, taille account-data, noms de filtres d'update, timestamp nanos, signature fixe 64 octets et `dead_error`. Les Debug KSP n'exposent ni pubkeys sélectionnées, ni payload memcmp/Cuckoo/account-data, ni texte `dead_error`.
|
||||
|
||||
Les conversions protobuf et décodeurs update restent sous `#[cfg(test)]` jusqu'à `pre.008`, car aucun stream runtime ne les consomme encore. Cette décision évite du faux `dead_code` sans créer une seconde implémentation : les mêmes helpers seront remis en runtime au moment de l'ouverture bidi.
|
||||
|
||||
OUT de `pre.005` : Transactions/transaction_status, Blocks/block_meta/entry, stream bidi, provider PublicNode, Config V3 et `SubscribeDeshred`.
|
||||
|
||||
**Verdict `pre.005` : candidate source prête ; fermeture après gate Cargo opérateur.**
|
||||
|
||||
## 20. Conditions de clôture
|
||||
|
||||
`0.2.9` ne devient stable que si :
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
|
||||
<!-- version: 12 -->
|
||||
<!-- version: 14 -->
|
||||
|
||||
# Validation `0.2.9` — moteur Yellowstone + standard Solana + PublicNode
|
||||
|
||||
> **Statut : `pre.003-fix.001` est fermé sur gate opérateur intégralement vert et graphes Cargo inspectés. `0.2.9-pre.004-fix.001` est candidate après un premier gate `pre.004` fonctionnellement vert mais non silencieux : 10 warnings `dead_code` concernent uniquement les conversions protobuf privées encore utilisées seulement par les unit tests. Le fix les place sous `#[cfg(test)]` sans changement de runtime/public API. `0.2.9-pre.004` ajoute uniquement la fondation standard `SubscribeRequest` : sept maps, commitment, account-data slices, ping, `from_slot`, bornes communes et redaction Debug. Aucun stream bidi n'est encore ouvert ; les filtres détaillés Accounts/Slots/Transactions/Blocks restent réservés à `pre.005–007`. PublicNode et Config V3 restent hors tranche. OrbitFlare et Helius sont les seules releases provider suivantes planifiées ; les autres providers restent en TODO/IDEAS sans numéro réservé.**
|
||||
> **Statut : `pre.004-fix.001` est fermé sur gate opérateur intégralement vert et sans les 10 warnings `dead_code` précédents : fmt/audit/check/Clippy/workspace PASS, Transport 359 unit + 44 public API + 37 completeness + 4 doctests. `0.2.9-pre.005` est candidate et complète uniquement Accounts + Slots du `Subscribe` standard : filtres request courants complets, Cuckoo standard, memcmp/predicates, options Slots, DTOs Account/Slot et décodage exact/malformed sous fixture. Aucun stream bidi n'est encore ouvert ; Transactions/Blocks restent `pre.006–007`, puis lifecycle en `pre.008`. PublicNode et Config V3 restent hors tranche. OrbitFlare et Helius sont les seules releases provider suivantes planifiées ; les autres providers restent en TODO/IDEAS sans numéro réservé.**
|
||||
|
||||
## 1. Autorités du gate
|
||||
|
||||
@@ -55,17 +55,17 @@ crate proto : 12.6.0
|
||||
|
||||
## 3. Matrice service `Geyser`
|
||||
|
||||
| RPC | Forme | Classification | Scope | Preuve cible | État |
|
||||
|-----------------------|-------|------------------------------------------------------|-------|-----------------------|-----------------------------------------------|
|
||||
| `Subscribe` | bidi | standard | IN | fixture locale + live | PARTIAL pre.004 request / stream TODO pre.008 |
|
||||
| `SubscribeDeshred` | bidi | Triton extension/pré-exécution malgré présence proto | OUT | canari d'absence/API | OUT |
|
||||
| `SubscribeReplayInfo` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `Ping` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetLatestBlockhash` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetBlockHeight` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetSlot` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `IsBlockhashValid` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetVersion` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| RPC | Forme | Classification | Scope | Preuve cible | État |
|
||||
|-----------------------|-------|------------------------------------------------------|-------|-----------------------|------------------------------------------------------|
|
||||
| `Subscribe` | bidi | standard | IN | fixture locale + live | PARTIAL pre.005 Accounts/Slots / stream TODO pre.008 |
|
||||
| `SubscribeDeshred` | bidi | Triton extension/pré-exécution malgré présence proto | OUT | canari d'absence/API | OUT |
|
||||
| `SubscribeReplayInfo` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `Ping` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetLatestBlockhash` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetBlockHeight` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetSlot` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `IsBlockhashValid` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
| `GetVersion` | unary | standard | IN | fixture unary | DONE pre.003 |
|
||||
|
||||
## 4. `SubscribeRequest` — coverage normative
|
||||
|
||||
@@ -651,4 +651,48 @@ Le proto publié `yellowstone-grpc-proto 12.6.0` a été recontrôlé avant impl
|
||||
|
||||
Les dix symboles concernés (`to_wire` et `commitment_to_wire`) servent uniquement aux tests de projection protobuf de `pre.004`. Le stream bidi n'étant pas ouvert avant `pre.008`, ils ne font pas encore partie du runtime. `#[cfg(test)]` évite donc un faux code mort de production sans créer une seconde implémentation ni modifier le contrat public. Lors de l'intégration runtime du stream, ces helpers seront naturellement retirés du `cfg(test)` au moment où ils auront un consommateur de production.
|
||||
|
||||
**Verdict `pre.004-fix.001` : correctif warning-only prêt ; fermeture de `pre.004` après gate opérateur sans warning.**
|
||||
**Verdict `pre.004-fix.001` : fermé.**
|
||||
|
||||
### 19.2 Gate opérateur final `pre.004-fix.001`
|
||||
|
||||
| Gate / observation | Résultat final |
|
||||
|------------------------------------------|----------------------------|
|
||||
| workspace version | `0.2.9-pre.4.fix.1` |
|
||||
| `cargo fmt --all` | PASS |
|
||||
| audit Rust workspace | PASS / clean |
|
||||
| `cargo check --workspace` | PASS sans warnings pre.004 |
|
||||
| `cargo clippy --workspace --all-targets` | PASS sans warnings pre.004 |
|
||||
| Transport unit | 359/359 PASS |
|
||||
| Transport `public_api` | 44/44 PASS |
|
||||
| Transport `release_completeness` | 37/37 PASS |
|
||||
| Transport doctests | 4/4 PASS |
|
||||
| `cargo test --workspace` | PASS |
|
||||
|
||||
`pre.004` est donc fermée.
|
||||
|
||||
## 20. Gate `pre.005` — Accounts + Slots candidate
|
||||
|
||||
| Surface | État candidate |
|
||||
|------------------------------------------------------|----------------|
|
||||
| workspace version | `0.2.9-pre.5` |
|
||||
| account selectors `account[]` / `owner[]` | SOURCE+TEST |
|
||||
| account predicates memcmp bytes/base58/base64 | SOURCE+TEST |
|
||||
| account predicates datasize/token-state/lamports | SOURCE+TEST |
|
||||
| `nonempty_txn_signature?` | SOURCE+TEST |
|
||||
| `cuckoo_accounts_filter?` + SipHash | SOURCE+TEST |
|
||||
| Slots `filter_by_commitment?` / `interslot_updates?` | SOURCE+TEST |
|
||||
| Account update DTO/decode | SOURCE+TEST |
|
||||
| Slot update DTO/decode + 7 statuts + `dead_error?` | SOURCE+TEST |
|
||||
| fixed-width pubkey/signature malformed | SOURCE+TEST |
|
||||
| payload/timestamp/update-filter/dead-error bounds | SOURCE+TEST |
|
||||
| Debug sans sélecteurs/payloads arbitraires | SOURCE+TEST |
|
||||
| Transactions / transaction_status | OUT pre.005 |
|
||||
| Blocks / block_meta / entry | OUT pre.005 |
|
||||
| stream bidi / lifecycle | OUT pre.005 |
|
||||
| PublicNode / Config V3 | OUT pre.005 |
|
||||
| audit Rust workspace local | PASS / clean |
|
||||
| fmt/check/Clippy/tests | opérateur TODO |
|
||||
|
||||
Les conversions request protobuf et les décodeurs Account/Slot sont test-only jusqu'à `pre.008`, faute de consommateur runtime avant l'ouverture du stream. Le contrat public reste entièrement KSP-owned.
|
||||
|
||||
**Verdict `pre.005` : candidate source prête ; fermeture après gate Cargo opérateur.**
|
||||
|
||||
Reference in New Issue
Block a user