# Delta `0.2.7-rel.001` — publication stable WebSocket Solana standard ## 1. Base requise Base directe attendue : ```text 0.2.7-pre.014-fix.001 workspace.package.version = 0.2.7-pre.14 ``` Le fix `pre.014-fix.001` est strictement documentaire et a uniquement renforcé `prompts/013-V0_2_8_START_PROMPT.md`; il n'a modifié ni runtime, ni Config exécutable, ni dépendance. Commit attendu pour cette livraison : ```text v0.2.7-rel.001 ``` Tag stable attendu après validation : ```text v0.2.7 ``` ## 2. Objectif Publier `0.2.7 — WebSocket Solana standard` sans ajouter de capacité fonctionnelle après la candidate. `rel.001` : - passe `workspace.package.version` de `0.2.7-pre.14` à `0.2.7` ; - clôt `ROADMAP.md`, le plan `014` et la matrice `validation/010` ; - ajoute l'entrée stable `0.2.7` au `CHANGELOG.md` ; - passe `Standard WS` à `Stable` dans l'inventaire composants ; - synchronise les index/documentation de séquence vers le statut publié ; - conserve `prompts/013-V0_2_8_START_PROMPT.md` version 2 comme contrat actif pour `0.2.8`. Aucun fichier Rust, aucune API publique, aucun schema/config runtime, aucune dépendance et aucune feature ne changent dans cette livraison. ## 3. Preuve candidate finale acquise Le checkpoint opérateur fourni le **23 août 2026** après application de `0.2.7-pre.014-fix.001` est vert : ```text cargo fmt --all OK python3 scripts/audit_rust_workspace_rules.py OK General Rust rule audit clean Rust export completeness audit 0 candidate(s) KSP workspace Rust rule audit clean cargo check --workspace OK cargo clippy --workspace --all-targets OK cargo test -p ksp-onchain-transport-lib OK unit 309 passed public API 36 passed release completeness 24 passed Transport HTTP Devnet smoke 1 ignored par défaut Transport WebSocket Devnet smoke 1 ignored par défaut cargo test --workspace OK ``` Les suites workspace Config/Core/Logging/Wallet/Desks passent également. Les tests live, benchmark ou diagnostic explicitement operator-only restent ignorés par défaut conformément à leur contrat. Le smoke WebSocket Devnet avait été exécuté explicitement avec succès à `pre.013` : ```text WsSession::connect -> slotSubscribe -> slotNotification -> unsubscribe par handle -> close explicite ``` `pre.014` et `pre.014-fix.001` n'ont modifié ni le runtime WebSocket ni le graphe de dépendances ; cette preuve live et l'audit `cargo tree` de `pre.013` restent donc valides. ## 4. Surface stable publiée ### HTTP hérité ```text 52/52 méthodes HTTP courantes typées 14/14 méthodes historiques Deprecated/Removed conservées KSP-TRANSPORT-007 appliqué à la surface typed write submissions : aucun resend après dispatch ambigu ``` ### WebSocket Solana standard Les neuf familles publiées sont : ```text account block logs program root signature slot slotsUpdates vote ``` soit : ```text 9 subscribe + 9 unsubscribe = 18/18 opérations standard ``` Partition issue de l'audit normatif courant : ```text stable : account, logs, program, root, signature, slot unstable : block, slotsUpdates, vote ``` Contrats stabilisés : ```text 1 endpoint -> 0..N sessions physiques explicites 1 session -> 0..N subscriptions logiques typées WsSessionId / WsSubscriptionId locaux et stables remote subscription id interne et remappable actor unique propriétaire du socket pending requests / queues / active subscriptions bornés reconnect fini + backoff borné resubscribe déterministe par local id continuity_gap_count observable, sans promesse lossless backpressure isolé par subscription late ACK/notifications nettoyés sans réactivation signatureSubscribe one-shot après notification terminale WsSession::close().await borné control frames Ping/Pong/Close gérés aucun heartbeat applicatif périodique imposé ``` ### Config et frontières ```text std.transport V2 = HTTP + WebSocket lecture V1 = HTTP-only backward compatible WsProtocolKind extensible ; seul solana_standard est publié en 0.2.7 Config -> Transport autorisé Transport -X-> Config/Wallet/Store/Program/tracing direct ``` Les URLs WebSocket et credentials restent redacted dans Debug/logs/snapshots ; les remote subscription IDs et payloads arbitraires ne sont pas projetés comme metadata sûre. ## 5. Fichiers ajoutés ```text deltas/0.2.7/rel.001.md ``` ## 6. Fichiers modifiés ```text Cargo.toml ROADMAP.md CHANGELOG.md docs/000-README.md docs/architecture/004-COMPONENT_INVENTORY.md docs/plans/000-README.md docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md docs/plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md docs/validation/000-README.md docs/validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md prompts/000-README.md ``` Volontairement inchangés : ```text prompts/013-V0_2_8_START_PROMPT.md # version 2 déjà livrée par pre.014-fix.001 crates/ksp-onchain-transport-lib/src/** crates/ksp-onchain-transport-lib/README.md crates/ksp-onchain-transport-lib/USAGE.md config/** crates/ksp-app-*/package.json crates/ksp-app-*/tauri.conf.json ``` Les versions applicatives npm/Tauri des Desks restent `0.2.6` : `0.2.7` ne modifie pas ces applications et leur version propre n'est pas utilisée comme signal de la release Transport. ## 7. Fichiers supprimés Aucun. ## 8. Décisions de clôture Aucune nouvelle décision de protocole n'est introduite par `rel.001`. La publication confirme : 1. le moteur WebSocket standard appartient à `ksp-onchain-transport-lib`, aux côtés du moteur HTTP ; 2. les neuf familles ciblées et leurs unsubscribe constituent la surface standard publiée `0.2.7` ; 3. les trois familles upstream unstable restent exposées avec leur statut, sans les présenter comme garanties provider ; 4. reconnect/resubscribe n'implique aucune garantie de continuité historique ou de backfill ; 5. plusieurs sessions physiques explicites sont autorisées, sans scheduler/pool automatique imposé ; 6. Config V2 adapte vers les settings WebSocket publics sans dépendance inverse ; 7. les extensions provider-specific restent hors `0.2.7` ; 8. `0.2.8` ouvre Helius LaserStream WebSocket en réutilisant ce moteur standard, conformément au prompt version 2. ## 9. Validation finale après application Le passage du signal Cargo à la version stable doit être revalidé avant commit/tag : ```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 ``` Les graphes Cargo et le smoke live n'ont pas besoin d'être rejoués si l'overlay appliqué est exactement `0.2.7-rel.001`, car cette livraison ne change ni dépendance, ni source Rust, ni Config runtime. En cas de modification additionnelle avant publication, réévaluer les gates concernés. Comptages Transport attendus : ```text unit = 309 public API = 36 release completeness = 24 HTTP Devnet smoke = 1 ignored par défaut WebSocket Devnet smoke = 1 ignored par défaut ``` ## 10. Commit et tag stable Après succès du gate : ```text commit : v0.2.7-rel.001 tag : v0.2.7 ``` Aucun tag intermédiaire de prerelease/fix/rel n'est requis. ## 11. Suite Après création du tag stable `v0.2.7`, ouvrir : ```text 0.2.8-pre.001 ``` avec : ```text prompts/013-V0_2_8_START_PROMPT.md ``` La première tranche est un gate strict de relecture/audit Helius actuel, architecture, threat model, dépendances et sizing. Le forecast `pre.001 -> pre.011` du prompt est une prévision souple que `pre.001` doit recalibrer avant toute implémentation lourde.