v0.2.9-pre.005-fix.001

This commit is contained in:
2026-08-24 12:53:15 +02:00
parent dca0a4b809
commit 15e3402e1c
5 changed files with 151 additions and 47 deletions

View File

@@ -1,9 +1,9 @@
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
<!-- version: 14 -->
<!-- version: 15 -->
# Validation `0.2.9` — moteur Yellowstone + standard Solana + PublicNode
> **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.006007`, 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é.**
> **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 fonctionnellement verte (364 unit + 45 public API + 38 completeness + workspace PASS) mais nécessite `pre.005-fix.001` : quatre warnings `dead_code` provenant de constantes utilisées seulement par les décodeurs test-only, un warning `wrong_self_convention` et un `implicit_return` Clippy. Aucun stream bidi n'est encore ouvert ; Transactions/Blocks restent `pre.006007`, 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
@@ -196,7 +196,7 @@ Preuve cible : fixtures issues du wire Protobuf + cas old/current + malformed/ov
## 7. Unary RPC matrix
| RPC | Request exact | Response exact | État |
| ---------------- | ------------------------- | --------------------------- | --------- |
|------------------|---------------------------|-----------------------------|-----------|
| ReplayInfo | empty | `first_available?` | CANDIDATE |
| Ping | `count` | `count` | CANDIDATE |
| LatestBlockhash | `commitment?` | slot/hash/last_valid_height | CANDIDATE |
@@ -208,7 +208,7 @@ Preuve cible : fixtures issues du wire Protobuf + cas old/current + malformed/ov
## 8. Dépendances / licence
| Gate | Décision / matérialisation `pre.003` | Preuve / état |
| ------------------------------ | ------------------------------------------------------------------- | ------------------------------- |
|--------------------------------|---------------------------------------------------------------------|---------------------------------|
| repository default | AGPL-3.0-only | `LICENSING.md` |
| client subtree | Apache-2.0 | `LICENSING.md` |
| proto subtree | Apache-2.0 | `LICENSING.md` |
@@ -236,7 +236,7 @@ prost/prost-types 0.14.x (0.14.4 latest observé)
## 9. Architecture / ownership
| Invariant | Preuve cible | État `pre.003` |
| ------------------------------------------------------------------------------ | ------------------------------ | ------------------------------------- |
|--------------------------------------------------------------------------------|--------------------------------|---------------------------------------|
| backend gRPC distinct HTTP/WS | source/API canary | IMPLEMENTED / Cargo pending |
| aucun `WsProtocolKind` gRPC | source scan | SOURCE PASS |
| Transport owns gRPC | dependency graph | IMPLEMENTED / tree pending |
@@ -514,7 +514,7 @@ Le second échec ne révèle aucune nouvelle faiblesse du moteur N1 : il confirm
### Gate final opérateur `pre.002-fix.002`
| Gate | Résultat final |
| ---------------------------------------- | -------------- |
|------------------------------------------|----------------|
| `cargo fmt --all` | PASS |
| audit Rust workspace | PASS / clean |
| `cargo check --workspace` | PASS |
@@ -531,7 +531,7 @@ Le second échec ne révèle aucune nouvelle faiblesse du moteur N1 : il confirm
## 18. Gate `pre.003` — candidate
| Gate / surface | État candidate |
| ------------------------------------------- | -------------- |
|---------------------------------------------|----------------|
| workspace version | `0.2.9-pre.3` |
| runtime proto sans feature `tonic` | SOURCE PASS |
| Tonic runtime channel + AWS-LC + WebPKI TLS | SOURCE PASS |
@@ -586,21 +586,21 @@ aucun Subscribe/PublicNode/Config V3 anticipé
### 18.2 Gate final opérateur `pre.003-fix.001`
| Gate | Résultat final |
|-------------------------------------------|----------------|
| `cargo fmt --all` | PASS |
| audit Rust workspace | PASS / clean |
| `cargo check --workspace` | PASS |
| `cargo clippy --workspace --all-targets` | PASS |
| Transport unit | 354/354 PASS |
| Transport `public_api` | 43/43 PASS |
| Transport `release_completeness` | 36/36 PASS |
| Transport doctests | 4/4 PASS |
| `cargo test --workspace` | PASS |
| `cargo tree -p ...` | fourni/relu |
| `cargo tree -p ... -e features` | fourni/relu |
| `cargo tree -p ... --duplicates` | fourni/relu |
| `cargo tree --duplicates` | fourni/relu |
| Gate | Résultat final |
|------------------------------------------|----------------|
| `cargo fmt --all` | PASS |
| audit Rust workspace | PASS / clean |
| `cargo check --workspace` | PASS |
| `cargo clippy --workspace --all-targets` | PASS |
| Transport unit | 354/354 PASS |
| Transport `public_api` | 43/43 PASS |
| Transport `release_completeness` | 36/36 PASS |
| Transport doctests | 4/4 PASS |
| `cargo test --workspace` | PASS |
| `cargo tree -p ...` | fourni/relu |
| `cargo tree -p ... -e features` | fourni/relu |
| `cargo tree -p ... --duplicates` | fourni/relu |
| `cargo tree --duplicates` | fourni/relu |
Graphe pertinent confirmé : `tonic 0.14.6`, `tonic-prost 0.14.6`, `prost/prost-types 0.14.4`, `yellowstone-grpc-proto 12.6.0`, `solana-pubkey 4.3.0`. Les features serveur/codegen et `yellowstone-grpc-proto/tonic` restent liées à la fixture dev/test ; aucune seconde version Tonic/Prost/Solana n'est introduite par la tranche.
@@ -608,25 +608,25 @@ Graphe pertinent confirmé : `tonic 0.14.6`, `tonic-prost 0.14.6`, `prost/prost-
## 19. Gate `pre.004` — candidate
| Surface | État candidate |
|-----------------------------------------------------|----------------|
| workspace version | `0.2.9-pre.4` |
| sept maps `SubscribeRequest` | SOURCE PASS |
| map vide / entrée nommée vide | SOURCE+TEST |
| commitment optional exact | SOURCE+TEST |
| account-data slices ordonnées | SOURCE+TEST |
| ping optional exact | SOURCE+TEST |
| `from_slot` optional exact | SOURCE+TEST |
| filter names <=128 octets / unicité globale | SOURCE+TEST |
| filter groups <=1024 total | SOURCE+TEST |
| slices <=128 / length <=64 MiB / overflow rejeté | SOURCE+TEST |
| request Debug sans noms/payloads de filtres | SOURCE+TEST |
| filtres Accounts/Slots détaillés | OUT pre.004 |
| filtres Transactions/Blocks détaillés | OUT pre.004 |
| stream bidi / lifecycle / updates | OUT pre.004 |
| PublicNode / Config V3 | OUT pre.004 |
| audit Rust workspace local | PASS / clean |
| fmt/check/Clippy/tests | opérateur TODO |
| Surface | État candidate |
|--------------------------------------------------|----------------|
| workspace version | `0.2.9-pre.4` |
| sept maps `SubscribeRequest` | SOURCE PASS |
| map vide / entrée nommée vide | SOURCE+TEST |
| commitment optional exact | SOURCE+TEST |
| account-data slices ordonnées | SOURCE+TEST |
| ping optional exact | SOURCE+TEST |
| `from_slot` optional exact | SOURCE+TEST |
| filter names <=128 octets / unicité globale | SOURCE+TEST |
| filter groups <=1024 total | SOURCE+TEST |
| slices <=128 / length <=64 MiB / overflow rejeté | SOURCE+TEST |
| request Debug sans noms/payloads de filtres | SOURCE+TEST |
| filtres Accounts/Slots détaillés | OUT pre.004 |
| filtres Transactions/Blocks détaillés | OUT pre.004 |
| stream bidi / lifecycle / updates | OUT pre.004 |
| PublicNode / Config V3 | OUT pre.004 |
| audit Rust workspace local | PASS / clean |
| fmt/check/Clippy/tests | opérateur TODO |
Le proto publié `yellowstone-grpc-proto 12.6.0` a été recontrôlé avant implémentation : les onze champs top-level retenus restent `accounts`, `slots`, `transactions`, `transactions_status`, `blocks`, `blocks_meta`, `entry`, `commitment`, `accounts_data_slice`, `ping`, `from_slot`. Aucun `SubscribeDeshred` n'entre dans la surface KSP.
@@ -696,3 +696,26 @@ Les dix symboles concernés (`to_wire` et `commitment_to_wire`) servent uniqueme
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.**
### 20.1 Premier gate opérateur `pre.005` et `pre.005-fix.001`
| Gate / observation | Résultat `pre.005` | État `fix.001` |
|------------------------------------------|---------------------------------------------------------------------------|------------------------------------------|
| workspace version | `0.2.9-pre.5` | `0.2.9-pre.5.fix.1` |
| `cargo fmt --all` | PASS | à réexécuter |
| audit Rust workspace | PASS / clean | audit local à revalider |
| `cargo check --workspace` | PASS + 4 warnings `dead_code` | constantes test-only sous `#[cfg(test)]` |
| `cargo clippy --workspace --all-targets` | FAIL : 1 `implicit_return` + 1 `wrong_self_convention` ; mêmes 4 warnings | corrigé |
| Transport unit | 364/364 PASS | inchangé |
| Transport `public_api` | 45/45 PASS | inchangé |
| Transport `release_completeness` | 38/38 PASS | inchangé |
| Transport doctests | 4/4 PASS | inchangé |
| Core dependency canary | 3/3 PASS | inchangé |
| `cargo test --workspace` | PASS + 4 warnings à la compilation | à réexécuter sans warning |
Les quatre constantes concernées sont exclusivement consommées par les décodeurs Account/Slot eux-mêmes sous `#[cfg(test)]` jusqu'à l'ouverture du stream en `pre.008`. Elles passent donc sous le même `cfg(test)` plutôt que d'introduire un `allow(dead_code)`. Le receiver du helper Slot devient `self` car le type est `Copy`; la closure `is_some_and` reçoit un `return` explicite conformément à la politique Clippy KSP.
Le même fix réaligne tous les tableaux Markdown de `016` et `012` sans modifier leur contenu sémantique.
**Verdict `pre.005-fix.001` : correctif source/documentaire prêt ; fermeture de `pre.005` après gate opérateur sans warning.**