v0.2.8-pre.007

This commit is contained in:
2026-08-23 16:05:41 +02:00
parent 1c8d69778b
commit 56b9ce6abc
8 changed files with 654 additions and 23 deletions

View File

@@ -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.