v0.2.8-pre.003

This commit is contained in:
2026-08-23 13:52:57 +02:00
parent c94a54f3e3
commit b3363073c4
13 changed files with 715 additions and 151 deletions

259
deltas/0.2.8/pre.003.md Normal file
View File

@@ -0,0 +1,259 @@
<!-- file: deltas/0.2.8/pre.003.md -->
<!-- version: 1 -->
# 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.