v0.2.8-pre.007
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md -->
|
||||
<!-- version: 16 -->
|
||||
<!-- version: 17 -->
|
||||
|
||||
# Plan `0.2.8` — Helius LaserStream WebSocket
|
||||
|
||||
> **Statut : `pre.005` + `fix.001` + `fix.002` sont validés sans warning. `0.2.8-pre.006` prépare maintenant le handle live Helius `transactionSubscribe`, le décodage `transactionNotification` et son intégration au registry/reconnect/backpressure de l'actor WebSocket unique.**
|
||||
> **Statut : `0.2.8-pre.006` est validé intégralement. `0.2.8-pre.007` prépare maintenant le heartbeat Helius LaserStream WebSocket provider-owned dans l'actor physique unique : Ping control frame à 60 s, timer uniquement en `Active`, réarmement après reconnect et arrêt immédiat au shutdown.**
|
||||
|
||||
## 1. Objet, base et état courant
|
||||
|
||||
@@ -33,10 +33,11 @@ pre.004-fix.002 provenance composée validée
|
||||
pre.005 contrat typed transactionSubscribe/unsubscribe validé
|
||||
pre.005-fix.001 correction types de canaris + visibilité/tests/règles validée
|
||||
pre.005-fix.002 suppression warnings dead_code via cfg(test) validée
|
||||
pre.006 transactionNotification + lifecycle actor préparé
|
||||
pre.006 transactionNotification + lifecycle actor validé
|
||||
pre.007 heartbeat Helius WebSocket / idle préparé
|
||||
|
||||
workspace.package.version courant = 0.2.8-pre.6
|
||||
commit attendu = v0.2.8-pre.006
|
||||
workspace.package.version courant = 0.2.8-pre.7
|
||||
commit attendu = v0.2.8-pre.007
|
||||
aucun tag prerelease
|
||||
```
|
||||
|
||||
@@ -64,9 +65,9 @@ pre.005 DONE — transactionSubscribe request typed + filters/options/tokenAcco
|
||||
+ bounds 50k + maxSupportedTransactionVersion conditionnel ; live handle différé à pre.006
|
||||
fix.001 DONE — assertions Vec<Value>/Value corrigées + helpers test-only privés + audit super/crate durci
|
||||
fix.002 DONE — helpers wire non consommés en production bornés à #[cfg(test)] ; zéro warning dead_code
|
||||
pre.006 PREPARED — transactionNotification + handle live + actor registry/reconnect/resubscribe/unsubscribe races
|
||||
pre.006 DONE — transactionNotification + handle live + actor registry/reconnect/resubscribe/unsubscribe races
|
||||
+ late notifications + backpressure ciblée, sans second actor/socket
|
||||
pre.007 heartbeat Helius WebSocket/idle + timers + interaction reconnect/control frames/shutdown
|
||||
pre.007 PREPARED — heartbeat Helius WebSocket/idle + timers + interaction reconnect/control frames/shutdown
|
||||
pre.008 provider adversarial lifecycle + capability guards + payload/backpressure + security/redaction
|
||||
pre.009 compliance Helius WebSocket + non-régressions Solana standard 18/18 + HTTP 52/14
|
||||
+ Config/API/dependency-firewall canaries
|
||||
@@ -1079,3 +1080,61 @@ Les canaris locaux `pre.006` doivent prouver ensemble :
|
||||
```
|
||||
|
||||
Hors scope inchangé : heartbeat/idle (`pre.007`), adversarial provider/security élargi (`pre.008`), smoke Helius live (`pre.010`) et LaserStream gRPC.
|
||||
|
||||
## 15. Fermeture `pre.006` et préparation `pre.007`
|
||||
|
||||
Checkpoint opérateur `0.2.8-pre.006` reçu le 2026-08-23 :
|
||||
|
||||
```text
|
||||
[x] cargo fmt --all
|
||||
[x] python3 scripts/audit_rust_workspace_rules.py = clean
|
||||
[x] cargo check --workspace = sans warning
|
||||
[x] cargo clippy --workspace --all-targets = sans warning
|
||||
[x] cargo test -p ksp-onchain-transport-lib = 325 unit + 40 public API + 28 completeness + 4 doctests
|
||||
[x] cargo test --workspace = vert
|
||||
```
|
||||
|
||||
Le lifecycle Helius transaction est donc fermé : `transactionNotification`, handle live, remap remote ID, resubscribe, unsubscribe tardif et backpressure ciblée sont acquis sans second actor/socket.
|
||||
|
||||
`pre.007` n'ajoute aucune surface publique générique de heartbeat. La policy reste possédée par le protocole Helius LaserStream WebSocket dans `WsSession` :
|
||||
|
||||
```text
|
||||
protocole actif WsProtocolKind::HeliusLaserStream uniquement
|
||||
intervalle nominal 60 s
|
||||
wire WebSocket Ping control frame vide
|
||||
état d'émission Active uniquement
|
||||
succès prochain deadline = now + 60 s
|
||||
reconnect réussi deadline réarmé depuis la nouvelle connexion
|
||||
write timeout/failure WsActorIoOutcome::Failed -> reconnect borné existant
|
||||
close/shutdown branche shutdown prioritaire, timer abandonné
|
||||
SolanaStandard aucun heartbeat provider
|
||||
```
|
||||
|
||||
Aucun champ `heartbeat_*` n'est ajouté à `WsSessionSettings` ou Config en `0.2.8`. La cadence Helius est une policy interne provider-owned, comme décidé à l'audit d'ouverture.
|
||||
|
||||
Pour rendre les canaris de timer déterministes sans réduire la cadence de production, `tokio` active uniquement la feature de dev/test `test-util`; aucune nouvelle dépendance runtime n'est ajoutée.
|
||||
|
||||
Canaris locaux `pre.007` préparés :
|
||||
|
||||
```text
|
||||
[ ] policy Helius-only + intervalle exact 60 s
|
||||
[ ] premier Ping après 60 s, puis réarmement périodique
|
||||
[ ] SolanaStandard n'émet aucun Ping provider même après plusieurs intervalles
|
||||
[ ] close avant deadline n'émet aucun heartbeat
|
||||
[ ] write failure du Ping produit le même outcome Failed utilisé par le reconnect
|
||||
[ ] reconnect réussi réarme le heartbeat depuis la nouvelle connexion, sans Ping immédiat
|
||||
[ ] shutdown/backoff existant reste interruptible
|
||||
[ ] aucune modification du lifecycle transaction pre.006
|
||||
```
|
||||
|
||||
Comptages attendus après ajout des canaris :
|
||||
|
||||
```text
|
||||
Transport unit 331
|
||||
Transport public API 40
|
||||
release completeness 29
|
||||
doctests compile-fail 4
|
||||
```
|
||||
|
||||
Le heartbeat Helius reste un mécanisme de maintien de connexion ; il n'introduit aucune promesse de replay WebSocket ni de livraison lossless.
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
# Validation `0.2.8` — Helius LaserStream WebSocket
|
||||
|
||||
> **Statut : `pre.005` + ses deux fixes sont validés sans warning. `pre.006` est préparé avec `transactionNotification`, handle live, remap reconnect, late-notification handling et backpressure ciblée sur l'actor WebSocket unique.**
|
||||
> **Statut : `pre.006` est validé intégralement. `pre.007` est préparé pour le heartbeat Helius LaserStream WebSocket provider-owned : Ping control frame à 60 s uniquement en `Active`, réarmé après reconnect et interrompu par close/shutdown.**
|
||||
|
||||
## 1. Références
|
||||
|
||||
@@ -137,7 +137,7 @@ Verdict : **gate `0.2.8-pre.001` positif ; `pre.002` + `fix.001` et `pre.003` so
|
||||
|
||||
### 4.2 Invariants architecture
|
||||
|
||||
| Critère | Décision | Preuve cible | État |
|
||||
| Critère | Décision | Preuve cible | État |
|
||||
|-------------------------------------|------------------------------------------------------------------|---------------------------------|--------------------|
|
||||
| actor physique | un seul `WsSession` actor partagé | source/runtime canary | pre.002 implémenté |
|
||||
| façade standard | `SolanaStandardWsSession` | public API canary | pre.002 implémenté |
|
||||
@@ -212,19 +212,19 @@ aucun payload brut dans logs/snapshots
|
||||
[x] 6 familles standard Helius utilisent le wire standard exact — fixture `pre.003` opérateur verte
|
||||
[x] transaction subscribe/ack exact — fixture `pre.005` validée puis consommée par le handle live `pre.006`
|
||||
[x] transaction unsubscribe/result exact — fixture `pre.005` validée puis registry actor `pre.006`
|
||||
[ ] transaction notification dispatch exact — canari `pre.006` préparé
|
||||
[x] transaction notification dispatch exact — canari `pre.006` opérateur vert
|
||||
[ ] notification decode failure isole la logical subscription
|
||||
[ ] provider RPC application error ne tue pas la session
|
||||
[ ] late notification après unsubscribe ne réactive rien — canari `pre.006` préparé
|
||||
[ ] reconnect invalide/remappe remote ids — canari `pre.006` 41 -> 99 préparé
|
||||
[ ] resubscribe garde local id — canari `pre.006` préparé
|
||||
[x] late notification après unsubscribe ne réactive rien — canari `pre.006` opérateur vert
|
||||
[x] reconnect invalide/remappe remote ids — canari `pre.006` 41 -> 99 opérateur vert
|
||||
[x] resubscribe garde local id — canari `pre.006` opérateur vert
|
||||
[ ] unsubscribe pendant reconnect gagne
|
||||
[ ] heartbeat n'écrit qu'en Active
|
||||
[ ] heartbeat est annulé au close
|
||||
[ ] heartbeat write failure suit reconnect borné
|
||||
[ ] shutdown interrompt heartbeat/backoff
|
||||
[ ] oversized inbound frame reste borné
|
||||
[ ] queue overflow d'une transaction subscription n'affecte pas les autres — canari transaction + root `pre.006` préparé
|
||||
[x] queue overflow d'une transaction subscription n'affecte pas les autres — canari transaction + root `pre.006` opérateur vert
|
||||
[ ] payload/filters/api-key absents de Debug/snapshots sûrs
|
||||
```
|
||||
|
||||
@@ -571,3 +571,61 @@ Gate opérateur `pre.006` :
|
||||
Comptages attendus si les nouveaux canaris passent : **325 tests unitaires Transport**, **40 public API**, **28 release-completeness**, **4 doctests compile-fail**.
|
||||
|
||||
Verdict courant : **`pre.006` PREPARED.**
|
||||
|
||||
## 17. Gate `pre.006` fermé et préparation `pre.007`
|
||||
|
||||
Checkpoint opérateur `pre.006` :
|
||||
|
||||
```text
|
||||
[x] cargo fmt --all
|
||||
[x] python3 scripts/audit_rust_workspace_rules.py = clean
|
||||
[x] cargo check --workspace = sans warning
|
||||
[x] cargo clippy --workspace --all-targets = sans warning
|
||||
[x] cargo test -p ksp-onchain-transport-lib = 325 unit + 40 public API + 28 completeness + 4 doctests
|
||||
[x] cargo test --workspace = vert
|
||||
```
|
||||
|
||||
Preuves lifecycle désormais acquises :
|
||||
|
||||
```text
|
||||
[x] WsSubscriptionKind::HeliusTransaction possède le triplet exact
|
||||
[x] HeliusLaserStreamWsSession::transaction_subscribe retourne le handle live typed
|
||||
[x] notification Full / Signature / Unknown décodées
|
||||
[x] local WsSubscriptionId stable après reconnect
|
||||
[x] remote id remappé
|
||||
[x] late notification après unsubscribe ignorée
|
||||
[x] overflow transaction isole uniquement le handle lent
|
||||
[x] cleanup overflow utilise transactionUnsubscribe
|
||||
[x] une souscription Helius root saine reste active
|
||||
[x] aucun second actor/socket/registry
|
||||
[x] quatre compile-fail Helius restent verts
|
||||
```
|
||||
|
||||
Gate préparé pour `pre.007` :
|
||||
|
||||
```text
|
||||
[ ] heartbeat activé uniquement pour WsProtocolKind::HeliusLaserStream
|
||||
[ ] intervalle provider-owned exactement 60 s
|
||||
[ ] heartbeat utilise WebSocket Ping control frame, pas un JSON-RPC provider method
|
||||
[ ] aucun heartbeat provider sur SolanaStandard
|
||||
[ ] heartbeat n'écrit qu'en état Active
|
||||
[ ] succès réarme le prochain deadline à now + 60 s
|
||||
[ ] reconnect réussi réarme le deadline depuis la nouvelle connexion
|
||||
[ ] write timeout/failure suit le chemin Failed -> reconnect existant
|
||||
[ ] close avant deadline annule le heartbeat
|
||||
[ ] shutdown reste prioritaire sur le heartbeat
|
||||
[ ] aucun champ heartbeat public ajouté à WsSessionSettings
|
||||
[ ] aucune configuration/env supplémentaire
|
||||
[ ] aucune régression transactionSubscribe/transactionNotification de pre.006
|
||||
[ ] cargo fmt --all
|
||||
[ ] python3 scripts/audit_rust_workspace_rules.py = clean
|
||||
[ ] cargo check --workspace = sans warning
|
||||
[ ] cargo clippy --workspace --all-targets = sans warning
|
||||
[ ] cargo test -p ksp-onchain-transport-lib = 331 unit + 40 public API + 29 completeness + 4 doctests attendus
|
||||
[ ] cargo test --workspace = vert
|
||||
```
|
||||
|
||||
Le `test-util` Tokio ajouté côté dev sert uniquement à avancer l'horloge des canaris déterministes ; la cadence runtime reste 60 s et aucune nouvelle dépendance de production n'est introduite.
|
||||
|
||||
Verdict courant : **`pre.006` DONE ; `pre.007` PREPARED.**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user