v0.2.7-pre.007

This commit is contained in:
2026-08-22 20:42:06 +02:00
parent 435126f67a
commit b67fa89f44
11 changed files with 1352 additions and 112 deletions

View File

@@ -1,9 +1,9 @@
<!-- file: docs/plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md -->
<!-- version: 8 -->
<!-- version: 9 -->
# Plan `0.2.7` — WebSocket Solana standard
> **Statut : actif, `0.2.7-pre.005`.** `pre.004-fix.001` est validé opérateur. `pre.005` durcit la session physique avec limites adversariales, control frames, purge des pending requests et shutdown explicite borné. Les subscriptions typed restent différées.
> **Statut : actif, `0.2.7-pre.007`.** `pre.006-fix.001` est validé opérateur. `pre.007` active le reconnect borné, le resubscribe déterministe, le compteur de continuity gaps et les races unsubscribe/reconnect. Les wrappers typed publics restent différés.
## 1. Objet et base vérifiée
@@ -490,6 +490,8 @@ Le handle public `WsSession` communique avec cet actor par canal bounded. Aucun
`pre.006` matérialise le registry dans ce même actor. L'ACK `*Subscribe` lie atomiquement le remote ID au `WsSubscriptionId` local avant le dispatch des notifications suivantes. La création générique typed reste crate-private ; `WsSubscription<T>` devient le handle public commun pour `id/state/recv/unsubscribe`. Les channels de notification sont bornés et typed via un dispatcher actor type-erased. Les remote IDs restent absents de l'API publique et des snapshots.
`pre.007` active la résilience physique déjà paramétrée par `WsSessionSettings`. Une perte I/O, EOF, Close distant inattendu ou violation protocolaire structurelle invalide les remote IDs et incrémente `continuity_gap_count`. Le reconnect utilise un nombre fini d'essais, un backoff exponentiel borné sans jitter et surveille le shutdown pendant backoff et handshake. Avec `ActiveSubscriptions`, les subscriptions encore désirées sont remises en `Resubscribing` puis restaurées séquentiellement par `WsSubscriptionId` croissant avant le retour complet à `Active`; avec `Never`, elles deviennent terminales sans empêcher la reconnexion physique. La cancellation locale gagne pendant reconnect et un ACK tardif déclenche un unsubscribe distant best-effort sans réactivation locale.
### 9.4 Identités
```text
@@ -879,7 +881,7 @@ pre.003 DONE — std.transport V2 HTTP+WS + backward V1 + discriminateur WS + s
pre.004 DONE — deps tokio-tungstenite/futures-util + actor physique + handshake/read/write + pending JSON-RPC + serveur local
pre.005 DONE — limites frame/message/request + control frames + cancellation/close/shutdown + adversarial socket tests
pre.006 DONE — registry subscriptions + IDs locaux + generic subscribe/unsubscribe engine + channels typed bounded
pre.007 reconnect borné + resubscribe déterministe + continuity gap + races unsubscribe/reconnect
pre.007 DONE — reconnect borné + resubscribe déterministe + continuity gap + races unsubscribe/reconnect
pre.008 backpressure per-sub + overflow/limits + leak/lifecycle adversarial tests
pre.009 wrappers stable lot A : account + program + logs, DTOs/options/KSP-TRANSPORT-007
pre.010 wrappers stable lot B : signature + slot + root, terminaison signature/KSP-TRANSPORT-007