v0.2.8-pre.004-fix.001
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md -->
|
||||
<!-- version: 9 -->
|
||||
<!-- version: 11 -->
|
||||
|
||||
# Plan `0.2.8` — Helius LaserStream WebSocket
|
||||
|
||||
> **Statut : `0.2.8-pre.003` est validé ; `0.2.8-pre.004` est préparé.** La façade `HeliusLaserStreamWsSession` possède désormais sa surface standard 6/6 validée. `pre.004` étend uniquement Config V2 au discriminateur WebSocket `helius_laserstream`, ajoute la fixture/exemple Helius et verrouille la résolution/redaction de `KSP_SECRET_HELIUS_API_KEY`, sans ouvrir `transactionSubscribe`.
|
||||
> **Statut : `0.2.8-pre.003` est validé ; le checkpoint `0.2.8-pre.004` a révélé un faux négatif de test, puis la revue du fix a identifié l'omission d'une représentation Devnet Helius déterministe. `pre.004-fix.001` corrige les deux points et reste préparé.** Le runtime Config/Transport est inchangé : pour une chaîne composée, `safe_value` conserve les segments littéraux non sensibles et remplace uniquement le segment secret par `********`. Le fix couvre désormais mainnet et devnet sans ouvrir `transactionSubscribe`.
|
||||
|
||||
## 1. Objet, base et état courant
|
||||
|
||||
@@ -27,10 +27,11 @@ pre.001-fix.002 forecast compact + namespace LaserStream WS/gRPC
|
||||
pre.002 socle protocolaire validé
|
||||
pre.002-fix.001 correction Clippy + normalisation structure documentaire validées
|
||||
pre.003 six familles standard Helius validées
|
||||
pre.004 Config V2 Helius + secret/redaction préparés
|
||||
pre.004 Config V2 Helius implémenté ; checkpoint bloqué par un faux négatif de test
|
||||
pre.004-fix.001 correction safe_value + couverture Devnet Helius préparées
|
||||
|
||||
workspace.package.version courant = 0.2.8-pre.4
|
||||
commit attendu = v0.2.8-pre.004
|
||||
workspace.package.version courant = 0.2.8-pre.4.fix.1
|
||||
commit attendu = v0.2.8-pre.004-fix.001
|
||||
aucun tag prerelease
|
||||
```
|
||||
|
||||
@@ -50,8 +51,10 @@ pre.002 DONE — socle protocolaire : WsProtocolKind::HeliusLaserStream + faça
|
||||
fix.001 DONE — correction Clippy `implicit_return` + audit/normalisation structure docs
|
||||
pre.003 DONE — surface Helius standard supportée : account/logs/program/root/signature/slot
|
||||
+ absence typée de block/slotsUpdates/vote sur Helius + non-régression standard 9/9
|
||||
pre.004 PREPARED — Config V2 helius_laserstream + schema/fixtures + mapping Config -> Transport
|
||||
+ stratégie de secret Helius et redaction URL
|
||||
pre.004 CHECKPOINT — Config V2 helius_laserstream + schema/fixtures + mapping Config -> Transport
|
||||
+ stratégie de secret Helius et redaction URL ; runtime/check/clippy/Transport verts
|
||||
fix.001 PREPARED — corrige le faux négatif `safe_value` + complète la représentation Devnet Helius
|
||||
+ mainnet/devnet dans des profils distincts, même secret, sans changement runtime
|
||||
pre.005 transactionSubscribe request typed + filters/options/tokenAccounts + transactionUnsubscribe
|
||||
+ bounds 50k + maxSupportedTransactionVersion conditionnel
|
||||
pre.006 transactionNotification + actor integration + reconnect/resubscribe/unsubscribe races
|
||||
@@ -709,17 +712,18 @@ profiles[].ws_endpoints[].kind:
|
||||
helius_laserstream -> WsProtocolKind::HeliusLaserStream
|
||||
```
|
||||
|
||||
La fixture Config contient un endpoint Helius typé et l'exemple versionné montre la composition de l'URL mainnet. `config/std.transport.json` reste standard-only pour ne pas imposer de provider/credential dans la configuration par défaut. Les paramètres de `transactionSubscribe` restent runtime et n'appartiennent pas au profil endpoint Config.
|
||||
La fixture Config contient un endpoint Helius mainnet typé ainsi qu'un profil Helius devnet distinct. L'exemple versionné matérialise lui aussi un profil mainnet et un profil devnet séparés ; aucun profil logique ne mélange les deux clusters. `config/std.transport.json` reste standard-only pour ne pas imposer de provider/credential dans la configuration par défaut. Les paramètres de `transactionSubscribe` restent runtime et n'appartiennent pas au profil endpoint Config.
|
||||
|
||||
### 7.13 Credentials
|
||||
|
||||
L'api-key reste uniquement dans l'URL résolue :
|
||||
|
||||
```text
|
||||
wss://mainnet.helius-rpc.com/?api-key=${KSP_SECRET_HELIUS_API_KEY:-replace-me}
|
||||
mainnet = wss://mainnet.helius-rpc.com/?api-key=${KSP_SECRET_HELIUS_API_KEY:-replace-me}
|
||||
devnet = wss://devnet.helius-rpc.com/?api-key=${KSP_SECRET_HELIUS_API_KEY:-replace-me}
|
||||
```
|
||||
|
||||
`KSP_SECRET_HELIUS_API_KEY` est inventorié dans `.env.example` sous forme commentée/placeholder. Config résout la clé au sein de l'URL effective, marque la valeur comme `Secret`, conserve l'URL réelle uniquement pour le runtime légitime et redige la projection sûre ainsi que `Debug`. Transport ne lit jamais `std::env` et reçoit uniquement un `WsEndpointUrl`.
|
||||
`KSP_SECRET_HELIUS_API_KEY` est inventorié dans `.env.example` sous forme commentée/placeholder et est réutilisé pour les deux réseaux Helius. Config résout la clé au sein de chaque URL effective, marque le segment résolu comme `Secret` et conserve l'URL réelle uniquement pour le runtime légitime. Le contrat Config existant de redaction **segmentaire** s'applique aux chaînes composées : les littéraux sûrs sont conservés et le segment secret devient `********`, soit `wss://mainnet.helius-rpc.com/?api-key=********` ou `wss://devnet.helius-rpc.com/?api-key=********`. `Debug` n'expose jamais la clé réelle. Transport ne lit jamais `std::env` et reçoit uniquement un `WsEndpointUrl`.
|
||||
|
||||
## 8. Threat model provider
|
||||
|
||||
@@ -890,7 +894,7 @@ validation finale fermée
|
||||
prompt 0.2.9 prêt
|
||||
```
|
||||
|
||||
## 13. Checkpoint `pre.004`
|
||||
## 13. Checkpoint `pre.004` et `fix.001`
|
||||
|
||||
Le checkpoint `pre.003` est fermé par preuve opérateur :
|
||||
|
||||
@@ -910,8 +914,8 @@ Les preuves spécifiques `pre.003` sont acquises : fixture Helius 6/6, 38 tests
|
||||
```text
|
||||
WsProtocolKind Config mapping helius_laserstream -> HeliusLaserStream
|
||||
JSON Schema V2 kind accepte solana_standard + helius_laserstream
|
||||
fixture Config endpoint Helius avec interpolation d'api-key
|
||||
example Config endpoint Helius mainnet explicite
|
||||
fixture Config Helius mainnet + profil Helius devnet séparé, interpolation d'api-key
|
||||
example Config profils Helius mainnet/devnet explicites et séparés
|
||||
secret KSP_SECRET_HELIUS_API_KEY
|
||||
safe projection / Debug credential Helius redacted
|
||||
Config -> Transport endpoint typé HeliusLaserStream
|
||||
@@ -921,7 +925,21 @@ heartbeat toujours absent
|
||||
new dependency aucune
|
||||
```
|
||||
|
||||
Le checkpoint opérateur requis avant de déclarer `pre.004` `DONE` est :
|
||||
Le premier checkpoint opérateur `pre.004` reçu le 2026-08-23 donne :
|
||||
|
||||
```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-config-lib FAIL 109/110
|
||||
cargo test -p ksp-onchain-transport-lib OK 314 unit + 38 public + 26 completeness + 4 doctests
|
||||
cargo test --workspace FAIL sur le même test Config
|
||||
```
|
||||
|
||||
L'unique échec opérateur compare `safe_value` à `********` alors que le résolveur produit correctement `wss://mainnet.helius-rpc.com/?api-key=********`. Les canaris historiques Config prouvent déjà ce contrat de redaction segmentaire pour les chaînes composées. La revue du fix a aussi identifié que `pre.004` ne matérialisait déterministiquement que mainnet alors que le contrat Helius WebSocket couvre mainnet et devnet. `pre.004-fix.001` corrige donc l'attente du test **et** ajoute un profil/fixture Devnet Helius séparé, sans modifier le résolveur, le schema, le mapping protocol ou le runtime Transport.
|
||||
|
||||
Le checkpoint à rejouer avant de déclarer `pre.004` + `fix.001` `DONE` est :
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
|
||||
Reference in New Issue
Block a user