v0.2.8-pre.008
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md -->
|
||||
<!-- version: 21 -->
|
||||
<!-- version: 22 -->
|
||||
|
||||
# Plan `0.2.8` — Helius LaserStream WebSocket
|
||||
|
||||
> **Statut : `0.2.8-pre.007-fix.003` ferme enfin le heartbeat Transport à 331/331, avec fmt/audit/check/Clippy verts. Le workspace révèle toutefois un canari de dépendances devenu obsolète : `ksp-core-lib/tests/workspace_dependencies.rs` attend encore l’ancienne déclaration Tokio dev `net, rt` alors que `pre.007` a ajouté `io-util, test-util` pour les tests d’horloge. `0.2.8-pre.007-fix.004` aligne ce canari workspace sans toucher au runtime heartbeat.**
|
||||
> **Statut : `0.2.8-pre.007-fix.004` est validé intégralement par l’opérateur : fmt/audit/check/Clippy, 331 unit Transport, 40 API, 29 completeness, 4 doctests et workspace complet verts. `0.2.8-pre.008` est préparé pour les guards adversariaux provider, limites/payload, isolation de session et redaction des diagnostics Helius.**
|
||||
|
||||
## 1. Objet, base et état courant
|
||||
|
||||
@@ -34,14 +34,15 @@ 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 validé
|
||||
pre.007 heartbeat Helius WebSocket / idle — checkpoint gate à corriger
|
||||
pre.007-fix.001 lint + close canary corrigés ; un canari périodique reste non déterministe
|
||||
pre.007-fix.002 observation yield-only insuffisante — checkpoint 330/331
|
||||
pre.007-fix.003 heartbeat Transport fermé ; workspace bloqué par canari Tokio dev obsolète
|
||||
pre.007-fix.004 alignement canari dependency-firewall Tokio dev — préparé
|
||||
pre.007 heartbeat Helius WebSocket / idle validé
|
||||
pre.007-fix.001 lint + close canary corrigés
|
||||
pre.007-fix.002 observation yield-only insuffisante — checkpoint historique
|
||||
pre.007-fix.003 heartbeat Transport fermé
|
||||
pre.007-fix.004 alignement canari dependency-firewall Tokio dev validé
|
||||
pre.008 adversarial provider/capabilities/payload/security — préparé
|
||||
|
||||
workspace.package.version courant = 0.2.8-pre.7.fix.4
|
||||
commit attendu = v0.2.8-pre.007-fix.004
|
||||
workspace.package.version courant = 0.2.8-pre.8
|
||||
commit attendu = v0.2.8-pre.008
|
||||
aucun tag prerelease
|
||||
```
|
||||
|
||||
@@ -71,12 +72,12 @@ pre.005 DONE — transactionSubscribe request typed + filters/options/tokenAcco
|
||||
fix.002 DONE — helpers wire non consommés en production bornés à #[cfg(test)] ; zéro warning dead_code
|
||||
pre.006 DONE — transactionNotification + handle live + actor registry/reconnect/resubscribe/unsubscribe races
|
||||
+ late notifications + backpressure ciblée, sans second actor/socket
|
||||
pre.007 FIX REQUIRED — heartbeat Helius WebSocket/idle + timers + interaction reconnect/control frames/shutdown
|
||||
fix.001 CHECKPOINT — lint et close canary corrigés ; 330/331 unit
|
||||
fix.002 CHECKPOINT — observation yield-only insuffisante ; 330/331 unit
|
||||
fix.003 CHECKPOINT — heartbeat Transport fermé à 331/331 ; workspace échoue sur canari Tokio dev obsolète
|
||||
fix.004 PREPARED — alignement exact du dependency-firewall sur `io-util, net, rt, test-util`
|
||||
pre.008 provider adversarial lifecycle + capability guards + payload/backpressure + security/redaction
|
||||
pre.007 DONE — heartbeat Helius WebSocket/idle + timers + interaction reconnect/control frames/shutdown
|
||||
fix.001 DONE — lint et close canary corrigés
|
||||
fix.002 DONE — diagnostic de propagation scheduler établi
|
||||
fix.003 DONE — canari heartbeat périodique stabilisé sans changer le runtime
|
||||
fix.004 DONE — dependency-firewall aligné sur `io-util, net, rt, test-util`
|
||||
pre.008 PREPARED — 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
|
||||
pre.010 smoke Helius WebSocket live opt-in si stratégie sûre + README/USAGE
|
||||
@@ -1314,3 +1315,84 @@ transport_manifest_preserves_ksp_dependency_firewall
|
||||
|
||||
`pre.008` reste bloqué jusqu'au replay workspace vert de `pre.007-fix.004`.
|
||||
|
||||
## 20. Fermeture `pre.007` et préparation `pre.008`
|
||||
|
||||
Checkpoint opérateur `0.2.8-pre.7.fix.4` reçu le 2026-08-23 :
|
||||
|
||||
```text
|
||||
[x] cargo fmt --all
|
||||
[x] python3 scripts/audit_rust_workspace_rules.py = clean / 0 candidate
|
||||
[x] cargo check --workspace = vert, sans warning
|
||||
[x] cargo clippy --workspace --all-targets = vert, sans warning
|
||||
[x] cargo test -p ksp-onchain-transport-lib = 331 unit + 40 API + 29 completeness + 4 doctests
|
||||
[x] cargo test --workspace = vert
|
||||
```
|
||||
|
||||
La tranche heartbeat et ses quatre fixes sont donc fermés. `pre.008` ne rouvre ni cadence, ni Config, ni lifecycle transaction nominal.
|
||||
|
||||
Ré-audit Helius du 2026-08-23 :
|
||||
|
||||
```text
|
||||
transactionSubscribe supporté sur endpoints WSS unifiés mainnet/devnet
|
||||
accountInclude/accountExclude/accountRequired 50 000 adresses max chacune
|
||||
transactionUnsubscribe ID distant numérique + bool de réponse
|
||||
blockSubscribe non supporté Helius
|
||||
slotsUpdatesSubscribe non supporté Helius
|
||||
voteSubscribe non supporté Helius
|
||||
```
|
||||
|
||||
Le runtime partagé possède déjà les mécanismes de bornage : `max_message_size_bytes`, `max_frame_size_bytes`, queues de notifications bornées, reconnect fini, remapping remote/local et isolation de logical subscription. Le travail `pre.008` porte donc principalement sur des canaris adversariaux Helius et sur un défaut de diagnostic identifié pendant la revue : les notifications Helius publiques dérivaient encore `Debug` sur leur payload brut.
|
||||
|
||||
Décisions `pre.008` :
|
||||
|
||||
```text
|
||||
1. HeliusFullTransactionNotification::Debug
|
||||
- transaction brute omise
|
||||
- signature omise
|
||||
- slot/index seulement conservés comme métadonnées sûres
|
||||
|
||||
2. HeliusTransactionSignatureNotification::Debug
|
||||
- signature/memo/err/confirmation value omis
|
||||
- états omitted/null/value seulement pour les champs wire optionnels
|
||||
|
||||
3. HeliusTransactionNotification::Unknown
|
||||
- payload serde_json::Value toujours accessible via la variante
|
||||
- Debug rend uniquement <omitted>
|
||||
|
||||
4. provider JSON-RPC application error
|
||||
- ERROR_CODE_RPC_APPLICATION_ERROR
|
||||
- rpc_code + method sûrs seulement
|
||||
- message/data arbitraires provider absents du KspError
|
||||
- session physique reste Active et accepte une subscription saine ensuite
|
||||
|
||||
5. notification method mismatch
|
||||
- remote ID Helius lié à transactionNotification recevant une autre méthode
|
||||
- seule la logical transaction subscription échoue
|
||||
- cleanup transactionUnsubscribe best-effort
|
||||
- autre subscription saine et session physique restent actives
|
||||
|
||||
6. oversized provider payload
|
||||
- max frame/message partagé appliqué avant JSON provider
|
||||
- reconnect borné du même actor
|
||||
- connexion de remplacement reste utilisable
|
||||
|
||||
7. capability inverse
|
||||
- Helius garde compile-fail block/slotsUpdates/vote
|
||||
- SolanaStandard ajoute compile-fail transactionSubscribe
|
||||
```
|
||||
|
||||
Aucune nouvelle dépendance, aucun nouveau socket/actor, aucune extension Config, aucune lecture d'environnement Transport. Les garanties `pre.006` de queue overflow transaction + root restent la preuve provider-specific de backpressure ciblée ; `pre.008` ne duplique pas ce test inutilement.
|
||||
|
||||
Gate attendu après application :
|
||||
|
||||
```text
|
||||
Transport unit 335
|
||||
Transport public API 40
|
||||
release completeness 30
|
||||
Transport doctests 5
|
||||
workspace vert
|
||||
warnings 0
|
||||
```
|
||||
|
||||
`pre.009` reste bloqué jusqu'au replay intégralement vert de `pre.008`.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md -->
|
||||
<!-- version: 20 -->
|
||||
<!-- version: 21 -->
|
||||
|
||||
# Validation `0.2.8` — Helius LaserStream WebSocket
|
||||
|
||||
@@ -838,3 +838,59 @@ Critères `pre.007-fix.004` :
|
||||
|
||||
Verdict courant : **`pre.007` FIX REQUIRED ; `fix.001` CHECKPOINT ; `fix.002` CHECKPOINT ; `fix.003` CHECKPOINT Transport vert ; `fix.004` PREPARED ; `pre.008` bloqué.**
|
||||
|
||||
## 22. Fermeture `pre.007-fix.004` et gate `pre.008`
|
||||
|
||||
Résultat opérateur final `0.2.8-pre.7.fix.4` :
|
||||
|
||||
```text
|
||||
[x] cargo fmt --all
|
||||
[x] audit Rust workspace = clean / 0 candidate
|
||||
[x] cargo check --workspace = vert, sans warning
|
||||
[x] cargo clippy --workspace --all-targets = vert, sans warning
|
||||
[x] Transport unit = 331/331
|
||||
[x] Transport public API = 40/40
|
||||
[x] release completeness = 29/29
|
||||
[x] Transport doctests = 4/4
|
||||
[x] cargo test --workspace = vert
|
||||
```
|
||||
|
||||
Verdict : **`pre.007` DONE avec `fix.001..004` DONE. `pre.008` peut être ouvert.**
|
||||
|
||||
Ré-audit provider courant : Helius documente toujours `transactionSubscribe` sur les endpoints WSS unifiés mainnet/devnet, les trois listes d'adresses à 50 000 max et l'absence de support de `blockSubscribe`, `slotsUpdatesSubscribe` et `voteSubscribe`.
|
||||
|
||||
Critères `pre.008` préparés :
|
||||
|
||||
```text
|
||||
[ ] workspace.package.version = 0.2.8-pre.8
|
||||
[ ] aucune nouvelle dépendance
|
||||
[ ] aucun second actor/socket/provider registry
|
||||
[ ] SolanaStandard ne peut pas appeler transactionSubscribe (compile-fail)
|
||||
[ ] Helius ne peut toujours pas appeler block/slotsUpdates/vote (compile-fail)
|
||||
[ ] provider RPC application error ne tue pas la session physique
|
||||
[ ] provider message/data arbitraires ne sont pas copiés dans KspError
|
||||
[ ] mismatch notification method échoue seulement la logical transaction subscription
|
||||
[ ] cleanup du mismatch utilise transactionUnsubscribe
|
||||
[ ] autre subscription saine survit au mismatch
|
||||
[ ] oversized inbound provider payload déclenche le reconnect borné avant JSON decode métier
|
||||
[ ] session Helius de remplacement reste utilisable après oversized payload
|
||||
[ ] queue overflow transaction reste isolée (preuve pre.006 conservée)
|
||||
[ ] Debug Full notification omet transaction et signature brutes
|
||||
[ ] Debug Signature notification omet signature/memo/error values
|
||||
[ ] Debug Unknown notification omet le serde_json::Value brut
|
||||
[ ] endpoint api-key/filter values restent absents session/request/snapshot diagnostics
|
||||
[ ] remote subscription id reste absent des snapshots publics
|
||||
[ ] standard WebSocket 18/18 inchangé
|
||||
[ ] HTTP 52 current + 14 historical inchangé
|
||||
[ ] Config V1/V2 et helius_laserstream inchangés
|
||||
[ ] cargo fmt --all
|
||||
[ ] audit Rust = clean
|
||||
[ ] cargo check = sans warning
|
||||
[ ] cargo clippy = sans warning
|
||||
[ ] Transport = 335 unit + 40 API + 30 completeness + 5 doctests
|
||||
[ ] cargo test --workspace = vert
|
||||
```
|
||||
|
||||
La correction `Debug` ne retire aucune donnée de l'API fonctionnelle : `transaction()`, `signature()`, les accessors wire et la variante `Unknown(Value)` restent disponibles explicitement. Elle empêche seulement les diagnostics génériques de rendre un payload provider arbitraire ou massif.
|
||||
|
||||
Verdict courant : **`pre.008` PREPARED ; `pre.009` bloqué jusqu'au gate opérateur.**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user