# Delta `0.2.8-pre.003` — Surface standard Helius WebSocket ## 1. Objet Cette tranche expose sur `HeliusLaserStreamWsSession` uniquement les six familles WebSocket standard que l'audit Helius courant classe comme supportées, sans ajouter de wire provider parallèle et sans ouvrir encore Config Helius, `transactionSubscribe` ou le heartbeat. Le checkpoint opérateur de `pre.002-fix.001` est intégralement vert ; aucune dette de gate n'est reportée dans cette tranche. Version workspace : ```text 0.2.8-pre.3 ``` Livraison / commit attendu : ```text 0.2.8-pre.003 v0.2.8-pre.003 ``` Aucun tag prerelease. ## 2. Surface Helius ajoutée `HeliusLaserStreamWsSession` expose désormais : ```text account_subscribe program_subscribe logs_subscribe signature_subscribe slot_subscribe root_subscribe ``` Chaque wrapper délègue au `WsSession` physique partagé et réutilise exactement les DTOs, encoders, decoders, `WsSubscriptionKind` et méthodes d'unsubscribe standard acquis en `0.2.7`. Aucun type suivant n'est créé : ```text HeliusAccountSubscribeConfig HeliusAccountNotification HeliusProgramSubscribeConfig HeliusProgramNotification HeliusLogsSubscribeFilter HeliusLogsNotification HeliusSignatureSubscribeConfig HeliusSignatureNotification HeliusSlotNotification HeliusRootNotification ``` L'absence de ces copies est volontaire : aucun écart de wire Helius courant ne les justifie. ## 3. Surface Helius explicitement absente La façade Helius continue de ne pas exposer : ```text block_subscribe slots_updates_subscribe vote_subscribe transaction_subscribe ``` Les trois familles standard non supportées sont verrouillées par des rustdocs `compile_fail` : ```text blockSubscribe slotsUpdatesSubscribe voteSubscribe ``` `transactionSubscribe` reste réservé à la tranche provider-specific dédiée du forecast. ## 4. Organisation du code `ws_protocol_session.rs` reste limité au lifecycle des façades et à l'accès crate-private au moteur partagé. Les wrappers sont rangés auprès du propriétaire de leur wire : ```text ws_accounts.rs SolanaStandardWsSession : account / program HeliusLaserStreamWsSession : account / program ws_transactions.rs SolanaStandardWsSession : logs / signature HeliusLaserStreamWsSession : logs / signature ws_cluster.rs SolanaStandardWsSession : root / slot / slotsUpdates / vote HeliusLaserStreamWsSession : root / slot ws_blocks.rs SolanaStandardWsSession : block uniquement ws_protocol_session.rs connect / id / snapshot / state / close physical_session() crate-private ``` Cette répartition évite de transformer le module de façade en fichier fourre-tout tout en conservant un seul actor/socket/registry. Aucun accès public `inner()` / `into_inner()` / `physical_session()` n'est ajouté. ## 5. Fixture Helius standard Une fixture locale dédiée couvre les six familles contre un peer WebSocket local Helius-typed. Elle vérifie pour chaque paire : ```text nom subscribe exact params exacts remote subscription id nom unsubscribe exact params [remote_id] result true ``` Couverture : ```text accountSubscribe / accountUnsubscribe programSubscribe / programUnsubscribe logsSubscribe / logsUnsubscribe signatureSubscribe / signatureUnsubscribe slotSubscribe / slotUnsubscribe rootSubscribe / rootUnsubscribe ``` Les tests standard historiques restent propriétaires du décodage exact des notifications ; la nouvelle fixture prouve que la façade Helius traverse le même wire plutôt que de créer une seconde pile de décodage. ## 6. Canaries publiques et release completeness Ajouts : ```text public API : les six wrappers Helius sont accessibles depuis le crate-root public API : les types de paramètres/résultats restent les types Solana partagés release completeness : surface Helius courante = six familles standard, avant extension transaction source canary : ws_protocol_session.rs ne redevient pas propriétaire des wrappers métier ``` Les neuf familles de `SolanaStandardWsSession` et les 18 opérations standard acquises restent inchangées. ## 7. Hors périmètre préservé Cette tranche ne modifie pas : ```text ksp-config-lib config/std.transport.json config/schemas/std.transport.schema.json .env.example WsSubscriptionKind transactionSubscribe / transactionUnsubscribe notification transaction Helius heartbeat/idle timer HTTP 52/14 Store / Program / Wallet ``` Aucune dépendance Rust n'est ajoutée. ## 8. Preuve opérateur héritée avant ouverture Le checkpoint fourni après `pre.002-fix.001` est : ```text cargo fmt --all OK python3 scripts/audit_rust_workspace_rules.py clean cargo check --workspace OK cargo clippy --workspace --all-targets OK cargo test -p ksp-onchain-transport-lib OK cargo test --workspace OK ``` `pre.002` + `pre.002-fix.001` sont donc considérés `DONE` avant ce delta. ## 9. Fichiers de la livraison Nouveau : ```text crates/ksp-onchain-transport-lib/unit_tests/ws_helius_standard.rs deltas/0.2.8/pre.003.md ``` Modifiés : ```text Cargo.toml crates/ksp-onchain-transport-lib/src/ws_protocol_session.rs crates/ksp-onchain-transport-lib/src/ws_accounts.rs crates/ksp-onchain-transport-lib/src/ws_blocks.rs crates/ksp-onchain-transport-lib/src/ws_cluster.rs crates/ksp-onchain-transport-lib/src/ws_transactions.rs crates/ksp-onchain-transport-lib/unit_tests/ws_protocol_session.rs crates/ksp-onchain-transport-lib/tests/public_api.rs crates/ksp-onchain-transport-lib/tests/release_completeness.rs docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md ``` ## 10. Validation exécutée dans le sandbox de préparation Exécuté après modification : ```text python3 scripts/audit_rust_workspace_rules.py General Rust rule audit: clean Rust export completeness audit: 0 candidate(s) KSP workspace Rust rule audit: clean ``` Le sandbox ne fournit pas Cargo/rustfmt ; les nouvelles fixtures et doctests ne sont donc pas déclarés compilés avant le checkpoint opérateur. ## 11. Gate opérateur Après application : ```bash cargo fmt --all python3 scripts/audit_rust_workspace_rules.py cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-onchain-transport-lib cargo test --workspace ``` Attendu : ```text nouvelle fixture Helius six familles verte 4 doctests compile_fail de HeliusLaserStreamWsSession verts public API pre.003 verte release completeness pre.003 verte aucun warning/clippy standard WebSocket 9/9 non régressé workspace complet vert ``` ## 12. Suite Si le checkpoint est vert, `pre.004` ouvre uniquement : ```text Config V2 kind = helius_laserstream schema / fixtures mapping Config -> Transport secret Helius dans URL résolue par Config redaction api-key ``` `transactionSubscribe` reste hors `pre.004` conformément au forecast courant.