v0.2.7-pre.012

This commit is contained in:
2026-08-23 09:40:44 +02:00
parent 66deaf8245
commit 628b4f12f2
7 changed files with 229 additions and 15 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md -->
<!-- version: 13 -->
<!-- version: 14 -->
# Plan `0.2.7` — WebSocket Solana standard
@@ -932,6 +932,21 @@ public raw provider-extension API -> gate 0.2.8
application heartbeat/ping périodique -> différé sans besoin démontré
```
## 21.1 Checkpoint compliance `pre.012`
La tranche `pre.012` ne crée pas de dixième famille et ne modifie pas le runtime actor. Elle consolide la release autour de quatre preuves :
```text
WebSocket inventory -> 9 familles publiques x subscribe/unsubscribe = 18 opérations standard
public API -> 9 wrappers subscribe + handle unsubscribe accessibles depuis la crate root
Config composition -> V2 -> WsTransportSettings -> WsEndpointSettings accepté par WsSession::connect
HTTP regression -> 52 current Supported + 14 historical Removed inchangés
```
Les noms JSON-RPC exacts restent verrouillés par le canari interne `websocket_subscription_kinds_map_exact_standard_method_triplets`; la partition unstable reste verrouillée séparément à `block`, `slotsUpdates`, `vote`. `pre.012` ajoute un canari de release qui compte les neuf paires et un canari public qui adresse les neuf wrappers sans exposer de primitive raw arbitraire.
La preuve Config -> session est volontairement déterministe : le future de connexion est construit à partir d'un `WsEndpointSettings` issu du document V2 committed sans polling. Aucun réseau réel n'est donc nécessaire ; le smoke live reste dans `pre.013`.
## 22. Forecast recalibré
L'inventaire officiel n'impose que 9 familles de subscriptions, mais le lifecycle concurrent est plus coûteux que le forecast initial. Le gate reste **positif sans split de release**, à condition de granulariser les tranches au lieu de compresser le moteur et les wrappers.
@@ -948,7 +963,7 @@ pre.008 DONE — backpressure per-sub + overflow/limits + causes terminales sû
pre.009 DONE — wrappers stable lot A : account + program + logs, DTOs/options/KSP-TRANSPORT-007
pre.010 DONE — wrappers stable lot B : signature + slot + root, terminaison signature/KSP-TRANSPORT-007
pre.011 DONE — unstable : block + slotsUpdates + vote, warnings + fallbacks wire/KSP-TRANSPORT-007
pre.012 compliance 18/18 + canaries public API + composition Config + régressions HTTP
pre.012 DONE — 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
pre.014 validation workspace finale + docs/compliance + prompt 0.2.8
rel.001 publication stable stricte

View File

@@ -1,9 +1,9 @@
<!-- file: docs/validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md -->
<!-- version: 13 -->
<!-- version: 14 -->
# Validation `0.2.7` — WebSocket Solana standard
> **Statut : matrice active, `0.2.7-pre.010`.** Settings/lifecycle `pre.002`, Config V2 `pre.003`, session physique `pre.004`, durcissement `pre.005`, registry `pre.006`, reconnect/resubscribe `pre.007`, backpressure `pre.008` et les six familles stables des lots `pre.009``pre.010` sont matérialisés. Les trois familles unstable restent ouvertes pour `pre.011`.
> **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.
## 1. Baseline normative
@@ -410,7 +410,6 @@ snapshot -> local IDs + remote_bound uniquement
Le registry est détenu par le même actor que le socket et la pending map JSON-RPC. Aucun caller ne manipule le socket ni le remote ID. Les wrappers publics `accountSubscribe`, `programSubscribe`, etc. restent volontairement différés aux lots `pre.009+` afin de ne pas exposer une API raw provider-extension intermédiaire.
## 9.5 Checkpoint reconnect/resubscribe `pre.007`
Surface matérialisée :
@@ -609,6 +608,40 @@ Transport public API tests = 35
release completeness = 22
```
## 9.10 Checkpoint compliance consolidée `pre.012`
`pre.012` n'ajoute aucune nouvelle famille WebSocket. Il transforme les preuves acquises de `pre.002` à `pre.011` en gates de release explicites et vérifie simultanément que la surface HTTP héritée reste intacte.
Le réaudit de l'index public Solana effectué le **23 août 2026** confirme que la surface courante reste inchangée à 9 subscribe + 9 unsubscribe.
Gates ajoutés ou consolidés :
```text
9 WsSubscriptionKind publics exactement couverts
9 wrappers subscribe publics disponibles depuis la crate root
1 handle WsSubscription<T>::unsubscribe commun aux 9 familles
9 paires subscribe/unsubscribe = 18 opérations standard comptabilisées
triplets exacts subscribe/unsubscribe/notification toujours verrouillés par le canari ws_lifecycle
partition unstable exacte toujours verrouillée : block + slotsUpdates + vote
Config V2 committed -> ResolvedTransportConfig -> WsTransportSettings validé
WsEndpointSettings produit par Config -> type accepté directement par WsSession::connect
Config V1 -> HTTP-only reste couvert par le checkpoint pre.003
HTTP courant -> 52 méthodes Supported
HTTP historique -> 14 méthodes Removed
surface API publique WebSocket complète -> canari crate-root dédié
```
La composition Config est testée sans réseau : l'async future `WsSession::connect` est construite à partir de l'endpoint produit par Config et laissée non pollée jusqu'à sa destruction en fin de portée. Le gate vérifie donc la compatibilité de types et de contrats entre Config et Transport sans transformer `pre.012` en smoke live ; le vrai smoke reste réservé à `pre.013`.
Comptages attendus après compilation :
```text
Transport unit tests = 309
Transport public API tests = 36
Transport release completeness = 24
Config unit tests = 109
```
## 10. Validation du gate `pre.001`
Exécuté dans le sandbox :
@@ -645,16 +678,16 @@ La matrice ne considère donc pas `pre.001` techniquement validé par Cargo tant
Avant `rel.001`, cette matrice doit obtenir :
```text
18/18 méthodes official-index accounted
9/9 subscribe wrappers public typed
9/9 unsubscribe couverts par handles/registry
18/18 méthodes official-index accounted (**Done `pre.012`**)
9/9 subscribe wrappers public typed (**Done `pre.012`**)
9/9 unsubscribe couverts par handles/registry (**Done `pre.012`**)
0 option officielle perdue
0 fuite URL/credential
N sessions same URL prouvé
N subscriptions same session prouvé
reconnect/resubscribe/backpressure/shutdown gates verts
unstable warnings centralisés
HTTP 52+14 non régressé
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é