# Delta `0.2.8-pre.004-fix.001` — redaction Helius Config + couverture Devnet ## 1. Objet Ce fix corrige deux défauts circonscrits de `0.2.8-pre.004` : ```text 1. faux négatif du nouveau canari de redaction `safe_value` Helius ; 2. représentation déterministe incomplète : mainnet était matérialisé, Devnet ne l'était pas encore. ``` Le résolveur Config, le mapping Config -> Transport et le moteur WebSocket restent inchangés. Version workspace : ```text 0.2.8-pre.4.fix.1 ``` Livraison / commit attendu : ```text 0.2.8-pre.004-fix.001 v0.2.8-pre.004-fix.001 ``` Aucun tag prerelease. ## 2. Preuve opérateur ayant déclenché le fix Le checkpoint `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 cargo test --workspace FAIL sur le même test Config ``` L'échec exact est : ```text observé = wss://mainnet.helius-rpc.com/?api-key=******** attendu = ******** ``` Le test avait déjà prouvé avant cette assertion que le schema accepte `helius_laserstream`, que l'adapter produit `WsProtocolKind::HeliusLaserStream` et que l'URL runtime contient la clé Helius résolue. ## 3. Redaction Config confirmée Le contrat historique Config est segmentaire pour une chaîne composée : ```text source composée safe_value https://rpc.example/?token=${SECRET} -> https://rpc.example/?token=******** token=${SECRET} -> token=******** ``` La projection sûre conserve donc les littéraux non sensibles et masque uniquement le segment secret. Pour Helius : ```text mainnet runtime = wss://mainnet.helius-rpc.com/?api-key= mainnet safe_value = wss://mainnet.helius-rpc.com/?api-key=******** devnet runtime = wss://devnet.helius-rpc.com/?api-key= devnet safe_value = wss://devnet.helius-rpc.com/?api-key=******** ``` La clé réelle doit rester absente de `safe_value` et de toutes les représentations `Debug`. ## 4. Couverture Helius Devnet ajoutée La documentation Helius WebSocket actuelle expose un endpoint unifié par réseau : ```text mainnet wss://mainnet.helius-rpc.com/?api-key= devnet wss://devnet.helius-rpc.com/?api-key= ``` `pre.004` avait documenté les deux réseaux dans le plan mais n'avait matérialisé que mainnet dans l'exemple et la fixture Config. Le fix complète ce manque. Décision de structure : ```text mainnet et devnet vivent dans des profils Config distincts ; un même profil logique ne mélange pas les deux clusters ; la même variable KSP_SECRET_HELIUS_API_KEY peut alimenter les deux URLs ; config/std.transport.json reste standard-only. ``` L'exemple versionné ajoute un profil `devnet_helius`. La fixture Config ajoute un profil `helius_devnet` et le test charge explicitement ce profil en plus du profil mainnet par défaut. ## 5. Correction du test Le canari devient : ```text helius_laserstream_mainnet_and_devnet_api_key_map_to_protocol_and_safe_redaction ``` Il vérifie pour **mainnet et devnet** : ```text provider = helius cluster exact protocol = WsProtocolKind::HeliusLaserStream URL runtime exacte avec la clé résolue safe_value exact avec segment ******** provenance = KSP_SECRET_HELIUS_API_KEY / Process Debug sans la clé réelle composition avec HeliusLaserStreamWsSession au moins sur le profil Devnet dédié ``` ## 6. Invariants non modifiés Aucune modification n'est apportée à : ```text ConfigEnvironment / moteur de résolution sensitivity / provenance semantics JSON Schema Transport V2 mapping helius_laserstream -> HeliusLaserStream WsEndpointUrl WsSession / façades / actor config/std.transport.json canonique transactionSubscribe heartbeat new dependency ``` `.env.example` conserve une seule variable `KSP_SECRET_HELIUS_API_KEY`, suffisante pour les deux endpoints Helius. ## 7. Fichiers de la livraison Nouveau : ```text deltas/0.2.8/pre.004-fix.001.md ``` Modifiés : ```text Cargo.toml config/examples/std.transport.example.json crates/ksp-config-lib/unit_tests/fixtures/std.transport.json crates/ksp-config-lib/unit_tests/transport.rs crates/ksp-config-lib/USAGE.md docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md ``` Inchangés volontairement : ```text config/std.transport.json config/schemas/std.transport.schema.json .env.example Transport WebSocket runtime ``` ## 8. Validation à rejouer ```bash cargo fmt --all python3 scripts/audit_rust_workspace_rules.py cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-config-lib cargo test -p ksp-onchain-transport-lib cargo test --workspace ``` `pre.004` + `fix.001` restent non fermés jusqu'à réception de ce checkpoint intégralement vert.