v0.2.9-pre.003
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
|
||||
<!-- version: 8 -->
|
||||
<!-- version: 9 -->
|
||||
|
||||
# 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`, avancée par `pre.002`, puis corrigée par `pre.002-fix.001` et `pre.002-fix.002`. Le second gate opérateur confirme fmt/audit/check/Clippy et les 346 unit tests ; il a isolé le dernier écart dans le canari d'intégration `public_api`, encore synchrone alors que `prepare()` exige désormais un runtime Tokio actif. `fix.002` corrige uniquement ce canari et attend la réexécution des tests Transport/workspace. 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 : `pre.002-fix.002` est fermé sur gate opérateur intégralement vert : fmt/audit/check/Clippy, Transport 346 unit + 42 public API + 35 release completeness + 4 doctests, Core dependency canary et workspace complet. `0.2.9-pre.003` est maintenant candidate : TLS client, metadata générique redacted, connexion réelle et exactement sept unary Yellowstone standard sont matérialisés avec une fixture Geyser locale ; `Subscribe`, 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
|
||||
|
||||
@@ -195,33 +195,34 @@ 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?` | TODO |
|
||||
| Ping | `count` | `count` | TODO |
|
||||
| LatestBlockhash | `commitment?` | slot/hash/last_valid_height | TODO |
|
||||
| BlockHeight | `commitment?` | block_height | TODO |
|
||||
| Slot | `commitment?` | slot | TODO |
|
||||
| IsBlockhashValid | blockhash + `commitment?` | slot + bool | TODO |
|
||||
| Version | empty | version | TODO |
|
||||
| RPC | Request exact | Response exact | État |
|
||||
| ---------------- | ------------------------- | --------------------------- | --------- |
|
||||
| ReplayInfo | empty | `first_available?` | CANDIDATE |
|
||||
| Ping | `count` | `count` | CANDIDATE |
|
||||
| LatestBlockhash | `commitment?` | slot/hash/last_valid_height | CANDIDATE |
|
||||
| BlockHeight | `commitment?` | block_height | CANDIDATE |
|
||||
| Slot | `commitment?` | slot | CANDIDATE |
|
||||
| IsBlockhashValid | blockhash + `commitment?` | slot + bool | CANDIDATE |
|
||||
| Version | empty | version | CANDIDATE |
|
||||
|
||||
## 8. Dépendances / licence
|
||||
|
||||
| Gate | Décision / matérialisation `pre.002` | Preuve / état |
|
||||
|--------------------------------|---------------------------------------------------------------|---------------------------------|
|
||||
| repository default | AGPL-3.0-only | `LICENSING.md` |
|
||||
| client subtree | Apache-2.0 | `LICENSING.md` |
|
||||
| proto subtree | Apache-2.0 | `LICENSING.md` |
|
||||
| strategy A client+proto | rejetée comme default | documenté |
|
||||
| strategy B proto+Tonic KSP | **retenue et matérialisée** | source PASS / Cargo pending |
|
||||
| `yellowstone-grpc-proto` | `^12.6`, `default-features = false`, aucune feature KSP | Cargo tree pending |
|
||||
| `tonic` | `^0.14`, `default-features = false`, feature `channel` locale | Cargo tree pending |
|
||||
| `yellowstone-grpc-client` | absent | manifest canary ajouté |
|
||||
| `prost/prost-types` direct KSP | absent | manifest / Cargo tree pending |
|
||||
| strategy C vendored proto | fallback seulement | aucun vendoring |
|
||||
| system protoc | aucun outil système KSP ajouté | proto publié/build vendored |
|
||||
| raw upstream types public | interdit ; aucun reexport Tonic/Yellowstone | public API canary ajouté |
|
||||
| executable Yellowstone deps | interdit | dependency firewall à revalider |
|
||||
| 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` |
|
||||
| strategy A client+proto | rejetée comme default | documenté |
|
||||
| strategy B proto+Tonic KSP | **retenue ; TLS/unary matérialisés** | source PASS / Cargo pending |
|
||||
| `yellowstone-grpc-proto` | `^12.6`, `default-features = false`, aucune feature KSP | Cargo tree pending |
|
||||
| `tonic` | runtime `channel+tls-aws-lc+tls-webpki-roots`; dev `codegen+server` | Cargo tree pending |
|
||||
| `yellowstone-grpc-client` | absent | manifest canary ajouté |
|
||||
| `prost/prost-types` direct KSP | absent | manifest / Cargo tree pending |
|
||||
| `http` / `tonic-prost` direct | `^1.5` / `^0.14`, runtime minimal pour PathAndQuery/ProstCodec | Cargo tree pending |
|
||||
| strategy C vendored proto | fallback seulement | aucun vendoring |
|
||||
| system protoc | aucun outil système KSP ajouté | proto publié/build vendored |
|
||||
| raw upstream types public | interdit ; aucun reexport Tonic/Yellowstone | public API canary ajouté |
|
||||
| executable Yellowstone deps | interdit | dependency firewall à revalider |
|
||||
|
||||
Versions observées :
|
||||
|
||||
@@ -234,29 +235,29 @@ prost/prost-types 0.14.x (0.14.4 latest observé)
|
||||
|
||||
## 9. Architecture / ownership
|
||||
|
||||
| Invariant | Preuve cible | État `pre.002` |
|
||||
|--------------------------------------------------------------------------------|--------------------------------|---------------------------------|
|
||||
| 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 |
|
||||
| Config -> Transport seulement | ownership test | hérité / final TODO |
|
||||
| Transport -X-> Config | ownership test | SOURCE PASS / Cargo pending |
|
||||
| Transport -X-> std::env KSP_* | ownership test | SOURCE PASS |
|
||||
| Logging façade KSP only | logging ownership | SOURCE PASS |
|
||||
| no raw Tonic client escape hatch | public API canary | IMPLEMENTED / Cargo pending |
|
||||
| moteur Yellowstone partagé sans duplication provider | source/API canary | N1 FOUNDATION IMPLEMENTED |
|
||||
| façade Solana Yellowstone standard distincte du moteur | public API canary | TODO `pre.003+` |
|
||||
| PublicNode représenté comme provider/capabilities, pas comme nouveau protocole | public API/config canary | TODO `pre.010/011` |
|
||||
| provider peut réutiliser, restreindre ou étendre N2 sans dupliquer N1 | capability/completeness review | architecture conservée |
|
||||
| aucune équivalence provider/standard présumée sans preuve | provider matrix/tests | architecture conservée |
|
||||
| façade provider spécialisée seulement si delta réel | completeness review | TODO provider integration |
|
||||
| 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 |
|
||||
| Config -> Transport seulement | ownership test | hérité / final TODO |
|
||||
| Transport -X-> Config | ownership test | SOURCE PASS / Cargo pending |
|
||||
| Transport -X-> std::env KSP_* | ownership test | SOURCE PASS |
|
||||
| Logging façade KSP only | logging ownership | SOURCE PASS |
|
||||
| no raw Tonic client escape hatch | public API canary | IMPLEMENTED / Cargo pending |
|
||||
| moteur Yellowstone partagé sans duplication provider | source/API canary | N1 FOUNDATION IMPLEMENTED |
|
||||
| façade Solana Yellowstone standard distincte du moteur | public API canary | PARTIAL : 7 unary N2 / Subscribe TODO |
|
||||
| PublicNode représenté comme provider/capabilities, pas comme nouveau protocole | public API/config canary | TODO `pre.010/011` |
|
||||
| provider peut réutiliser, restreindre ou étendre N2 sans dupliquer N1 | capability/completeness review | architecture conservée |
|
||||
| aucune équivalence provider/standard présumée sans preuve | provider matrix/tests | architecture conservée |
|
||||
| façade provider spécialisée seulement si delta réel | completeness review | TODO provider integration |
|
||||
|
||||
## 10. Settings, bounds et redaction
|
||||
|
||||
État après `pre.002` :
|
||||
État après `pre.003` :
|
||||
|
||||
```text
|
||||
DONE/source+tests ajoutés endpoint schemes http/https validés ; TLS réel reporté pre.003
|
||||
DONE/source+tests ajoutés endpoint schemes http/https validés ; TLS réel matérialisé en pre.003
|
||||
DONE/source+tests ajoutés endpoint URL, descripteurs et nombre d’endpoints plafonnés
|
||||
DONE/source+tests ajoutés connect timeout > 0 et plafonné
|
||||
DONE/source+tests ajoutés unary timeout > 0 et plafonné
|
||||
@@ -266,7 +267,7 @@ DONE/source+tests ajoutés request/update queue capacities > 0 et plafonnées
|
||||
DONE/source+tests ajoutés reconnect attempt/backoff bornés
|
||||
TODO pre.004 filter-group count
|
||||
TODO pre.004 filter-name length/uniqueness
|
||||
TODO pre.003 metadata key/value count/size
|
||||
DONE/source+tests ajoutés metadata ASCII key/value count/size + reserved/bin bounds
|
||||
TODO pre.005+ account/owner/include/exclude/required counts
|
||||
TODO pre.004+ memcmp/data slice bounds
|
||||
TODO pre.005+ Cuckoo dimensions/data bounds
|
||||
@@ -276,11 +277,11 @@ Security canaries :
|
||||
|
||||
```text
|
||||
DONE/source+tests ajoutés endpoint URL Debug redacted
|
||||
TODO pre.003 secret metadata Debug/Display absent
|
||||
TODO pre.003 Status message/details distants non recopiés aveuglément en context
|
||||
PARTIAL pre.002 URI Tonic invalide mappée sans recopier l'erreur ; TLS/connect réel pre.003
|
||||
DONE/source+tests ajoutés metadata publique/secrète redacted ; secret marqué sensitive
|
||||
DONE/source+fixture Status message/details/metadata distants exclus des KspError
|
||||
CANDIDATE pre.003 connect réel + TLS WebPKI configuré ; erreur connect/TLS safe, Cargo pending
|
||||
TODO pre.004+ request/update Debug sans payload arbitraire sensible
|
||||
PARTIAL pre.002 channel Debug ne contient ni URL ni raw Tonic ; snapshot lifecycle ultérieur
|
||||
DONE pre.003 source/tests channel/client Debug sans URL, metadata value ni raw Tonic ; lifecycle stream ultérieur
|
||||
```
|
||||
|
||||
## 11. Lifecycle / backpressure / replay
|
||||
@@ -299,7 +300,7 @@ PARTIAL pre.002 channel Debug ne contient ni URL ni raw Tonic ; snap
|
||||
| reconnect budget | borné | TODO |
|
||||
| resubscribe order | déterministe | TODO |
|
||||
| `from_slot` | utilisé sans promesse lossless | TODO |
|
||||
| ReplayInfo | informatif | TODO |
|
||||
| ReplayInfo | informatif | CANDIDATE |
|
||||
| duplicates | observables | TODO |
|
||||
| gaps | observables | TODO |
|
||||
| divergent node history | couverture documentée | TODO |
|
||||
@@ -402,8 +403,8 @@ 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 FIX.001 CANDIDATE moteur: deps/settings/errors/channel 15–20 min
|
||||
pre.003 TODO moteur: TLS/metadata + fixture + 7 unary 15–20 min
|
||||
pre.002 DONE moteur: deps/settings/errors/channel 15–20 min ; gate final fix.002 PASS
|
||||
pre.003 CANDIDATE TLS/metadata + fixture + 7 unary standard 15–20 min
|
||||
pre.004 TODO standard: Subscribe common/from_slot/bounds 15–20 min
|
||||
pre.005 TODO standard: accounts + slots 15–20 min
|
||||
pre.006 TODO standard: transactions + transaction_status 15–20 min
|
||||
@@ -510,3 +511,44 @@ Le second échec ne révèle aucune nouvelle faiblesse du moteur N1 : il confirm
|
||||
|
||||
**Verdict `pre.002-fix.002` : correctif de test d'intégration prêt ; `pre.002` reste ouverte jusqu'à réexécution verte de `cargo test -p ksp-onchain-transport-lib`, `cargo test --workspace` et des gates habituels.**
|
||||
|
||||
### 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 |
|
||||
| `cargo clippy --workspace --all-targets` | PASS |
|
||||
| Transport unit | 346/346 PASS |
|
||||
| Transport `public_api` | 42/42 PASS |
|
||||
| Transport `release_completeness` | 35/35 PASS |
|
||||
| Transport doctests | 4/4 PASS |
|
||||
| Core dependency canary | 3/3 PASS |
|
||||
| `cargo test --workspace` | PASS |
|
||||
|
||||
**Verdict : `pre.002` fermée.**
|
||||
|
||||
## 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 |
|
||||
| Tonic server/codegen uniquement dev/test | SOURCE PASS |
|
||||
| metadata ASCII publique/secrète redacted | SOURCE PASS |
|
||||
| connexion réelle bornée | SOURCE PASS |
|
||||
| 7 unary standard exacts | SOURCE PASS |
|
||||
| fixture Geyser locale | SOURCE PASS |
|
||||
| commitment mapping | SOURCE PASS |
|
||||
| Status hostile sans payload distant | SOURCE PASS |
|
||||
| timeout unary borné | SOURCE PASS |
|
||||
| Subscribe / SubscribeDeshred | OUT pre.003 |
|
||||
| PublicNode / Config V3 | OUT pre.003 |
|
||||
| audit Rust workspace local | PASS / clean |
|
||||
| fmt/check/Clippy/tests/Cargo trees | opérateur TODO |
|
||||
|
||||
La fixture active `yellowstone-grpc-proto/tonic` et Tonic `codegen+server` uniquement dans le graphe dev/test. Le runtime utilise les messages Protobuf publiés, `tonic::client::Grpc` et `tonic-prost::ProstCodec` derrière une façade KSP sans raw escape hatch.
|
||||
|
||||
**Verdict `pre.003` : candidate source prête ; fermeture seulement après gate Cargo opérateur complet et réinspection des graphes.**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user