v0.2.8-pre.010

This commit is contained in:
2026-08-23 18:35:44 +02:00
parent 9c0d4fc197
commit d8bfd7cd2e
7 changed files with 341 additions and 35 deletions

View File

@@ -1,9 +1,9 @@
<!-- file: docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md -->
<!-- version: 23 -->
<!-- version: 24 -->
# Plan `0.2.8` — Helius LaserStream WebSocket
> **Statut : `0.2.8-pre.008` est validé intégralement par lopérateur : fmt/audit/check/Clippy, 335 unit Transport, 40 API, 30 completeness, 5 doctests et workspace complet verts. `0.2.8-pre.009` réconcilie la documentation Helius courante, ajoute `slotsUpdates` à la façade Helius et ferme les canaris de compliance HTTP/WS/Config/dependencies.**
> **Statut : `0.2.8-pre.009` est validé intégralement par lopérateur : fmt/audit/check/Clippy, 335 unit Transport, 41 API, 33 completeness, 4 doctests et workspace complet verts. `0.2.8-pre.010` synchronise README/USAGE, ferme la stratégie de smoke live sans violer lownership Config/Transport et demande le cargo tree final à lopérateur.**
## 1. Objet, base et état courant
@@ -39,10 +39,12 @@ 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é
pre.008 adversarial provider/capabilities/payload/security validé
pre.009 compliance provider/current + slotsUpdates Helius validé
pre.010 documentation/smoke policy/cargo tree final — préparé
workspace.package.version courant = 0.2.8-pre.8
commit attendu = v0.2.8-pre.008
workspace.package.version courant = 0.2.8-pre.10
commit attendu = v0.2.8-pre.010
aucun tag prerelease
```
@@ -78,10 +80,10 @@ pre.007 DONE — heartbeat Helius WebSocket/idle + timers + interaction reconne
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 DONE — provider adversarial lifecycle + capability guards + payload/backpressure + security/redaction
pre.009 PREPARED — compliance Helius WebSocket + réconciliation documentaire `slotsUpdates`
pre.009 DONE — compliance Helius WebSocket + réconciliation documentaire `slotsUpdates`
+ 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
+ cargo tree direct/duplicates final
pre.010 PREPARED — stratégie smoke Helius live fermée sans nouveau cross-crate owner + README/USAGE
+ cargo tree direct/duplicates final à rejouer par lopérateur
pre.011 validation workspace finale + fermeture plan/matrice/indexes + prompt 0.2.9
rel.001 publication stable stricte
```
@@ -1461,3 +1463,63 @@ Aucune nouvelle dépendance, aucun nouveau DTO Helius pour `slotsUpdates`, aucun
`pre.010` reste réservé au smoke Helius live opt-in si une stratégie credential-safe est disponible, à README/USAGE et au `cargo tree` final.
## 22. Fermeture `pre.009` et préparation `pre.010`
Checkpoint opérateur `0.2.8-pre.9` 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] Transport unit = 335/335
[x] Transport public API = 41/41
[x] release completeness = 33/33
[x] Transport doctests = 4/4
[x] cargo test --workspace = vert
```
Verdict : **`pre.009` DONE.**
Le réaudit Helius courant confirme les endpoints unifiés `wss://mainnet.helius-rpc.com/?api-key=...` et `wss://devnet.helius-rpc.com/?api-key=...`, le heartbeat recommandé par Ping chaque minute, `slotSubscribe` sur ces endpoints et `transactionSubscribe` comme extension Helius. La stratégie de smoke durable est néanmoins contrainte par larchitecture KSP :
```text
Transport -X-> Config / environnement
Config ne doit pas devenir la destination générale des futurs smokes cross-crates
KSP_SECRET_HELIUS_API_KEY appartient exclusivement à Config
```
Décision `pre.010` : **aucun nouveau smoke Helius live committé dans Transport ou Config**. La future surface KSP dintégration/orchestration dédiée devra porter le scénario `Config helius_devnet -> HeliusLaserStreamWsSession -> slotSubscribe -> notification -> unsubscribe -> close`. `transactionSubscribe` pourra rester un smoke opt-in supplémentaire dépendant des droits provider, jamais un gate réseau stable.
Livraison `pre.010` :
```text
- README Transport synchronisé avec la surface Helius finale 7 standard + transaction
- USAGE Transport documente Config -> façade Helius, heartbeat et limites downership
- release completeness verrouille labsence de lecture secret/env dans le smoke Transport
- aucun nouveau test Helius live dans Config
- aucune nouvelle dépendance
- cargo tree final requis de lopérateur
```
Gate attendu :
```text
Transport unit 335
Transport public API 41
release completeness 34
Transport doctests 4
workspace vert
warnings 0
```
Audit graphe à joindre au checkpoint opérateur :
```bash
cargo tree -p ksp-onchain-transport-lib
cargo tree -p ksp-onchain-transport-lib --duplicates
cargo tree --duplicates
```
`pre.011` reste bloqué jusquau gate complet et à linspection de ces graphes.

View File

@@ -1,9 +1,9 @@
<!-- file: docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md -->
<!-- version: 22 -->
<!-- version: 23 -->
# Validation `0.2.8` — Helius LaserStream WebSocket
> **Statut : `pre.008` est entièrement vert : 335/335 unit Transport, 40/40 API, 30/30 completeness, 5/5 doctests et workspace complet. `pre.009` est préparé avec réconciliation de la documentation Helius courante : `slotsUpdates` rejoint la façade Helius ; `block` et `vote` restent explicitement non supportés.**
> **Statut : `pre.009` est entièrement vert : 335/335 unit Transport, 41/41 API, 33/33 completeness, 4/4 doctests et workspace complet. `pre.010` est préparé pour synchroniser README/USAGE, verrouiller la stratégie de smoke live architecture-safe et rejouer le cargo tree final.**
## 1. Références
@@ -31,6 +31,7 @@ pre.007 paused-I/O observation fix deltas/0.2.8/pre.007-fix.003.md
pre.007 dependency-firewall fix deltas/0.2.8/pre.007-fix.004.md
pre.008 adversarial/compliance guard deltas/0.2.8/pre.008.md
pre.009 compliance provider/current deltas/0.2.8/pre.009.md
pre.010 docs/smoke/tree final deltas/0.2.8/pre.010.md
validation standard WS docs/validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md
HTTP compliance docs/validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md
KSP-TRANSPORT-007 docs/validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md
@@ -105,25 +106,25 @@ Verdict : **gate `0.2.8-pre.001` positif ; `pre.002` + `fix.001` et `pre.003` so
## 3. Matrice provider normative
| Capability | Standard KSP | Helius doc actuelle | Décision `0.2.8` | Surface Helius attendue | Preuve finale attendue |
|------------------------------|----------------:|---------------------------------------------------|--------------------------|-------------------------|---------------------------------------|
| `accountSubscribe` pair | oui | supporté | réutiliser wire standard | présente | exact wire + no regression |
| `logsSubscribe` pair | oui | supporté | réutiliser wire standard | présente | exact wire + no regression |
| `programSubscribe` pair | oui | supporté | réutiliser wire standard | présente | exact wire + no regression |
| `rootSubscribe` pair | oui | supporté | réutiliser standard | présente | exact wire + no regression |
| `signatureSubscribe` pair | oui | supporté | réutiliser standard | présente | one-shot conservé |
| `slotSubscribe` pair | oui | supporté | réutiliser standard | présente | exact wire + no regression |
| `blockSubscribe` pair | oui, unstable | non supporté | ne pas exposer Helius | **absente** | API absence + guard interne avant I/O |
| `slotsUpdatesSubscribe` pair | oui, unstable | page spécifique + overview courant = disponible | réutiliser wire standard | présente | exact wire + warning unstable |
| `voteSubscribe` pair | oui, unstable | non supporté | ne pas exposer Helius | **absente** | API absence + guard interne avant I/O |
| `transactionSubscribe` | non standard | extension Helius | ajouter typed | présente | request/ack/notification fixtures |
| `transactionUnsubscribe` | non standard | documenté dans référence transaction | ajouter via handle | présente | exact method + late-message race |
| `tokenAccounts` | non standard | `none/balanceChanged/all` | ajouter typed | présente dans filter | enum + serialization |
| `notifyOn` account | non standard | deprecated, no-op Agave 4.2 | ne pas exposer | absente | absence DTO public |
| `notifyOn` program | non standard | deprecated, no-op Agave 4.2 | ne pas exposer | absente | absence DTO public |
| enhanced account extra | non standard | mentionné, wire exact non publié | report explicite | absente | réaudit final |
| proactive heartbeat | absent standard | 10 min idle, ping recommandé | Helius-only actor policy | interne | deterministic timer tests |
| replay historique | absent standard | pas de contrat WS KSP | interdit | absent | docs/canary no promise |
| Capability | Standard KSP | Helius doc actuelle | Décision `0.2.8` | Surface Helius attendue | Preuve finale attendue |
|------------------------------|----------------:|-------------------------------------------------|--------------------------|-------------------------|---------------------------------------|
| `accountSubscribe` pair | oui | supporté | réutiliser wire standard | présente | exact wire + no regression |
| `logsSubscribe` pair | oui | supporté | réutiliser wire standard | présente | exact wire + no regression |
| `programSubscribe` pair | oui | supporté | réutiliser wire standard | présente | exact wire + no regression |
| `rootSubscribe` pair | oui | supporté | réutiliser standard | présente | exact wire + no regression |
| `signatureSubscribe` pair | oui | supporté | réutiliser standard | présente | one-shot conservé |
| `slotSubscribe` pair | oui | supporté | réutiliser standard | présente | exact wire + no regression |
| `blockSubscribe` pair | oui, unstable | non supporté | ne pas exposer Helius | **absente** | API absence + guard interne avant I/O |
| `slotsUpdatesSubscribe` pair | oui, unstable | page spécifique + overview courant = disponible | réutiliser wire standard | présente | exact wire + warning unstable |
| `voteSubscribe` pair | oui, unstable | non supporté | ne pas exposer Helius | **absente** | API absence + guard interne avant I/O |
| `transactionSubscribe` | non standard | extension Helius | ajouter typed | présente | request/ack/notification fixtures |
| `transactionUnsubscribe` | non standard | documenté dans référence transaction | ajouter via handle | présente | exact method + late-message race |
| `tokenAccounts` | non standard | `none/balanceChanged/all` | ajouter typed | présente dans filter | enum + serialization |
| `notifyOn` account | non standard | deprecated, no-op Agave 4.2 | ne pas exposer | absente | absence DTO public |
| `notifyOn` program | non standard | deprecated, no-op Agave 4.2 | ne pas exposer | absente | absence DTO public |
| enhanced account extra | non standard | mentionné, wire exact non publié | report explicite | absente | réaudit final |
| proactive heartbeat | absent standard | 10 min idle, ping recommandé | Helius-only actor policy | interne | deterministic timer tests |
| replay historique | absent standard | pas de contrat WS KSP | interdit | absent | docs/canary no promise |
## 4. Matrice des façades protocolaires
@@ -986,3 +987,73 @@ Le passage de 5 à 4 doctests est attendu : le canari compile-fail `Helius -X->
Verdict courant : **`pre.009` PREPARED ; `pre.010` bloqué jusqu'au gate opérateur.**
## 24. Fermeture `pre.009` et gate `pre.010`
Résultat opérateur `0.2.8-pre.9` :
```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 = 335/335
[x] Transport public API = 41/41
[x] release completeness = 33/33
[x] Transport doctests = 4/4
[x] cargo test --workspace = vert
```
Verdict : **`pre.009` DONE.**
### 24.1 Stratégie live Helius retenue
Les pages Helius courantes confirment :
```text
endpoints WSS unifiés mainnet/devnet avec api-key
slotSubscribe disponible sur endpoint Helius
transactionSubscribe = extension Helius
Ping chaque minute recommandé contre linactivité
```
La sécurité du credential nest pas le seul critère. Lownership KSP impose aussi :
```text
[x] Transport ne lit pas KSP_SECRET_HELIUS_API_KEY
[x] Transport ne dépend pas de Config
[x] Config reste propriétaire de lenvironnement et du secret
[x] le smoke Config -> Transport existant reste une exception transitoire
[x] aucun nouveau smoke cross-crates Helius nest ajouté à Config
```
Le smoke live Helius est donc **différé vers la future surface dintégration/orchestration**. Le scénario minimal recommandé utilisera le profil `helius_devnet` puis `slotSubscribe`; un scénario `transactionSubscribe` restera optionnel et provider-entitlement-dependent. Cette absence de test live committé naffaiblit pas les gates déterministes de `0.2.8`, déjà couverts par fixtures locales, capability guards, reconnect, heartbeat, backpressure et compliance.
### 24.2 Critères `pre.010`
```text
[ ] workspace.package.version = 0.2.8-pre.10
[ ] README décrit Helius = 7 familles standard + transaction
[ ] README rappelle block/vote absents et slotsUpdates unstable
[ ] README/USAGE documentent heartbeat Helius 60 s
[ ] USAGE documente Config helius_devnet -> HeliusLaserStreamWsSession
[ ] KSP_SECRET_HELIUS_API_KEY reste Config-owned
[ ] aucun nouveau smoke Helius live dans Transport avec lecture env/secret
[ ] aucun nouveau smoke Helius cross-crates ajouté à Config
[ ] aucun Transport -> Config
[ ] aucune nouvelle dépendance
[ ] cargo tree -p ksp-onchain-transport-lib inspecté
[ ] cargo tree -p ksp-onchain-transport-lib --duplicates inspecté
[ ] cargo tree --duplicates inspecté
[ ] cargo fmt --all
[ ] audit Rust = clean
[ ] cargo check = sans warning
[ ] cargo clippy = sans warning
[ ] Transport unit = 335
[ ] Transport public API = 41
[ ] release completeness = 34
[ ] Transport doctests = 4
[ ] cargo test --workspace = vert
```
Verdict courant : **`pre.010` PREPARED ; `pre.011` bloqué jusquau gate opérateur et au cargo tree final.**