v0.2.9-pre.009-fix.001
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
|
||||
<!-- version: 19 -->
|
||||
<!-- version: 20 -->
|
||||
|
||||
# Validation `0.2.9` — moteur Yellowstone + standard Solana + PublicNode
|
||||
|
||||
> **Statut : `pre.008-fix.001` est fermée sur gate opérateur sans warning : fmt/audit/check/Clippy/workspace PASS, Transport 370 unit + 47 public API + 41 completeness + 4 doctests. `pre.009` est candidate pour le bidi standard, mutation request, Ping/Pong, backpressure, half-close et shutdown borné ; reconnect/replay restent `pre.010`.**
|
||||
> **Statut : `pre.009` est fonctionnellement verte : Transport 379 unit + 48 public API + 42 completeness + 4 doctests et workspace PASS. Clippy signale deux warnings d’hygiène ; `pre.009-fix.001` est candidate pour les supprimer sans changement de protocole/lifecycle.**
|
||||
|
||||
## 1. Autorités du gate
|
||||
|
||||
@@ -411,7 +411,7 @@ pre.005 DONE standard: accounts + slots 15
|
||||
pre.006 DONE structure: namespace privé HTTP `http_*` 15–20 min ; gate PASS
|
||||
pre.007 DONE standard: transactions + transaction_status 15–20 min ; gate PASS
|
||||
pre.008 DONE standard: blocks + block_meta + entry 15–20 min ; gate final fix.001 PASS sans warning
|
||||
pre.009 CANDIDATE moteur: bidi/backpressure/half-close/shutdown 15–20 min ; fixture locale adversariale
|
||||
pre.009 FIX.001 CANDIDATE moteur: bidi/backpressure/half-close/shutdown 15–20 min ; gate fonctionnel vert, 2 warnings Clippy
|
||||
pre.010 TODO moteur: reconnect/replay/gap/duplicate 15–20 min
|
||||
pre.011 TODO Config V3 + protocol/provider + profils PublicNode 15–20 min
|
||||
pre.012 TODO PublicNode live + compliance + docs/prompt 0.2.10 15–20 min
|
||||
@@ -886,30 +886,31 @@ Le warning provient uniquement de `minimal_transaction_info()` dans `unit_tests/
|
||||
|
||||
## 27. Gate `pre.009` — bidi standard + backpressure + half-close + shutdown candidate
|
||||
|
||||
| Surface / invariant | État candidate |
|
||||
|-------------------------------------------------|----------------|
|
||||
| workspace version | `0.2.9-pre.9` |
|
||||
| `/geyser.Geyser/Subscribe` bidi | SOURCE+TEST |
|
||||
| request initial dans queue bornée | SOURCE+TEST |
|
||||
| mutation `try_update()` ordonnée/non bloquante | SOURCE+TEST |
|
||||
| aucune `unbounded_channel` | CANARY |
|
||||
| decode des 9 variantes standard | SOURCE+TEST |
|
||||
| server Ping -> ping-only id=1 | SOURCE+TEST |
|
||||
| Pong observable | SOURCE+TEST |
|
||||
| server half-close => `Ok(None)` | SOURCE+TEST |
|
||||
| client close => request half-close | SOURCE+TEST |
|
||||
| shutdown hostile borné par `close_timeout` | SOURCE+TEST |
|
||||
| Drop session => half-close best-effort | SOURCE+TEST |
|
||||
| slow receiver => terminal backpressure overflow | SOURCE+TEST |
|
||||
| Status distant sans message/details secrets | SOURCE+TEST |
|
||||
| update malformed => invalid response | SOURCE+TEST |
|
||||
| max inbound Tonic | SOURCE+TEST |
|
||||
| outbound encoded_len avant dispatch | SOURCE+TEST |
|
||||
| reconnect/resubscribe/replay | OUT pre.009 |
|
||||
| `SubscribeDeshred` | OUT 0.2.9 |
|
||||
| PublicNode / Config V3 | OUT pre.009 |
|
||||
| audit Rust workspace local | PASS / clean |
|
||||
| fmt/check/Clippy/tests/workspace | opérateur TODO |
|
||||
| Surface / invariant | État candidate |
|
||||
|-------------------------------------------------|-------------------|
|
||||
| workspace version | `0.2.9-pre.9` |
|
||||
| `/geyser.Geyser/Subscribe` bidi | SOURCE+TEST |
|
||||
| request initial dans queue bornée | SOURCE+TEST |
|
||||
| mutation `try_update()` ordonnée/non bloquante | SOURCE+TEST |
|
||||
| aucune `unbounded_channel` | CANARY |
|
||||
| decode des 9 variantes standard | SOURCE+TEST |
|
||||
| server Ping -> ping-only id=1 | SOURCE+TEST |
|
||||
| Pong observable | SOURCE+TEST |
|
||||
| server half-close => `Ok(None)` | SOURCE+TEST |
|
||||
| client close => request half-close | SOURCE+TEST |
|
||||
| shutdown hostile borné par `close_timeout` | SOURCE+TEST |
|
||||
| Drop session => half-close best-effort | SOURCE+TEST |
|
||||
| slow receiver => terminal backpressure overflow | SOURCE+TEST |
|
||||
| Status distant sans message/details secrets | SOURCE+TEST |
|
||||
| update malformed => invalid response | SOURCE+TEST |
|
||||
| max inbound Tonic | SOURCE+TEST |
|
||||
| outbound encoded_len avant dispatch | SOURCE+TEST |
|
||||
| reconnect/resubscribe/replay | OUT pre.009 |
|
||||
| `SubscribeDeshred` | OUT 0.2.9 |
|
||||
| PublicNode / Config V3 | OUT pre.009 |
|
||||
| audit Rust workspace local | PASS / clean |
|
||||
| fmt/check/tests/workspace | PASS |
|
||||
| Clippy | PASS + 2 warnings |
|
||||
|
||||
Les helpers protobuf qui étaient test-only jusqu'à `pre.008` sont maintenant compilés en runtime parce que `grpc_stream` les consomme effectivement. Aucun helper raw n'est public : les frontières restent `YellowstoneSubscribeRequest` et `YellowstoneSubscribeUpdate`.
|
||||
|
||||
@@ -917,5 +918,25 @@ Le flux sortant utilise la même `mpsc` bornée que celle fournie à `tonic::cli
|
||||
|
||||
`pre.009` ne tente aucun reconnect. Un half-close serveur est terminal normal ; `Status`, decode invalide et overflow sont terminaux en erreur. Le budget de reconnect, l'ordre de resubscribe, `from_slot`/ReplayInfo, gaps, duplicates et node divergence restent exclusivement `pre.010`.
|
||||
|
||||
**Verdict candidat :** source/fixture/audit statique prêts ; gate Cargo opérateur requis.
|
||||
**Verdict `pre.009` :** contrat fonctionnel validé ; fix Clippy-only requis avant fermeture.
|
||||
|
||||
## 28. Gate `pre.009-fix.001` — taille de l’enum update + canari `Send`
|
||||
|
||||
| Gate / observation | Résultat `pre.009` | Correctif `fix.001` |
|
||||
|------------------------------------------|-------------------------------------------|---------------------------------------------------|
|
||||
| `cargo fmt --all` | PASS | à réexécuter |
|
||||
| audit Rust workspace | PASS / clean | PASS local / clean |
|
||||
| `cargo check --workspace` | PASS | contrat inchangé |
|
||||
| `cargo clippy --workspace --all-targets` | PASS + 2 warnings | boxing Transaction + usage réel de `T` |
|
||||
| Transport unit | 379/379 PASS | contrat attendu inchangé |
|
||||
| Transport `public_api` | 48/48 PASS | contrat attendu inchangé |
|
||||
| Transport `release_completeness` | 42/42 PASS | contrat attendu inchangé |
|
||||
| Transport doctests | 4/4 PASS | contrat attendu inchangé |
|
||||
| Core dependency canary | 3/3 PASS | dépendances inchangées |
|
||||
| `cargo test --workspace` | PASS | contrat attendu inchangé |
|
||||
| `large_enum_variant` | Transaction ~664 B, Block ~280 B | `Transaction(Box<YellowstoneTransactionUpdate>)` |
|
||||
| `extra_unused_type_parameters` | helper `assert_send<T>()` n’utilise pas T | `PhantomData<T>` matérialise l’usage compile-time |
|
||||
|
||||
Le boxing ne modifie ni le protobuf ni `YellowstoneTransactionUpdate` : il réduit uniquement la taille du discriminant public transporté dans la queue bidi. Le canari `Send` conserve la même contrainte et ne construit aucune session réseau. Aucun `allow` Clippy n’est ajouté.
|
||||
|
||||
**Verdict fix candidate :** correction minimale prête ; fermeture de `pre.009` après gate opérateur sans warning.
|
||||
|
||||
Reference in New Issue
Block a user