v0.2.7-pre.013
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md -->
|
||||
<!-- version: 14 -->
|
||||
<!-- version: 15 -->
|
||||
|
||||
# Validation `0.2.7` — WebSocket Solana standard
|
||||
|
||||
> **Statut : matrice active, `0.2.7-pre.012`.** Les 9 familles standard et leurs 9 opérations unsubscribe sont matérialisées. `pre.012` consolide la compliance 18/18, la surface publique, la composition Config V2 -> Transport et la non-régression HTTP avant le smoke/audit de dépendances final.
|
||||
> **Statut : matrice active, `0.2.7-pre.013`.** La compliance 18/18 est acquise. `pre.013` ajoute le smoke WebSocket Devnet opt-in, synchronise README/USAGE et renforce le gate de dépendances avant la validation workspace finale.
|
||||
|
||||
## 1. Baseline normative
|
||||
|
||||
@@ -206,33 +206,35 @@ Les votes observés sont gossip/pre-consensus ; aucune garantie d'entrée dans l
|
||||
|
||||
## 7. Threat/security compliance initiale
|
||||
|
||||
| Invariant | Preuve attendue | Statut |
|
||||
|---------------------------------------------------|----------------------------------------------|------------------------------------------|
|
||||
| URL/credentials absents de `Debug` | unit tests URL wrapper | **Done `pre.002`** |
|
||||
| URL/credentials absents des erreurs | validation URL + connection errors safe | **Done through `pre.004`** |
|
||||
| URL/credentials absents des logs | actor logs only safe endpoint metadata | Partial `pre.004`, capture finale future |
|
||||
| snapshots sans URL/raw payload | unit shape + public contract | **Done `pre.002`** |
|
||||
| frame/message finis | settings bornés + `WebSocketConfig` raccordé | **Done `pre.005`** |
|
||||
| JSON borné indirectement par message | oversized + malformed fixture | **Done `pre.005`** |
|
||||
| queues notifications bornées | queue typed bornée + overflow isolé | **Done `pre.008`** |
|
||||
| pending RPC borné + timeout | map actor bornée + timeout request | **Done `pre.004`** |
|
||||
| reconnect loop bornée | repeated disconnect fixture | Done `pre.007` |
|
||||
| unsubscribe pendant reconnect ne resubscribe pas | race fixture | Done `pre.007` |
|
||||
| signature terminale ne resubscribe pas | terminal fixture | Planned |
|
||||
| shutdown ne bloque pas | peer hostile/no close ack fixture | **Done `pre.005`** |
|
||||
| no Store/Program/Wallet/Config dep dans Transport | cargo tree + source canary | Planned |
|
||||
| no direct `tracing` dans Transport | workspace audit + source audit | **Done `pre.002`** |
|
||||
| Invariant | Preuve attendue | Statut |
|
||||
|---------------------------------------------------|----------------------------------------------|--------------------------------------------------------|
|
||||
| URL/credentials absents de `Debug` | unit tests URL wrapper | **Done `pre.002`** |
|
||||
| URL/credentials absents des erreurs | validation URL + connection errors safe | **Done through `pre.004`** |
|
||||
| URL/credentials absents des logs | actor logs only safe endpoint metadata | **Done through `pre.011`, source audit `pre.013`** |
|
||||
| snapshots sans URL/raw payload | unit shape + public contract | **Done `pre.002`** |
|
||||
| frame/message finis | settings bornés + `WebSocketConfig` raccordé | **Done `pre.005`** |
|
||||
| JSON borné indirectement par message | oversized + malformed fixture | **Done `pre.005`** |
|
||||
| queues notifications bornées | queue typed bornée + overflow isolé | **Done `pre.008`** |
|
||||
| pending RPC borné + timeout | map actor bornée + timeout request | **Done `pre.004`** |
|
||||
| reconnect loop bornée | repeated disconnect fixture | Done `pre.007` |
|
||||
| unsubscribe pendant reconnect ne resubscribe pas | race fixture | Done `pre.007` |
|
||||
| signature terminale ne resubscribe pas | terminal fixture | **Done `pre.010`** |
|
||||
| shutdown ne bloque pas | peer hostile/no close ack fixture | **Done `pre.005`** |
|
||||
| no Store/Program/Wallet/Config dep dans Transport | cargo tree + source canary | **Source gate `pre.013`, cargo tree opérateur requis** |
|
||||
| no direct `tracing` dans Transport | workspace audit + source audit | **Done `pre.002`** |
|
||||
|
||||
## 8. Dependency compliance initiale
|
||||
|
||||
Candidate retenue au gate :
|
||||
Candidates auditées à l'ouverture de release :
|
||||
|
||||
```text
|
||||
tokio-tungstenite 0.30.0
|
||||
futures-util 0.3.34
|
||||
tokio-tungstenite 0.30.x
|
||||
futures-util 0.3.x
|
||||
```
|
||||
|
||||
Features prévues :
|
||||
Le workspace conserve des contraintes caret `^0.30` et `^0.3` sans lockfile versionné. La version transitive effectivement résolue n'est donc pas figée dans cette matrice ; `pre.013` exige l'inspection du `cargo tree` opérateur correspondant au checkout validé.
|
||||
|
||||
Features retenues :
|
||||
|
||||
```text
|
||||
tokio-tungstenite: default-features=false + connect + rustls-tls-webpki-roots
|
||||
@@ -642,6 +644,50 @@ Transport release completeness = 24
|
||||
Config unit tests = 109
|
||||
```
|
||||
|
||||
## 9.11 Checkpoint smoke live et audit de dépendances `pre.013`
|
||||
|
||||
Le smoke WebSocket live retenu est un test Transport pur `#[ignore]` qui ne lit ni Config ni environnement :
|
||||
|
||||
```text
|
||||
endpoint programmatique wss://api.devnet.solana.com
|
||||
WsSession::connect
|
||||
slotSubscribe stable
|
||||
attente bornée d'une slotNotification
|
||||
slot > 0
|
||||
slotUnsubscribe via handle
|
||||
close explicite de la session
|
||||
```
|
||||
|
||||
Les familles `block`, `slotsUpdates` et `vote` ne sont pas utilisées dans ce smoke car leur disponibilité dépend de capabilities validator unstable. Les fixtures locales restent les preuves reproductibles de ces familles et du lifecycle.
|
||||
|
||||
Le canari workspace de dépendances verrouille désormais les noms directs de Transport :
|
||||
|
||||
```text
|
||||
runtime : futures-util, ksp-core-lib, ksp-logging-lib, reqwest, serde, serde_json, tokio, tokio-tungstenite
|
||||
dev : tokio
|
||||
```
|
||||
|
||||
Il complète le firewall existant contre Config/Store/Program/tracing direct. L'inspection du graphe résolu reste une preuve opérateur avec :
|
||||
|
||||
```bash
|
||||
cargo tree -p ksp-onchain-transport-lib
|
||||
cargo tree -p ksp-onchain-transport-lib --duplicates
|
||||
cargo tree --duplicates
|
||||
```
|
||||
|
||||
Une duplication transitive n'est pas considérée automatiquement comme un défaut : elle doit être comprise et n'est supprimée que si KSP peut la résoudre sans downgrade, pin artificiel ou violation des responsabilités upstream.
|
||||
|
||||
Comptages déterministes attendus inchangés côté Transport, plus un smoke live ignoré et un canari workspace supplémentaire dans Core :
|
||||
|
||||
```text
|
||||
Transport unit tests = 309
|
||||
Transport public API tests = 36
|
||||
Transport release completeness = 24
|
||||
Transport WebSocket live smoke = 1 ignored par défaut
|
||||
Config unit tests = 109
|
||||
Core workspace dependency tests = 3
|
||||
```
|
||||
|
||||
## 10. Validation du gate `pre.001`
|
||||
|
||||
Exécuté dans le sandbox :
|
||||
@@ -689,9 +735,9 @@ reconnect/resubscribe/backpressure/shutdown gates verts
|
||||
unstable warnings centralisés
|
||||
HTTP 52+14 non régressé (**Done `pre.012`**)
|
||||
Config V1 backward + V2 WS validés (**Done `pre.003`**, compilation opérateur requise)
|
||||
smoke live opt-in documenté
|
||||
cargo tree inspecté
|
||||
smoke live opt-in documenté (**Done `pre.013`**)
|
||||
cargo tree inspecté (**preuve opérateur `pre.013` requise**)
|
||||
cargo test --workspace vert
|
||||
README/USAGE synchronisés
|
||||
README/USAGE synchronisés (**Done `pre.013`**)
|
||||
prompt 0.2.8 préparé
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user