v0.2.8-pre.001
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/000-README.md -->
|
||||
<!-- version: 20 -->
|
||||
<!-- version: 21 -->
|
||||
|
||||
# Validations KSP
|
||||
|
||||
@@ -19,3 +19,4 @@ Documents :
|
||||
- [`008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md) — matrice finale validée de la release stable `0.2.5`, threat model V1, canaris adversariaux, reproduction externe des vecteurs, audit de frontières, normalisation Rust/audit structurel, graphes Cargo et checkpoint final `pre.010-fix.003` vert.
|
||||
- [`009-V0_2_6_WALLET_DESK_COMPLIANCE.md`](009-V0_2_6_WALLET_DESK_COMPLIANCE.md) — matrice finale validée de la release stable `0.2.6`, couvrant Wallet Desk, les wires V1/V2, la migration explicite, le runtime Tauri packagé, les frontières sécurité/ownership et le gate opérateur `pre.018-fix.001` avec build final Linux vert.
|
||||
- [`010-V0_2_7_ONCHAIN_WEBSOCKET.md`](010-V0_2_7_ONCHAIN_WEBSOCKET.md) — matrice finale validée de la release stable `0.2.7`, ouverte par `pre.001`, fermée techniquement par `pre.014` puis publiée par `rel.001` : inventaire 9 subscribe + 9 unsubscribe, lifecycle borné, statuts unstable, compliance 18/18, non-régression HTTP 52+14, composition Config V2, smoke WebSocket Devnet et audit de dépendances.
|
||||
- [`011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md`](011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md) — matrice active de `0.2.8`, ouverte par `pre.001` : support Helius par famille, `transactionSubscribe`/`transactionUnsubscribe`, `tokenAccounts`, `notifyOn` deprecated/no-op, capability validation, heartbeat provider, secrets et non-régressions Transport/Config.
|
||||
|
||||
216
docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md
Normal file
216
docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md
Normal file
@@ -0,0 +1,216 @@
|
||||
<!-- file: docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md -->
|
||||
<!-- version: 2 -->
|
||||
|
||||
# Validation `0.2.8` — Helius LaserStream WebSocket
|
||||
|
||||
> **Statut : matrice ouverte par `0.2.8-pre.001`.** Les lignes normatives/sizing sont fermées ; les preuves runtime restent à matérialiser dans les prereleases suivantes. Le gate initial reste conditionné aux graphes Cargo opérateur absents du sandbox de préparation.
|
||||
|
||||
## 1. Références
|
||||
|
||||
```text
|
||||
prompt prompts/013-V0_2_8_START_PROMPT.md
|
||||
plan docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md
|
||||
base stable v0.2.7 / deltas/0.2.7/rel.001.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
|
||||
```
|
||||
|
||||
Audit Helius initial : **2026-08-23**.
|
||||
|
||||
## 2. Matrice provider normative initiale
|
||||
|
||||
| Capability | Standard KSP | Helius doc actuelle | Décision `0.2.8` | Preuve finale attendue |
|
||||
|-------------------------------------|----------------:|-------------------------------------------------------|-----------------------------|-------------------------------------------|
|
||||
| `accountSubscribe` pair | oui | supporté | réutiliser standard | exact wire + no regression |
|
||||
| `logsSubscribe` pair | oui | supporté | réutiliser standard | exact wire + no regression |
|
||||
| `programSubscribe` pair | oui | supporté | réutiliser standard | exact wire + no regression |
|
||||
| `rootSubscribe` pair | oui | supporté | réutiliser standard | exact wire + no regression |
|
||||
| `signatureSubscribe` pair | oui | supporté | réutiliser standard | one-shot conservé |
|
||||
| `slotSubscribe` pair | oui | supporté | réutiliser standard | exact wire + no regression |
|
||||
| `blockSubscribe` pair | oui, unstable | non supporté Helius | rejet avant I/O | capability canary |
|
||||
| `slotsUpdatesSubscribe` pair | oui, unstable | **docs divergentes ; index exhaustif = non supporté** | rejet avant I/O | canary + divergence documentée |
|
||||
| `voteSubscribe` pair | oui, unstable | non supporté Helius | rejet avant I/O | capability canary |
|
||||
| `transactionSubscribe` | non standard | extension Helius | ajouter typed | request/ack/notification fixtures |
|
||||
| `transactionUnsubscribe` | non standard | explicitement documenté dans référence transaction | ajouter via handle | exact method + late message race |
|
||||
| `tokenAccounts` | non standard | `none/balanceChanged/all` | ajouter typed | enum + serialization + invalid impossible |
|
||||
| `notifyOn` account | non standard | deprecated, no-op Agave 4.2 | ne pas exposer | absence public DTO |
|
||||
| `notifyOn` program | non standard | deprecated, no-op Agave 4.2 | ne pas exposer | absence public DTO |
|
||||
| « enhanced accountSubscribe » extra | non standard | mentionné mais wire exact actuel non publié | report explicite | réaudit final |
|
||||
| proactive heartbeat | absent standard | 10 min idle, ping recommandé | Helius-only actor heartbeat | deterministic timer tests |
|
||||
| replay historique | absent standard | WebSocket sans contrat KSP de replay | interdit | docs/canary no promise |
|
||||
|
||||
## 3. Contrat `transactionSubscribe` à couvrir
|
||||
|
||||
### Filter
|
||||
|
||||
| Champ | Type | Limite/état | Statut |
|
||||
|-------------------|--------------------|-------------------------------------|-------------|
|
||||
| `vote` | bool optionnel | pas de limite locale supplémentaire | audit fermé |
|
||||
| `failed` | bool optionnel | pas de limite locale supplémentaire | audit fermé |
|
||||
| `signature` | string optionnelle | provider valide la signature | audit fermé |
|
||||
| `accountInclude` | string[] | <= 50 000 | audit fermé |
|
||||
| `accountExclude` | string[] | <= 50 000 | audit fermé |
|
||||
| `accountRequired` | string[] | <= 50 000 | audit fermé |
|
||||
| `tokenAccounts` | enum string | `none`, `balanceChanged`, `all` | audit fermé |
|
||||
|
||||
### Options
|
||||
|
||||
| Champ | Valeurs | Règle | Statut |
|
||||
|----------------------------------|-------------------------------|-----------------------------------|-------------|
|
||||
| `commitment` | processed/confirmed/finalized | réutilisation possible à vérifier | audit fermé |
|
||||
| `encoding` | base58/base64/jsonParsed | enum Helius restreint | audit fermé |
|
||||
| `transactionDetails` | full/signatures/accounts/none | complet | audit fermé |
|
||||
| `showRewards` | bool | optionnel | audit fermé |
|
||||
| `maxSupportedTransactionVersion` | integer | requis pour accounts/full | audit fermé |
|
||||
|
||||
### Notification
|
||||
|
||||
```text
|
||||
method = transactionNotification
|
||||
full documented result = transaction + signature + slot + transactionIndex
|
||||
```
|
||||
|
||||
Le wire exact de tous les modes n'est pas suffisamment détaillé par la source officielle initiale. La validation finale exige :
|
||||
|
||||
- aucune forme inventée ;
|
||||
- types précis pour les formes prouvées ;
|
||||
- fallback borné/opaque pour une forme officielle non encore explicitée si nécessaire ;
|
||||
- aucune projection brute dans logs/snapshots.
|
||||
|
||||
## 4. Matrice architecture
|
||||
|
||||
| Critère | Décision pre.001 | Preuve cible | État |
|
||||
|-------------------------|--------------------------------------------|-------------------------------------------|----------------------|
|
||||
| actor unique | réutiliser `WsSession` | aucun second client dans sources/manifest | décidé |
|
||||
| protocol descriptor | `HeliusLaserStream` / `helius_laserstream` | public API + Config canary | décidé |
|
||||
| provider metadata | `helius` reste metadata | snapshot sûr | décidé |
|
||||
| Helius transaction kind | nouvelle variante provider explicite | registry triplet exact | décidé |
|
||||
| capability before I/O | oui | local peer reçoit 0 request interdite | décidé |
|
||||
| standard DTO pollution | interdite | public API/source canary | décidé |
|
||||
| Config direction | Config -> Transport uniquement | ownership tests | décidé |
|
||||
| heartbeat | actor Helius-only, 60s cible | deterministic timers | décidé |
|
||||
| secret | URL query derrière `WsEndpointUrl` | redaction canaries | décidé |
|
||||
| new Rust dependency | aucune | manifest/tree audit | décidé, tree pending |
|
||||
|
||||
## 5. Validation lifecycle/provider à construire
|
||||
|
||||
```text
|
||||
[ ] transaction subscribe/ack exact
|
||||
[ ] transaction unsubscribe/result exact
|
||||
[ ] transaction notification dispatch exact
|
||||
[ ] notification decode failure isole la logical subscription
|
||||
[ ] provider RPC application error ne tue pas la session
|
||||
[ ] late notification après unsubscribe ne réactive rien
|
||||
[ ] reconnect invalide/remappe remote ids
|
||||
[ ] resubscribe garde local id
|
||||
[ ] unsubscribe pendant reconnect gagne
|
||||
[ ] heartbeat n'écrit qu'en Active
|
||||
[ ] heartbeat est annulé au close
|
||||
[ ] heartbeat write failure suit reconnect borné
|
||||
[ ] shutdown interrompt heartbeat/backoff
|
||||
[ ] oversized inbound frame reste borné
|
||||
[ ] queue overflow d'une transaction subscription n'affecte pas les autres
|
||||
[ ] payload/filters/api-key absents de Debug/snapshots sûrs
|
||||
```
|
||||
|
||||
## 6. Non-régressions obligatoires
|
||||
|
||||
```text
|
||||
[ ] standard WebSocket 18/18 toujours comptabilisé pour SolanaStandard
|
||||
[ ] partition standard unstable 3/9 inchangée
|
||||
[ ] signature one-shot inchangée
|
||||
[ ] HTTP current 52/52 inchangé
|
||||
[ ] HTTP historical 14/14 inchangé
|
||||
[ ] KSP-TRANSPORT-007 inchangé
|
||||
[ ] Config V1 HTTP-only backward readable
|
||||
[ ] Config V2 solana_standard backward readable
|
||||
[ ] no Transport -> Config/Wallet/Store/Program/tracing direct
|
||||
```
|
||||
|
||||
## 7. Security/redaction
|
||||
|
||||
```text
|
||||
[ ] api-key absente de Debug WsEndpointUrl
|
||||
[ ] api-key absente de Debug settings/session/subscription
|
||||
[ ] api-key absente des KspError safe contexts
|
||||
[ ] URL complète absente des snapshots
|
||||
[ ] remote subscription id absent des snapshots publics
|
||||
[ ] raw transaction payload absent des logs/snapshots
|
||||
[ ] large filter addresses non loggées
|
||||
[ ] provider error payload arbitraire non copié dans context
|
||||
```
|
||||
|
||||
## 8. Dependencies
|
||||
|
||||
Audit web du 2026-08-23 :
|
||||
|
||||
```text
|
||||
futures-util 0.3.34
|
||||
tokio 1.53.1
|
||||
tokio-tungstenite 0.30.0
|
||||
reqwest 0.13.4
|
||||
new dependency aucune prévue
|
||||
```
|
||||
|
||||
Preuve locale `pre.001` :
|
||||
|
||||
```text
|
||||
python3 scripts/audit_rust_workspace_rules.py = clean
|
||||
cargo tree = impossible dans sandbox, cargo absent
|
||||
```
|
||||
|
||||
Gate opérateur requis :
|
||||
|
||||
```bash
|
||||
cargo tree -p ksp-onchain-transport-lib
|
||||
cargo tree -p ksp-onchain-transport-lib --duplicates
|
||||
```
|
||||
|
||||
## 9. Smoke live
|
||||
|
||||
Statut initial : **non exécuté**.
|
||||
|
||||
Contrat cible : opt-in, Config résout l'api-key, Transport ne lit pas l'environnement. Aucun secret n'est versionné ou affiché. Un échec dû au plan/credential provider doit rester distinguable d'une panne du moteur.
|
||||
|
||||
## 10. Forecast courant
|
||||
|
||||
```text
|
||||
pre.001 audit/sizing
|
||||
pre.002 protocol + capability model
|
||||
pre.003 Config V2 + secrets
|
||||
pre.004 transaction request/unsubscribe
|
||||
pre.005 transaction notification + lifecycle
|
||||
pre.006 heartbeat
|
||||
pre.007 adversarial/security/backpressure
|
||||
pre.008 compliance/non-regression
|
||||
pre.009 live smoke/docs/dependency graph
|
||||
pre.010 final workspace/prompt 0.2.9
|
||||
rel.001 stable
|
||||
```
|
||||
|
||||
Le forecast est révisable ; seul le respect des gates autorise la publication.
|
||||
|
||||
## 11. Gate initial
|
||||
|
||||
```text
|
||||
[x] base stable inspectée
|
||||
[x] baseline opérateur disponible
|
||||
[x] sources Helius courantes relues
|
||||
[x] terminologie/endpoints/auth clarifiés
|
||||
[x] surface standard supportée/non supportée inventoriée
|
||||
[x] transactionSubscribe/unsubscribe inventoriés
|
||||
[x] tokenAccounts inventorié
|
||||
[x] notifyOn classé deprecated/no-op
|
||||
[x] divergence slotsUpdates enregistrée et arbitrée explicitement
|
||||
[x] protocol/capability architecture décidée
|
||||
[x] heartbeat ownership décidé
|
||||
[x] Config shape décidée
|
||||
[x] credential strategy décidée
|
||||
[x] aucune nouvelle dépendance justifiée
|
||||
[x] forecast recalibré
|
||||
[ ] cargo tree direct exécuté par opérateur
|
||||
[ ] cargo tree duplicates exécuté par opérateur
|
||||
```
|
||||
|
||||
Verdict : **gate normatif/architectural prêt ; gate `pre.001` entièrement positif après réception des deux graphes Cargo sans anomalie bloquante.**
|
||||
Reference in New Issue
Block a user