v0.2.9-pre.005

This commit is contained in:
2026-08-24 12:31:19 +02:00
parent 20320dba7b
commit dca0a4b809
9 changed files with 1420 additions and 43 deletions

View File

@@ -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.005007` 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 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.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 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
@@ -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 : 1520 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 : 1520 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 : 1520 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 : 1520 min ; preuve : fixtures exactes + enum/optional/malformed/adversarial
pre.005 CANDIDATE — standard Solana : Accounts + Slots filters/updates
budget : 1520 min ; preuve : request wire complet + Cuckoo/memcmp/predicates + Account/Slot updates exacts/malformed/adversarial
pre.006 standard Solana : Transactions + transaction_status
budget : 1520 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 :