v0.2.7-pre.010

This commit is contained in:
2026-08-23 00:12:39 +02:00
parent 98bf88e431
commit 1391858972
14 changed files with 838 additions and 29 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md -->
<!-- version: 11 -->
<!-- version: 12 -->
# Plan `0.2.7` — WebSocket Solana standard
@@ -810,6 +810,32 @@ Les wrappers publics sont `WsSession::account_subscribe`, `WsSession::program_su
La forme `Mentions(Pubkey)` rend la cardinalité `mentions == 1` vraie par construction. Les contraintes déterministes déjà retenues pour les filtres programme sont conservées côté WS : maximum quatre filtres et maximum 128 octets pour la variante raw `Bytes` de `memcmp`; les formes encodées restent laissées au runtime upstream comme sur la surface HTTP existante.
### 16.2 Checkpoint wrappers stables lot B `pre.010`
Le second lot stable conserve les formes wire restantes sans introduire les familles unstable :
```text
signatureSubscribe
signature opaque en première position
commitment optionnel via le type SolanaCommitment partagé
enableReceivedNotification omitted/false/true
notification = RpcResponse<receivedSignature OU { err: null | transaction error }>
receivedSignature = précoce, non terminal
{ err: ... } = terminal, fermeture locale normale, jamais resubscribe
slotSubscribe
aucun paramètre
notification = { slot, parent, root }
rootSubscribe
aucun paramètre
notification = root u64
```
Le moteur typed acquiert une classification interne `DeliveredTerminal` utilisée par `signatureSubscribe` uniquement lorsque la notification `Processed` a déjà été livrée au consumer. L'actor retire alors immédiatement la subscription du registry et du mapping remote/local, publie `Closed` sans code d'erreur et ne tente pas de `signatureUnsubscribe`, puisque le serveur Solana annule lui-même cette subscription one-shot après la notification terminale.
La variante précoce `receivedSignature` ne ferme pas la subscription. Une cancellation explicite avant la notification terminale continue d'utiliser le chemin générique `WsSubscription::unsubscribe()` et préserve le booléen `signatureUnsubscribe`. Les subscriptions `slot` et `root` restent continues et réutilisent sans branche spéciale le reconnect/resubscribe déterministe acquis en `pre.007`.
## 17. API générique provider-specific
Le moteur interne doit encoder une spec générique `subscribe_method + unsubscribe_method + params + decoder`, afin qu'une release provider-specific puisse réutiliser la session.
@@ -918,7 +944,7 @@ pre.006 DONE — registry subscriptions + IDs locaux + generic subscribe/unsubs
pre.007 DONE — reconnect borné + resubscribe déterministe + continuity gap + races unsubscribe/reconnect
pre.008 DONE — backpressure per-sub + overflow/limits + causes terminales sûres + leak/lifecycle adversarial tests
pre.009 DONE — 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
pre.010 DONE — wrappers stable lot B : signature + slot + root, terminaison signature/KSP-TRANSPORT-007
pre.011 unstable : block + slotsUpdates + vote, warnings + fallbacks wire/KSP-TRANSPORT-007
pre.012 compliance 18/18 + canaries public API + composition Config + régressions HTTP
pre.013 smoke live opt-in + README/USAGE + cargo tree/duplicates + dependency audit final