v0.2.9-pre.002

This commit is contained in:
2026-08-24 09:54:14 +02:00
parent 21de590aea
commit 835de48cb7
14 changed files with 1302 additions and 75 deletions

View File

@@ -1,9 +1,9 @@
<!-- file: docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md -->
<!-- version: 4 -->
<!-- version: 5 -->
# Validation `0.2.9` — moteur Yellowstone + standard Solana + PublicNode
> **Statut : matrice ouverte par `0.2.9-pre.001` et corrigée par `pre.001-fix.002`. 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 : matrice ouverte par `0.2.9-pre.001`, corrigée par `pre.001-fix.002` et avancée par `pre.002`. N1 possède désormais une première matérialisation settings/error/channel lazy ; la validation Cargo de cette tranche reste un gate opérateur. 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é.**
## 1. Autorités du gate
@@ -207,17 +207,21 @@ Preuve cible : fixtures issues du wire Protobuf + cas old/current + malformed/ov
## 8. Dépendances / licence
| Gate | Décision `pre.001` | Preuve suivante |
|-----------------------------|--------------------------------|-------------------------|
| 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** | `pre.002` compile/tree |
| strategy C vendored proto | fallback seulement | aucun vendoring pre.001 |
| system protoc | non attendu avec crate publiée | vérifier build réel |
| raw upstream types public | interdit par défaut | public API canary |
| executable Yellowstone deps | interdit | dependency firewall |
| 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 |
Versions observées :
@@ -230,52 +234,53 @@ prost/prost-types 0.14.x (0.14.4 latest observé)
## 9. Architecture / ownership
| Invariant | Preuve cible | État |
|--------------------------------------------------------------------------------|--------------------------------|------|
| backend gRPC distinct HTTP/WS | source/API canary | TODO |
| aucun `WsProtocolKind` gRPC | source scan | TODO |
| Transport owns gRPC | dependency graph | TODO |
| Config -> Transport seulement | ownership test | TODO |
| Transport -X-> Config | ownership test | TODO |
| Transport -X-> std::env KSP_* | ownership test | TODO |
| Logging façade KSP only | logging ownership | TODO |
| no raw Tonic client escape hatch | public API canary | TODO |
| moteur Yellowstone partagé sans duplication provider | source/API canary | TODO |
| façade Solana Yellowstone standard distincte du moteur | public API canary | TODO |
| PublicNode représenté comme provider/capabilities, pas comme nouveau protocole | public API/config canary | TODO |
| provider peut réutiliser, restreindre ou étendre N2 sans dupliquer N1 | capability/completeness review | TODO |
| aucune équivalence provider/standard présumée sans preuve | provider matrix/tests | TODO |
| façade provider spécialisée seulement si delta réel | completeness review | TODO |
| 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 |
## 10. Settings, bounds et redaction
À fermer par tests :
État après `pre.002` :
```text
endpoint schemes TLS/non-TLS explicitement validés
connect timeout > 0
unary timeout > 0
close timeout > 0
max inbound/outbound > 0 et plafonnés
request/update queue capacities > 0 et plafonnées
reconnect attempt/backoff bornés
filter-group count
filter-name length/uniqueness
metadata key/value count/size
account/owner/include/exclude/required counts
memcmp/data slice bounds
Cuckoo dimensions/data bounds
DONE/source+tests ajoutés endpoint schemes http/https validés ; TLS réel reporté pre.003
DONE/source+tests ajoutés endpoint URL, descripteurs et nombre dendpoints plafonnés
DONE/source+tests ajoutés connect timeout > 0 et plafonné
DONE/source+tests ajoutés unary timeout > 0 et plafonné
DONE/source+tests ajoutés close timeout > 0 et plafonné
DONE/source+tests ajoutés max inbound/outbound > 0 et plafonnés
DONE/source+tests ajoutés request/update queue capacities > 0 et plafones
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
TODO pre.005+ account/owner/include/exclude/required counts
TODO pre.004+ memcmp/data slice bounds
TODO pre.005+ Cuckoo dimensions/data bounds
```
Security canaries :
```text
endpoint URL Debug redacted
secret metadata Debug/Display absent
Status message/details distants non recopiés aveuglément en context
TLS/connect error sans credential/URI sensible
request/update Debug sans payload arbitraire sensible
snapshot sans endpoint secret ni remote internals inutiles
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
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
```
## 11. Lifecycle / backpressure / replay
@@ -397,7 +402,7 @@ Les autres providers restent en TODO/IDEAS sans release dédiée. Aucune façade
```text
pre.001 DONE audit/sizing/architecture 1520 min nominal
pre.002 TODO moteur: deps/settings/errors/channel 1520 min
pre.002 IMPLEMENTED / CARGO GATE moteur: deps/settings/errors/channel 1520 min
pre.003 TODO moteur: TLS/metadata + fixture + 7 unary 1520 min
pre.004 TODO standard: Subscribe common/from_slot/bounds 1520 min
pre.005 TODO standard: accounts + slots 1520 min
@@ -440,3 +445,26 @@ Gate de sizing : une prerelease estimée à plus de 20 minutes est scindée ; si
| aucune implémentation lourde prématurée | PASS |
**Verdict `pre.001` : gate positif ; `pre.002` peut matérialiser la stratégie B sous validation Cargo.**
## 17. Gate `pre.002`
| Critère de tranche | Verdict local |
|---------------------------------------------------------|------------------------------------------------|
| workspace version `0.2.9-pre.2` | PASS source |
| stratégie B matérialisée sans `yellowstone-grpc-client` | PASS source |
| proto `12.6` sans default/features KSP | PASS manifest |
| Tonic `0.14` limité à `channel` | PASS manifest |
| aucun Config/env dans Transport gRPC | PASS source/audit |
| aucun couplage WebSocket | PASS source |
| settings runtime bornés | PASS source/tests ajoutés |
| URL/channel diagnostics redacted | PASS source/tests ajoutés |
| channel Tonic lazy privé | PASS source/API canary ajouté |
| raw Tonic/Yellowstone absent de l'API publique | PASS source/API canary ajouté |
| audit `scripts/audit_rust_workspace_rules.py` | PASS / clean |
| `cargo fmt --all` | PENDING opérateur |
| `cargo check --workspace` | PENDING opérateur |
| `cargo clippy --workspace --all-targets` | PENDING opérateur |
| tests Transport/Core/workspace | PENDING opérateur |
| `cargo tree` direct/duplicates | PENDING opérateur |
**Verdict `pre.002` local : implémentation candidate prête pour validation opérateur. La tranche n'est déclarée fermée qu'après les gates Cargo réels.**