From 7cdf5e80c9f6f19ba8584f7a23945df6bb400811 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Sun, 23 Aug 2026 20:01:28 +0200 Subject: [PATCH] v0.2.8-pre.011 --- Cargo.toml | 4 +- deltas/0.2.8/pre.011.md | 207 +++ docs/000-README.md | 4 +- docs/plans/000-README.md | 4 +- docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md | 8 +- ...0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md | 112 +- docs/validation/000-README.md | 4 +- ...011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md | 71 +- prompts/000-README.md | 3 +- prompts/014-V0_2_9_START_PROMPT.md | 1278 +++++++++++++++++ 10 files changed, 1671 insertions(+), 24 deletions(-) create mode 100644 deltas/0.2.8/pre.011.md create mode 100644 prompts/014-V0_2_9_START_PROMPT.md diff --git a/Cargo.toml b/Cargo.toml index b596e70..71ce395 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 234 +# version: 235 [workspace] resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"] [workspace.package] -version = "0.2.8-pre.10" +version = "0.2.8-pre.11" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/deltas/0.2.8/pre.011.md b/deltas/0.2.8/pre.011.md new file mode 100644 index 0000000..2ebd0a1 --- /dev/null +++ b/deltas/0.2.8/pre.011.md @@ -0,0 +1,207 @@ + + + +# Delta `0.2.8-pre.011` — candidate finale + indexes + prompt `0.2.9` + +## Objet + +Fermer la candidate documentaire de `0.2.8` après le gate opérateur complet de `pre.010`, synchroniser les index qui décrivaient encore des états intermédiaires de la release et préparer un prompt de démarrage `0.2.9` autonome, conforme à `docs/rules/PROMPT_STRUCTURE.md`, avant la publication stable `rel.001`. + +Cette tranche ne modifie aucune capacité runtime HTTP/WebSocket, aucun contrat Config et aucune dépendance Rust. + +## Base et preuve opérateur héritée + +Le gate `0.2.8-pre.10` fourni le 2026-08-23 est entièrement vert : + +```text +cargo fmt --all OK +python3 scripts/audit_rust_workspace_rules.py clean + General Rust rule audit clean + Rust export completeness audit 0 candidate(s) + KSP workspace Rust rule audit clean +cargo check --workspace OK / sans warning +cargo clippy --workspace --all-targets OK / sans warning +Transport unit 335/335 +Transport public API 41/41 +release completeness 34/34 +Transport doctests 4/4 +cargo test --workspace OK +cargo tree -p ksp-onchain-transport-lib exécuté +cargo tree -p ksp-onchain-transport-lib --duplicates exécuté +cargo tree --duplicates exécuté +``` + +Le graphe Transport conserve uniquement ses dépendances acquises. Les doublons ciblés visibles dans ce sous-graphe (`syn` 2/3 et `webpki-roots` 0.26/1.0) sont transitifs. Les autres duplications du workspace proviennent principalement des stacks Tauri/GTK, JSON Schema et Wallet/Solana crypto ; aucune dérive nouvelle propre à `0.2.8` n'est identifiée. + +Verdict hérité : **`pre.010` DONE.** + +## Candidate fonctionnelle `0.2.8` + +L'état que `pre.011` fige au niveau candidate reste : + +```text +HTTP 52 méthodes current + 14 historical +Solana Standard WebSocket 9 familles / 18 subscribe-unsubscribe +Helius standard réutilisé account/logs/program/root/signature/slot/slotsUpdates +Helius extension transactionSubscribe / transactionUnsubscribe +Helius absent block / vote +slotsUpdates unstable +heartbeat Helius WebSocket Ping control frame / 60 s +Config V2 helius_laserstream + provenance/redaction secret +moteur physique un seul WsSession actor partagé +smoke Helius live reporté vers future intégration/orchestration +LaserStream gRPC backend distinct, hors namespace WebSocket +``` + +Aucun changement runtime n'est nécessaire dans `pre.011`. + +## Prompt `0.2.9` + +Création de : + +```text +prompts/014-V0_2_9_START_PROMPT.md +``` + +Titre : + +```text +0.2.9 — Yellowstone gRPC standard/provider-neutral +``` + +Le prompt a été construit après relecture de : + +```text +docs/rules/PROMPT_STRUCTURE.md +prompts/010-V0_2_5_START_PROMPT.md +prompts/011-V0_2_6_START_PROMPT.md +prompts/012-V0_2_7_START_PROMPT.md +prompts/013-V0_2_8_START_PROMPT.md +``` + +Le squelette reprend la structure stricte récente de `0.2.7`/`0.2.8`, tout en conservant la profondeur métier/threat-model/sizing des prompts `0.2.5`/`0.2.6`. + +Le prompt contient explicitement les rubriques requises par `PROMPT_STRUCTURE.md` : + +```text +identité/base exacte +mission/résultat +sources internes ordonnées +sources externes à réauditer +état stable à préserver +frontières architecturales/dependencies +décisions acquises/questions ouvertes +objectifs/livrables/hors périmètre +sécurité/API/lifecycle/resources +pre.001 détaillée + gate de sortie +prévision souple initiale détaillée +version/deltas/commits/archives/tags +validation opérateur +critères de clôture +release suivante +instruction d'ouverture +``` + +### Gate `0.2.9-pre.001` + +Le prompt interdit l'implémentation lourde Yellowstone avant : + +- audit du service/proto upstream réellement courant ; +- classification standard/provider-extension de chaque RPC/message ; +- audit de `Subscribe`, unary RPCs, replay/from_slot et extensions deshred ; +- comparaison des stratégies `yellowstone-grpc-client`, `yellowstone-grpc-proto + tonic` ou wire KSP borné ; +- audit licence/MSRV/features/build-dependencies/transitifs ; +- architecture gRPC distincte de HTTP/WS ; +- threat model ; +- sizing et recalibrage du forecast. + +Le snapshot upstream du 2026-08-23 est uniquement informatif. Le repository/master observé comporte un workspace AGPL-3.0 et des versions Yellowstone/Tonic/Prost qui ne sont pas nécessairement synchronisées avec les releases/crates stables. Le prompt exige donc l'audit de la licence exacte de chaque crate/proto/source réellement utilisé avant toute dépendance, copie ou génération vendored dans KSP MIT. + +### Forecast initial souple `0.2.9` + +Le prompt fournit un forecast de départ détaillé : + +```text +pre.001 audit/matrice/licences/dependencies/architecture/threat-model/sizing +pre.002 stratégie proto/client + settings/errors/façade provider-neutral +pre.003 connexion/TLS/metadata + lifecycle minimal + unary canaries +pre.004 SubscribeRequest foundation + validations/bounds communs +pre.005 Accounts + Slots +pre.006 Transactions + transaction_status +pre.007 Blocks + block_meta + entry / autres variantes retenues +pre.008 stream bidirectionnel + mutation/Ping/backpressure/shutdown +pre.009 reconnect/resubscribe/from_slot/replay/adversarial +pre.010 Config -> Transport gRPC si retenu par l'audit +pre.011 compliance Yellowstone + non-régressions HTTP/WS +pre.012 live opt-in si sûr + README/USAGE + cargo tree final +pre.013 workspace final + plan/matrice/indexes + prompt 0.2.10 +rel.001 publication stable stricte +``` + +Ce forecast est explicitement recalibrable en `pre.001`, autorise fixes et prereleases supplémentaires, et impose un split avant client lourd si la surface réelle est trop grande pour une release concrète raisonnable. + +## Synchronisation documentaire + +Les index et la séquence fonctionnelle sont mis à jour pour refléter l'état candidate réel de `0.2.8` et l'existence du prompt `0.2.9` : + +```text +docs/000-README.md +docs/plans/000-README.md +docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md +docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md +docs/validation/000-README.md +docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md +prompts/000-README.md +``` + +`ROADMAP.md` et `CHANGELOG.md` restent volontairement inchangés : leur synchronisation stable appartient à `rel.001`, conformément au workflow KSP. + +## Version + +```text +workspace.package.version = 0.2.8-pre.11 +livraison = 0.2.8-pre.011 +commit attendu = v0.2.8-pre.011 +Git tag = aucun +``` + +## Fichiers de la livraison + +Overlay attendu : + +```text +Cargo.toml +deltas/0.2.8/pre.011.md +docs/000-README.md +docs/plans/000-README.md +docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md +docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md +docs/validation/000-README.md +docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md +prompts/000-README.md +prompts/014-V0_2_9_START_PROMPT.md +``` + +## Gate opérateur + +```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 +``` + +Comptages Transport attendus, inchangés : + +```text +unit 335 +public API 41 +release completeness 34 +doctests 4 +``` + +Les `cargo tree` n'ont pas besoin d'être rejoués pour cette tranche documentaire/versionnée : aucun manifest de dépendances n'est modifié hors la version workspace, et les trois graphes finaux ont déjà été fournis au gate `pre.010`. + +Si ce gate est vert, la prochaine tranche est `0.2.8-rel.001`. `pre.012+` reste possible uniquement si un défaut réel est découvert. diff --git a/docs/000-README.md b/docs/000-README.md index dbc309e..d411803 100644 --- a/docs/000-README.md +++ b/docs/000-README.md @@ -1,5 +1,5 @@ - + # Documentation KSP @@ -81,7 +81,7 @@ D'autres sous-répertoires seront ajoutés uniquement lorsque leur rôle aura é ## Documents de planification -Le plan historique de la phase fondatrice clôturée est conservé dans [`plans/001-V0_0_3_PLAN.md`](plans/001-V0_0_3_PLAN.md). La séquence active des premières releases fonctionnelles est définie dans [`plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md`](plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md). Le plan détaillé de la release stable `0.1.1` est conservé comme historique clôturé dans [`plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md`](plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.2` est conservé comme historique clôturé dans [`plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md`](plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.3 — Configuration foundation` est conservé comme historique clôturé dans [`plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md`](plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.4 — ksp-app-config-desk` est conservé comme historique clôturé dans [`plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md`](plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md), avec sa matrice finale [`validation/001-V0_1_4_CONFIG_DESKTOP.md`](validation/001-V0_1_4_CONFIG_DESKTOP.md). Son prompt d'ouverture historique reste [`../prompts/004-V0_1_4_START_PROMPT.md`](../prompts/004-V0_1_4_START_PROMPT.md). La release stable `0.2.0` clôt l'audit de bot3 et le découpage de la série. Son plan directeur est conservé comme historique clôturé dans [`plans/007-V0_2_0_SERIES_PLANNING.md`](plans/007-V0_2_0_SERIES_PLANNING.md), avec sa matrice finale [`validation/002-V0_2_0_SERIES_PLANNING.md`](validation/002-V0_2_0_SERIES_PLANNING.md). La release stable `0.2.1 — HTTP Solana foundation` a été ouverte par [`../prompts/006-V0_2_1_START_PROMPT.md`](../prompts/006-V0_2_1_START_PROMPT.md). Son gate de sizing et sa matrice exhaustive sont conservés dans [`plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md), avec la validation finale [`validation/003-V0_2_1_ONCHAIN_HTTP.md`](validation/003-V0_2_1_ONCHAIN_HTTP.md), README/USAGE Transport et le smoke Devnet opt-in de composition Config -> Transport. Le prompt [`../prompts/007-V0_2_2_START_PROMPT.md`](../prompts/007-V0_2_2_START_PROMPT.md) a ouvert la release stable `0.2.2 — HTTP Accounts + Tokens + Cluster`. Son plan clôturé [`plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md`](plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md) conserve l'audit et l'implémentation des 22 wrappers typés, tandis que [`validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md`](validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md) enregistre les validations déterministes, les graphes Cargo et les deux smokes Devnet passés avant publication. Le prompt [`../prompts/008-V0_2_3_START_PROMPT.md`](../prompts/008-V0_2_3_START_PROMPT.md) a ouvert la release stable `0.2.3 — HTTP Transactions`. Son plan clôturé [`plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`](plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md) conserve l'audit et l'implémentation des 11 wrappers ; le réaudit [`validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md`](validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md) confirme la complétude des 37 wrappers HTTP typés et [`validation/006-V0_2_3_HTTP_TRANSACTIONS.md`](validation/006-V0_2_3_HTTP_TRANSACTIONS.md) enregistre les validations finales, graphes Cargo et deux smokes Devnet passés avant publication. Le prompt [`../prompts/009-V0_2_4_START_PROMPT.md`](../prompts/009-V0_2_4_START_PROMPT.md) a ouvert la release stable `0.2.4 — HTTP Blocks + Economics + compliance HTTP finale`. Son plan clôturé [`plans/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md`](plans/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md) conserve l’implémentation des 15 wrappers et la compliance `52/52 + 14/14`; la matrice finale [`validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md`](validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md) enregistre le réaudit SIMD/inventaire, les canaries globales et les preuves opérateur avant publication. Le prompt [`../prompts/010-V0_2_5_START_PROMPT.md`](../prompts/010-V0_2_5_START_PROMPT.md), finalisé par `0.2.4-pre.009-fix.001`, ouvre `0.2.5 — Wallet foundation` sur la base stable `v0.2.4`. Son plan historique clôturé [`plans/012-V0_2_5_WALLET_FOUNDATION_PLAN.md`](plans/012-V0_2_5_WALLET_FOUNDATION_PLAN.md) part du gate `pre.001` (héritage, threat model offline, VIEW/OWNER indépendants et niveau B read-only), puis matérialise la crate en `pre.002`, le wire/transcript en `pre.003`, les primitives Argon2id/XChaCha20-Poly1305 en `pre.004`, les payloads/create/open en `pre.005`, la persistence en `pre.006`, l'administration/signature en `pre.007` et les adapters transfer en `pre.008`. `pre.009` ferme l'audit adversarial/interoperability/compliance dans [`validation/008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](validation/008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md) avant la documentation finale `pre.010` ; `pre.010` finalise [`../crates/ksp-wallet-lib/README.md`](../crates/ksp-wallet-lib/README.md), [`../crates/ksp-wallet-lib/USAGE.md`](../crates/ksp-wallet-lib/USAGE.md), la spec, les graphes et la matrice ; `pre.010-fix.001`–`fix.003` ferment ensuite la mise à niveau Dalek et la normalisation Rust/audit structurel. `0.2.5-rel.001` publie la release stable et [`../prompts/011-V0_2_6_START_PROMPT.md`](../prompts/011-V0_2_6_START_PROMPT.md) ouvre `0.2.6 — Wallet Desk`. Le gate `0.2.6-pre.001` est conservé dans [`plans/013-V0_2_6_WALLET_DESK_PLAN.md`](plans/013-V0_2_6_WALLET_DESK_PLAN.md) : il réaudite Config Desk et les APIs finales, retient le gabarit desktop, fixe `std.wallet`, la composition Config/Wallet/HTTP/Logging, les secrets `KSP_SECRET_WALLET_PASS_*`, les frontières VIEW/OWNER et la trajectoire de validation. `pre.002`–`pre.014` matérialisent ensuite le shell Tauri, Config Wallet/composite, inventory, create/open, balance HTTP, import/export, metadata, rotations, révocation VIEW forte, compliance et polish desktop. `pre.015` fige le wire binaire `.kspwallet` V2, `pre.016` matérialise les APIs génériques/versionnées et le runtime V2, puis `pre.017` ajoute la migration explicite OWNER-authentifiée V1 -> V2. `pre.018` ferme le runtime Tauri packagé Config/resources et la documentation candidate ; `pre.018-fix.001` corrige le canari d'ownership Config, après quoi le gate workspace et le build final Linux sont verts. `pre.018-fix.002` renforce uniquement le contrat de reprise `0.2.7`. `0.2.6-rel.001` publie cette surface stable et [`../prompts/012-V0_2_7_START_PROMPT.md`](../prompts/012-V0_2_7_START_PROMPT.md) devient le prochain point d'entrée. Le gate `0.2.7-pre.001` ouvre la release WebSocket standard dans [`plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md`](plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md) ; la matrice normative puis finale est conservée dans [`validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md`](validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md). `0.2.7-pre.014` ferme la candidate technique/documentaire après validation 18/18, smoke WebSocket Devnet et audit du graphe Cargo ; `pre.014-fix.001` renforce uniquement le prompt suivant. `0.2.7-rel.001` publie désormais `0.2.7 — WebSocket Solana standard` stable et [`../prompts/013-V0_2_8_START_PROMPT.md`](../prompts/013-V0_2_8_START_PROMPT.md) devient le contrat actif pour `0.2.8 — Helius LaserStream WebSocket` depuis `v0.2.7`. `0.2.8-pre.001` ouvre maintenant le gate Helius dans [`plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md`](plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md), avec la matrice [`validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md`](validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md) : protocol `helius_laserstream`, six familles standard Helius supportées, trois unstable rejetées, `transactionSubscribe`/`transactionUnsubscribe`, `tokenAccounts`, heartbeat provider et forecast recalibré. +Le plan historique de la phase fondatrice clôturée est conservé dans [`plans/001-V0_0_3_PLAN.md`](plans/001-V0_0_3_PLAN.md). La séquence active des premières releases fonctionnelles est définie dans [`plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md`](plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md). Le plan détaillé de la release stable `0.1.1` est conservé comme historique clôturé dans [`plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md`](plans/003-V0_1_1_CORE_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.2` est conservé comme historique clôturé dans [`plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md`](plans/004-V0_1_2_LOGGING_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.3 — Configuration foundation` est conservé comme historique clôturé dans [`plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md`](plans/005-V0_1_3_CONFIG_FOUNDATION_PLAN.md). Le plan détaillé de la release stable `0.1.4 — ksp-app-config-desk` est conservé comme historique clôturé dans [`plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md`](plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md), avec sa matrice finale [`validation/001-V0_1_4_CONFIG_DESKTOP.md`](validation/001-V0_1_4_CONFIG_DESKTOP.md). Son prompt d'ouverture historique reste [`../prompts/004-V0_1_4_START_PROMPT.md`](../prompts/004-V0_1_4_START_PROMPT.md). La release stable `0.2.0` clôt l'audit de bot3 et le découpage de la série. Son plan directeur est conservé comme historique clôturé dans [`plans/007-V0_2_0_SERIES_PLANNING.md`](plans/007-V0_2_0_SERIES_PLANNING.md), avec sa matrice finale [`validation/002-V0_2_0_SERIES_PLANNING.md`](validation/002-V0_2_0_SERIES_PLANNING.md). La release stable `0.2.1 — HTTP Solana foundation` a été ouverte par [`../prompts/006-V0_2_1_START_PROMPT.md`](../prompts/006-V0_2_1_START_PROMPT.md). Son gate de sizing et sa matrice exhaustive sont conservés dans [`plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md`](plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md), avec la validation finale [`validation/003-V0_2_1_ONCHAIN_HTTP.md`](validation/003-V0_2_1_ONCHAIN_HTTP.md), README/USAGE Transport et le smoke Devnet opt-in de composition Config -> Transport. Le prompt [`../prompts/007-V0_2_2_START_PROMPT.md`](../prompts/007-V0_2_2_START_PROMPT.md) a ouvert la release stable `0.2.2 — HTTP Accounts + Tokens + Cluster`. Son plan clôturé [`plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md`](plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md) conserve l'audit et l'implémentation des 22 wrappers typés, tandis que [`validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md`](validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md) enregistre les validations déterministes, les graphes Cargo et les deux smokes Devnet passés avant publication. Le prompt [`../prompts/008-V0_2_3_START_PROMPT.md`](../prompts/008-V0_2_3_START_PROMPT.md) a ouvert la release stable `0.2.3 — HTTP Transactions`. Son plan clôturé [`plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`](plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md) conserve l'audit et l'implémentation des 11 wrappers ; le réaudit [`validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md`](validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md) confirme la complétude des 37 wrappers HTTP typés et [`validation/006-V0_2_3_HTTP_TRANSACTIONS.md`](validation/006-V0_2_3_HTTP_TRANSACTIONS.md) enregistre les validations finales, graphes Cargo et deux smokes Devnet passés avant publication. Le prompt [`../prompts/009-V0_2_4_START_PROMPT.md`](../prompts/009-V0_2_4_START_PROMPT.md) a ouvert la release stable `0.2.4 — HTTP Blocks + Economics + compliance HTTP finale`. Son plan clôturé [`plans/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md`](plans/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md) conserve l’implémentation des 15 wrappers et la compliance `52/52 + 14/14`; la matrice finale [`validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md`](validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md) enregistre le réaudit SIMD/inventaire, les canaries globales et les preuves opérateur avant publication. Le prompt [`../prompts/010-V0_2_5_START_PROMPT.md`](../prompts/010-V0_2_5_START_PROMPT.md), finalisé par `0.2.4-pre.009-fix.001`, ouvre `0.2.5 — Wallet foundation` sur la base stable `v0.2.4`. Son plan historique clôturé [`plans/012-V0_2_5_WALLET_FOUNDATION_PLAN.md`](plans/012-V0_2_5_WALLET_FOUNDATION_PLAN.md) part du gate `pre.001` (héritage, threat model offline, VIEW/OWNER indépendants et niveau B read-only), puis matérialise la crate en `pre.002`, le wire/transcript en `pre.003`, les primitives Argon2id/XChaCha20-Poly1305 en `pre.004`, les payloads/create/open en `pre.005`, la persistence en `pre.006`, l'administration/signature en `pre.007` et les adapters transfer en `pre.008`. `pre.009` ferme l'audit adversarial/interoperability/compliance dans [`validation/008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](validation/008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md) avant la documentation finale `pre.010` ; `pre.010` finalise [`../crates/ksp-wallet-lib/README.md`](../crates/ksp-wallet-lib/README.md), [`../crates/ksp-wallet-lib/USAGE.md`](../crates/ksp-wallet-lib/USAGE.md), la spec, les graphes et la matrice ; `pre.010-fix.001`–`fix.003` ferment ensuite la mise à niveau Dalek et la normalisation Rust/audit structurel. `0.2.5-rel.001` publie la release stable et [`../prompts/011-V0_2_6_START_PROMPT.md`](../prompts/011-V0_2_6_START_PROMPT.md) ouvre `0.2.6 — Wallet Desk`. Le gate `0.2.6-pre.001` est conservé dans [`plans/013-V0_2_6_WALLET_DESK_PLAN.md`](plans/013-V0_2_6_WALLET_DESK_PLAN.md) : il réaudite Config Desk et les APIs finales, retient le gabarit desktop, fixe `std.wallet`, la composition Config/Wallet/HTTP/Logging, les secrets `KSP_SECRET_WALLET_PASS_*`, les frontières VIEW/OWNER et la trajectoire de validation. `pre.002`–`pre.014` matérialisent ensuite le shell Tauri, Config Wallet/composite, inventory, create/open, balance HTTP, import/export, metadata, rotations, révocation VIEW forte, compliance et polish desktop. `pre.015` fige le wire binaire `.kspwallet` V2, `pre.016` matérialise les APIs génériques/versionnées et le runtime V2, puis `pre.017` ajoute la migration explicite OWNER-authentifiée V1 -> V2. `pre.018` ferme le runtime Tauri packagé Config/resources et la documentation candidate ; `pre.018-fix.001` corrige le canari d'ownership Config, après quoi le gate workspace et le build final Linux sont verts. `pre.018-fix.002` renforce uniquement le contrat de reprise `0.2.7`. `0.2.6-rel.001` publie cette surface stable et [`../prompts/012-V0_2_7_START_PROMPT.md`](../prompts/012-V0_2_7_START_PROMPT.md) devient le prochain point d'entrée. Le gate `0.2.7-pre.001` ouvre la release WebSocket standard dans [`plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md`](plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md) ; la matrice normative puis finale est conservée dans [`validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md`](validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md). `0.2.7-pre.014` ferme la candidate technique/documentaire après validation 18/18, smoke WebSocket Devnet et audit du graphe Cargo ; `pre.014-fix.001` renforce uniquement le prompt suivant. `0.2.7-rel.001` publie `0.2.7 — WebSocket Solana standard` stable et [`../prompts/013-V0_2_8_START_PROMPT.md`](../prompts/013-V0_2_8_START_PROMPT.md) ouvre `0.2.8 — Helius LaserStream WebSocket`. Le plan [`plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md`](plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md) et la matrice [`validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md`](validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md) sont désormais en candidate `pre.011` : protocol `helius_laserstream`, sept familles standard Helius (`account/logs/program/root/signature/slot/slotsUpdates`), extension `transactionSubscribe`/`transactionUnsubscribe`, `block/vote` absents, heartbeat Ping 60 s, Config/secrets redacted, lifecycle adversarial et graphes Cargo finaux validés. [`../prompts/014-V0_2_9_START_PROMPT.md`](../prompts/014-V0_2_9_START_PROMPT.md) est préparé pour ouvrir Yellowstone gRPC standard/provider-neutral après publication stable `v0.2.8`. ## Spécifications de formats diff --git a/docs/plans/000-README.md b/docs/plans/000-README.md index 5e6d936..4fb06c2 100644 --- a/docs/plans/000-README.md +++ b/docs/plans/000-README.md @@ -1,5 +1,5 @@ - + # Plans KSP @@ -23,7 +23,7 @@ Un plan décrit le périmètre, les décisions déjà acquises, les questions ou - [`012-V0_2_5_WALLET_FOUNDATION_PLAN.md`](012-V0_2_5_WALLET_FOUNDATION_PLAN.md) — plan historique clôturé de la release stable `0.2.5 — Wallet foundation`, ouvert par `pre.001`, livré jusqu’à `pre.010`, renforcé par `pre.010-fix.001`–`fix.003` pour Dalek 3 et la normalisation Rust/audit structurel, puis publié par `rel.001`; il couvre `.kspwallet` V1, VIEW/OWNER, crypto, persistence, administration, transfer et compliance. - [`013-V0_2_6_WALLET_DESK_PLAN.md`](013-V0_2_6_WALLET_DESK_PLAN.md) — plan historique clôturé de la release stable `0.2.6 — Wallet Desk`, ouvert par `pre.001`, étendu en `pre.015`–`pre.017` au wire binaire `.kspwallet` V2, aux APIs multi-version et à la migration V1 -> V2, puis fermé par `pre.018`/`fix.001` avec le runtime Tauri packagé et le build final vert avant publication `rel.001`. - [`014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md`](014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md) — plan historique clôturé de la release stable `0.2.7 — WebSocket Solana standard`, ouvert par `pre.001`, exécuté jusqu’à `pre.014`, corrigé documentairement par `pre.014-fix.001` puis publié par `rel.001`; il conserve l’inventaire officiel 18 méthodes, le modèle session/subscription, le threat model, les preuves de compliance/smoke/dépendances et la préparation de `0.2.8`. -- [`015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md`](015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md) — plan actif de `0.2.8 — Helius LaserStream WebSocket`, ouvert par `pre.001`; il conserve l’audit Helius du 23 août 2026, la matrice provider, le choix `HeliusLaserStream`, la stratégie transaction/heartbeat/Config/secrets et le forecast souple recalibré. +- [`015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md`](015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md) — plan candidat de `0.2.8 — Helius LaserStream WebSocket`, ouvert par `pre.001` et fermé techniquement/documentairement jusqu’à `pre.011`; il conserve la surface finale Helius `7 standard + transaction`, heartbeat/Config/secrets, l’historique des fixes heartbeat, la stratégie live architecture-safe, les graphes Cargo finaux et la préparation du prompt `0.2.9`. Le `pre.001` de chaque release fonctionnelle peut introduire son propre plan détaillé lorsque la release s'ouvre. diff --git a/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md b/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md index bbc5eea..6eacb30 100644 --- a/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md +++ b/docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md @@ -1,5 +1,5 @@ - + # Séquence des releases fonctionnelles KSP @@ -465,11 +465,11 @@ La candidate atteint `pre.014` après matérialisation des 9 familles standard, ### `0.2.8` — Helius LaserStream WebSocket -Mission active : étendre le moteur WebSocket standard avec la surface Helius LaserStream WebSocket actuelle sans copier le client/session actor. Le gate `pre.001` est conservé dans [`015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md`](015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md) et la matrice active dans [`../validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md`](../validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md). +Mission candidate : étendre le moteur WebSocket standard avec la surface Helius LaserStream WebSocket actuelle sans copier le client/session actor. Le gate et l'historique complet sont conservés dans [`015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md`](015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md) et la matrice candidate dans [`../validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md`](../validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md). -L'audit Helius du 23 août 2026 retient `helius_laserstream` comme nouveau protocol kind : les six familles standard `account/logs/program/root/signature/slot` réutilisent les wrappers publiés, tandis que `block/slotsUpdates/vote` sont rejetées avant I/O sur Helius selon l'index provider exhaustif. `transactionSubscribe`/`transactionUnsubscribe` et `tokenAccounts` constituent la nouvelle surface typed principale. `notifyOn`, désormais deprecated et no-op depuis Agave 4.2, n'est pas exposé. Un heartbeat Helius-only est planifié dans l'actor existant pour le timeout d'inactivité provider. +Le réaudit final Helius du 23 août 2026 retient `helius_laserstream` comme protocol kind WebSocket : les sept familles standard `account/logs/program/root/signature/slot/slotsUpdates` réutilisent les wrappers publiés, `block/vote` restent absents et `transactionSubscribe`/`transactionUnsubscribe` constitue l'extension provider-specific. `slotsUpdates` conserve son statut unstable, `notifyOn` deprecated/no-op n'est pas exposé et le heartbeat Helius-only envoie un WebSocket Ping control frame toutes les 60 secondes depuis l'actor partagé. -Le forecast souple est recalibré jusqu'à `pre.010` avant `rel.001`; le numéro final reste non contractuel. Aucun SDK Helius, aucune dépendance gRPC et aucun replay historique WebSocket ne sont introduits. +`pre.010` ferme README/USAGE, la stratégie smoke live architecture-safe et les graphes Cargo finaux ; `pre.011` prépare la candidate documentaire et [`../../prompts/014-V0_2_9_START_PROMPT.md`](../../prompts/014-V0_2_9_START_PROMPT.md). Aucun SDK Helius, aucune dépendance gRPC et aucun replay historique WebSocket ne sont introduits. La publication stable reste réservée à `rel.001`. ### `0.2.9` — Yellowstone gRPC standard diff --git a/docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md b/docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md index 50a9eee..3db23c6 100644 --- a/docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md +++ b/docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md @@ -1,9 +1,9 @@ - + # Plan `0.2.8` — Helius LaserStream WebSocket -> **Statut : `0.2.8-pre.009` est validé intégralement par l’opérateur : fmt/audit/check/Clippy, 335 unit Transport, 41 API, 33 completeness, 4 doctests et workspace complet verts. `0.2.8-pre.010` synchronise README/USAGE, ferme la stratégie de smoke live sans violer l’ownership Config/Transport et demande le cargo tree final à l’opérateur.** +> **Statut : `0.2.8-pre.010` est validé intégralement par l’opérateur : fmt/audit/check/Clippy, 335 unit Transport, 41 API, 34 completeness, 4 doctests, workspace complet et trois audits `cargo tree` exécutés. `0.2.8-pre.011` prépare la candidate documentaire finale, ferme plan/matrice/indexes et crée le prompt autonome `0.2.9`.** ## 1. Objet, base et état courant @@ -41,14 +41,15 @@ pre.007-fix.003 heartbeat Transport fermé pre.007-fix.004 alignement canari dependency-firewall Tokio dev validé pre.008 adversarial provider/capabilities/payload/security validé pre.009 compliance provider/current + slotsUpdates Helius validé -pre.010 documentation/smoke policy/cargo tree final — préparé +pre.010 documentation/smoke policy/cargo tree final validé +pre.011 clôture candidate plan/matrice/indexes + prompt 0.2.9 — préparé -workspace.package.version courant = 0.2.8-pre.10 -commit attendu = v0.2.8-pre.010 +workspace.package.version courant = 0.2.8-pre.11 +commit attendu = v0.2.8-pre.011 aucun tag prerelease ``` -Le checkpoint opérateur de `pre.003` est intégralement vert : `cargo fmt`, audit Rust, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, tests Transport et `cargo test --workspace`. Les six familles standard Helius sont donc acquises sans dette de gate avant l'ouverture de Config Helius en `pre.004`. +Le checkpoint opérateur de `pre.010` est intégralement vert, y compris les trois audits `cargo tree`. La candidate `pre.011` ne rouvre aucune capacité runtime : elle synchronise uniquement la documentation de clôture et le contrat de démarrage `0.2.9`. ## 2. Forecast souple courant @@ -82,9 +83,9 @@ pre.007 DONE — heartbeat Helius WebSocket/idle + timers + interaction reconne pre.008 DONE — provider adversarial lifecycle + capability guards + payload/backpressure + security/redaction pre.009 DONE — compliance Helius WebSocket + réconciliation documentaire `slotsUpdates` + non-régressions Solana standard 18/18 + HTTP 52/14 + Config/API/dependency-firewall canaries -pre.010 PREPARED — stratégie smoke Helius live fermée sans nouveau cross-crate owner + README/USAGE - + cargo tree direct/duplicates final à rejouer par l’opérateur -pre.011 validation workspace finale + fermeture plan/matrice/indexes + prompt 0.2.9 +pre.010 DONE — stratégie smoke Helius live fermée sans nouveau cross-crate owner + README/USAGE + + cargo tree direct/duplicates final exécutés et inspectés +pre.011 PREPARED — validation workspace finale + fermeture plan/matrice/indexes + prompt 0.2.9 autonome rel.001 publication stable stricte ``` @@ -1523,3 +1524,96 @@ cargo tree --duplicates `pre.011` reste bloqué jusqu’au gate complet et à l’inspection de ces graphes. +## 23. Fermeture `pre.010` et préparation `pre.011` + +### 23.1 Gate opérateur `0.2.8-pre.10` + +Le checkpoint opérateur du 23 août 2026 est intégralement vert : + +```text +[x] cargo fmt --all +[x] 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 +[x] cargo check --workspace +[x] cargo clippy --workspace --all-targets +[x] Transport unit = 335/335 +[x] Transport public API = 41/41 +[x] release completeness = 34/34 +[x] Transport doctests = 4/4 +[x] cargo test --workspace +[x] cargo tree -p ksp-onchain-transport-lib +[x] cargo tree -p ksp-onchain-transport-lib --duplicates +[x] cargo tree --duplicates +``` + +Le graphe Transport direct reste centré sur les dépendances déjà acquises (`futures-util`, `reqwest`, `serde`, `serde_json`, `tokio`, `tokio-tungstenite`, Core et Logging). Aucun SDK Helius/gRPC ni dépendance Config inverse n'apparaît. + +Doublons ciblés Transport observés : + +```text +syn 2.x / 3.x +webpki-roots 0.26.x / 1.x +``` + +Ils sont transitifs et non bloquants. Le graphe workspace complet expose d'autres duplications transitives provenant principalement de Tauri/GTK, JSON Schema et des stacks crypto Wallet/Solana ; aucune dérive nouvelle propre à `0.2.8` n'est identifiée. + +Verdict : **`pre.010` DONE.** + +### 23.2 Clôture documentaire `pre.011` + +`pre.011` ne doit ajouter aucune capacité runtime Helius. Sa mission est : + +```text +workspace.package.version = 0.2.8-pre.11 +fermer le plan et la matrice au niveau candidate +synchroniser les index documentaires devenus obsolètes +créer prompts/014-V0_2_9_START_PROMPT.md +conserver ROADMAP/CHANGELOG pour la publication stable rel.001 +rejouer le gate workspace final +``` + +Le prompt `0.2.9` est construit conformément à `docs/rules/PROMPT_STRUCTURE.md` et comparé aux prompts `0.2.5`–`0.2.8`. Il conserve notamment : + +```text +base stable exacte et archive opérateur autoritaire +ordre de lecture interne obligatoire +sources externes Yellowstone à réauditer +état HTTP/WS/Helius à préserver +frontières Config/Transport/provider-neutral +questions ouvertes dependencies/proto/licence/lifecycle +première mission pre.001 audit/brainstorming/sizing obligatoire +prévision souple initiale détaillée et recalibrable +workflow version/delta/commit/archive/tag +validation Rust/cargo tree/smoke +critères de clôture +instruction d'ouverture interdisant le client lourd avant gate +``` + +Le réaudit préparatoire Yellowstone du 23 août 2026 confirme que l'upstream évolue rapidement (`Subscribe`, unary RPCs, replay, filtres enrichis et extensions deshred). Le prompt n'en fait aucun pin : il impose à `0.2.9-pre.001` de réauditer release, proto, crates, MSRV, features et licences avant de choisir les dépendances. + +Critères `pre.011` : + +```text +[ ] workspace.package.version = 0.2.8-pre.11 +[ ] aucun code runtime Helius modifié +[ ] aucune nouvelle dépendance +[ ] prompt 0.2.9 autonome présent +[ ] prompt suit les 16 rubriques normatives de PROMPT_STRUCTURE +[ ] forecast 0.2.9 visible, détaillé et explicitement souple +[ ] prompt impose audit licence/dependencies avant Yellowstone/Tonic/Prost +[ ] prompt distingue Yellowstone standard des providers et de deshred/pré-exécution +[ ] docs/000, plans/000, validation/000, prompts/000 et séquence fonctionnelle synchronisés +[ ] ROADMAP non marqué stable avant rel.001 +[ ] CHANGELOG non utilisé comme journal de prerelease +[ ] cargo fmt --all +[ ] audit Rust workspace clean +[ ] cargo check --workspace sans warning +[ ] cargo clippy --workspace --all-targets sans warning +[ ] cargo test -p ksp-onchain-transport-lib +[ ] cargo test --workspace +``` + +Si ce gate est vert, la prochaine livraison est `0.2.8-rel.001`; aucune `pre.012` n'est nécessaire sauf défaut réel. + diff --git a/docs/validation/000-README.md b/docs/validation/000-README.md index 7a88abb..419fd7b 100644 --- a/docs/validation/000-README.md +++ b/docs/validation/000-README.md @@ -1,5 +1,5 @@ - + # Validations KSP @@ -19,4 +19,4 @@ Documents : - [`008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md) — matrice finale validée de la release stable `0.2.5`, threat model V1, canaris adversariaux, reproduction externe des vecteurs, audit de frontières, normalisation Rust/audit structurel, graphes Cargo et checkpoint final `pre.010-fix.003` vert. - [`009-V0_2_6_WALLET_DESK_COMPLIANCE.md`](009-V0_2_6_WALLET_DESK_COMPLIANCE.md) — matrice finale validée de la release stable `0.2.6`, couvrant Wallet Desk, les wires V1/V2, la migration explicite, le runtime Tauri packagé, les frontières sécurité/ownership et le gate opérateur `pre.018-fix.001` avec build final Linux vert. - [`010-V0_2_7_ONCHAIN_WEBSOCKET.md`](010-V0_2_7_ONCHAIN_WEBSOCKET.md) — matrice finale validée de la release stable `0.2.7`, ouverte par `pre.001`, fermée techniquement par `pre.014` puis publiée par `rel.001` : inventaire 9 subscribe + 9 unsubscribe, lifecycle borné, statuts unstable, compliance 18/18, non-régression HTTP 52+14, composition Config V2, smoke WebSocket Devnet et audit de dépendances. -- [`011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md`](011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md) — matrice active de `0.2.8`, ouverte par `pre.001` : support Helius par famille, `transactionSubscribe`/`transactionUnsubscribe`, `tokenAccounts`, `notifyOn` deprecated/no-op, capability validation, heartbeat provider, secrets et non-régressions Transport/Config. +- [`011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md`](011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md) — matrice candidate finale de `0.2.8`, ouverte par `pre.001` et consolidée jusqu’à `pre.011` : Helius `account/logs/program/root/signature/slot/slotsUpdates + transaction`, `block/vote` absents, heartbeat provider, sécurité/redaction, lifecycle adversarial, non-régressions HTTP/WS, stratégie smoke live et graphes Cargo finaux. diff --git a/docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md b/docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md index 3c4b73e..7fd2d14 100644 --- a/docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md +++ b/docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md @@ -1,9 +1,9 @@ - + # Validation `0.2.8` — Helius LaserStream WebSocket -> **Statut : `pre.009` est entièrement vert : 335/335 unit Transport, 41/41 API, 33/33 completeness, 4/4 doctests et workspace complet. `pre.010` est préparé pour synchroniser README/USAGE, verrouiller la stratégie de smoke live architecture-safe et rejouer le cargo tree final.** +> **Statut : `pre.010` est entièrement vert : 335/335 unit Transport, 41/41 API, 34/34 completeness, 4/4 doctests, workspace complet et audits Cargo tree exécutés. `pre.011` est la candidate documentaire finale : matrice/indexes fermés et prompt `0.2.9` autonome préparé avant `rel.001`.** ## 1. Références @@ -32,6 +32,7 @@ pre.007 dependency-firewall fix deltas/0.2.8/pre.007-fix.004.md pre.008 adversarial/compliance guard deltas/0.2.8/pre.008.md pre.009 compliance provider/current deltas/0.2.8/pre.009.md pre.010 docs/smoke/tree final deltas/0.2.8/pre.010.md +pre.011 candidate/prompt deltas/0.2.8/pre.011.md validation standard WS docs/validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md HTTP compliance docs/validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md KSP-TRANSPORT-007 docs/validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md @@ -1057,3 +1058,69 @@ Le smoke live Helius est donc **différé vers la future surface d’intégratio Verdict courant : **`pre.010` PREPARED ; `pre.011` bloqué jusqu’au gate opérateur et au cargo tree final.** +## 25. Gate `pre.010` fermé et candidate `pre.011` + +### 25.1 Preuves opérateur `pre.010` + +```text +[x] cargo fmt --all +[x] audit Rust = clean / 0 candidate +[x] cargo check --workspace = vert, sans warning +[x] cargo clippy --workspace --all-targets = vert, sans warning +[x] Transport unit = 335/335 +[x] Transport public API = 41/41 +[x] release completeness = 34/34 +[x] Transport doctests = 4/4 +[x] cargo test --workspace = vert +[x] cargo tree Transport direct = exécuté +[x] cargo tree Transport duplicates = exécuté +[x] cargo tree workspace duplicates = exécuté +``` + +Audit graphe : + +```text +Transport direct : aucune dépendance nouvelle Helius/gRPC/Config +Transport duplicates ciblés : syn 2/3 + webpki-roots 0.26/1.0, transitifs +workspace duplicates : transitifs historiques Tauri/GTK/JSON Schema/crypto, non introduits par pre.010 +``` + +Verdict : **`pre.010` DONE.** + +### 25.2 Candidate `pre.011` + +La clôture candidate doit prouver : + +```text +[ ] version Cargo pre.11 +[ ] zéro changement runtime provider +[ ] matrice Helius finale cohérente : 7 standard + transaction ; block/vote absents +[ ] Standard WS 18/18 et HTTP 52+14 conservés +[ ] stratégie smoke live différée vers intégration/orchestration conservée +[ ] dependency graph final enregistré comme non bloquant +[ ] prompts/014-V0_2_9_START_PROMPT.md présent +[ ] prompt 0.2.9 conforme PROMPT_STRUCTURE et autonome +[ ] prompt 0.2.9 contient un forecast souple détaillé +[ ] prompt 0.2.9 impose le gate audit/sizing avant client gRPC lourd +[ ] prompt 0.2.9 impose audit licence/MSRV/features/transitifs +[ ] prompt distingue standard Yellowstone, provider adapters et deshred/pré-exécution +[ ] index docs/plans/validation/prompts synchronisés +[ ] workspace complet vert +``` + +État fonctionnel candidat `0.2.8` : + +```text +HTTP 52 current + 14 historical +Solana Standard WebSocket 9 familles / 18 opérations +Helius common account/logs/program/root/signature/slot/slotsUpdates +Helius extension transactionSubscribe/unsubscribe +Helius unsupported block/vote +heartbeat Ping control frame / 60 s / Helius only +Config V2 helius_laserstream + secret provenance/redaction +actor WsSession physique unique partagé +smoke provider live reporté vers future intégration/orchestration +``` + +Le prompt suivant vise `0.2.9 — Yellowstone gRPC standard/provider-neutral`. La release stable n'est pas encore publiée à `pre.011`; `ROADMAP.md` et `CHANGELOG.md` restent donc à finaliser dans `rel.001`. + diff --git a/prompts/000-README.md b/prompts/000-README.md index fbe3d2f..f1daaaa 100644 --- a/prompts/000-README.md +++ b/prompts/000-README.md @@ -1,5 +1,5 @@ - + # Prompts KSP @@ -34,3 +34,4 @@ Le prompt générique `0.1.x` a été affiné pendant `0.0.3` puis remplacé par - [`011-V0_2_6_START_PROMPT.md`](011-V0_2_6_START_PROMPT.md) — prompt préparé par `0.2.5-pre.010` puis renforcé pendant `pre.010-fix.001`–`fix.003`, prompt historique consommé pour ouvrir `0.2.6 — Wallet Desk` après le tag stable `v0.2.5`; il impose une première tranche audit/sizing, rappelle les règles Rust/audit structurel, cadre Config composite + Wallet + HTTP `getBalance`, lifecycle VIEW/OWNER, sécurité password/export, validation frontend/Tauri et conserve le TODO `0.2.11` d’intégration des prix offchain dans Wallet Desk après validation de la Price Desk spécialisée. - [`012-V0_2_7_START_PROMPT.md`](012-V0_2_7_START_PROMPT.md) — prompt réaligné par `0.2.6-pre.015` puis renforcé en contrat de reprise autonome par `0.2.6-pre.018-fix.002`; prompt historique consommé pour ouvrir `0.2.7 — WebSocket Solana standard` depuis `v0.2.6`, avec lectures/règles ordonnées, audit officiel et historique, threat-model session/subscription/reconnect/backpressure, matrice de compliance, gate `pre.001` strict et prévision souple de prereleases avant toute implémentation lourde. - [`013-V0_2_8_START_PROMPT.md`](013-V0_2_8_START_PROMPT.md) — prompt actif après publication `0.2.7-rel.001` et tag stable `v0.2.7`, préparé par `0.2.7-pre.014` puis renforcé en version 2 par `pre.014-fix.001`; il ouvre `0.2.8 — Helius LaserStream WebSocket` avec relecture des règles et de la surface WebSocket finale, réaudit Helius actuel, gate `pre.001` strict audit/brainstorming/sizing, réutilisation du moteur actor standard sans second client, frontières provider/Config/secrets explicites et forecast souple recalibrable avant toute implémentation lourde. +- [`014-V0_2_9_START_PROMPT.md`](014-V0_2_9_START_PROMPT.md) — prompt préparé par `0.2.8-pre.011` pour ouvrir `0.2.9 — Yellowstone gRPC standard/provider-neutral` uniquement après publication stable `v0.2.8`; il impose la base stable autoritaire, la relecture ordonnée des règles/architectures/compliances Transport, un réaudit Yellowstone actuel (service/proto/releases/crates), un audit dépendances/licences/MSRV avant choix du client/proto, la séparation standard/provider/deshred, un gate `pre.001` strict audit/brainstorming/sizing et une prévision souple détaillée avant toute implémentation gRPC lourde. diff --git a/prompts/014-V0_2_9_START_PROMPT.md b/prompts/014-V0_2_9_START_PROMPT.md new file mode 100644 index 0000000..60e9a0e --- /dev/null +++ b/prompts/014-V0_2_9_START_PROMPT.md @@ -0,0 +1,1278 @@ + + + +# Prompt de démarrage `0.2.9` — Yellowstone gRPC standard/provider-neutral + +## 1. Identité de la release et base exacte requise + +La base attendue est **exclusivement** la release stable : + +```text +v0.2.8 +``` + +Ne pas ouvrir `0.2.9` depuis `0.2.8-pre.*`, depuis une archive intermédiaire, depuis un ancien ZIP de travail ou depuis un souvenir de session. + +Si une archive opérateur de `v0.2.8` est fournie au démarrage, **cette archive réelle devient la première autorité** devant les snippets, prompts historiques, anciens ZIP et mémoire de conversation. Une divergence entre cette base et le présent prompt déclenche un audit explicite ; elle ne se résout jamais par supposition. + +La release à ouvrir est : + +```text +0.2.9 — Yellowstone gRPC standard/provider-neutral +``` + +La première tranche est : + +```text +0.2.9-pre.001 +``` + +`pre.001` est obligatoirement une tranche **lecture + audit + brainstorming + threat model + dépendances/licences + sizing + planification**. Elle ne doit pas commencer par l'implémentation lourde d'un client gRPC ou par l'ajout opportuniste de crates Yellowstone/Tonic. + +À l'ouverture, vérifier au minimum : + +```text +git describe / tag stable si metadata Git disponible +workspace.package.version = 0.2.8 +deltas/0.2.8/rel.001.md présent +prompts/014-V0_2_9_START_PROMPT.md présent +``` + +État fonctionnel attendu depuis `v0.2.8` : + +```text +HTTP Solana 52/52 current typed +HTTP historiques 14/14 Deprecated/Removed conservées +KSP-TRANSPORT-007 appliqué + +WebSocket Solana standard 9 familles / 18 subscribe-unsubscribe +stable WS account/logs/program/root/signature/slot +unstable WS block/slotsUpdates/vote + +Helius LaserStream WebSocket account/logs/program/root/signature/slot/slotsUpdates +Helius provider-specific transactionSubscribe / transactionUnsubscribe +Helius absent block/vote +Helius heartbeat WebSocket Ping control frame, 60 s, actor-owned + +Config Transport V1 HTTP backward-readable + V2 WS +Config -> Transport autorisé +Transport -> Config interdit +LaserStream gRPC toujours distinct du namespace WebSocket +``` + +--- + +## 2. Mission et résultat attendu + +`0.2.9` introduit dans `ksp-onchain-transport-lib` une **première fondation Yellowstone gRPC standard et provider-neutral**. + +La release ne doit pas devenir un SDK Helius, Triton, ERPC, Chainstack, Shyft ou autre fournisseur commercial. Un provider peut servir à une validation réseau si nécessaire, mais il reste un **environnement d'exécution**, jamais le propriétaire du contrat public KSP. + +Résultat attendu à la clôture : + +```text +un backend gRPC Yellowstone explicitement distinct de HTTP et WebSocket +une surface publique KSP bornée et provider-neutral +connexion/TLS/auth metadata générique sans secret exposé +contrats typed pour la surface normative effectivement retenue +stream/subscription lifecycle borné +filtres et updates wire utiles préservés sans perte arbitraire +reconnect/continuity semantics explicites, sans promesse lossless implicite +Config -> Transport seulement si la shape est validée par le gate +README/USAGE et matrice de compliance synchronisés +non-régressions HTTP + WebSocket standard + Helius +aucune dépendance provider-specific dans les exécutables +``` + +Le terme **foundation** est important : `pre.001` doit d'abord déterminer quelle part de la surface Yellowstone actuelle peut raisonnablement être livrée dans une release concrète clôturable dans la session. Si la surface normative s'est élargie au point de rendre `0.2.9` surdimensionnée, elle est **scindée avant implémentation lourde**. + +--- + +## 3. Sources de vérité internes obligatoires — ordre de lecture + +### 3.1 Entrées et règles globales + +Lire d'abord, dans cet ordre : + +```text +RULES.md +docs/000-README.md + +docs/rules/RULES_GENERAL.md +docs/rules/RULES_KSP.md +docs/rules/RULES_RUST.md +docs/rules/RULES_DEPENDENCIES.md +docs/rules/RULES_DOCUMENTATION.md +docs/rules/FILE_CONTRACTS.md +docs/rules/VERSION_WORKFLOW.md +docs/rules/PROMPT_STRUCTURE.md +``` + +Le présent prompt est autonome mais ne remplace pas les règles normatives. + +Rappels qui conditionnent directement cette session : + +```text +Rust 2024 +unsafe / unwrap / expect / panic interdits en production +? interdit en production +retours explicites ; clippy::implicit_return deny +#![warn(missing_docs)] +#![deny(unreachable_pub)] +#![forbid(unsafe_code)] + +pas de pub mod +pub/pub(crate) consommés crate-wide via reexports crate-root +private testé depuis unit_tests via super::Item +visibilité jamais élargie seulement pour tester +unit tests sous unit_tests/ +integration tests sous tests/ + +ksp-logging-lib = propriétaire tracing KSP +Config = propriétaire config/env/secrets +Transport ne lit jamais std::env pour les secrets runtime +``` + +Après toute modification Rust : + +```bash +cargo fmt --all +python3 scripts/audit_rust_workspace_rules.py +cargo check --workspace +cargo clippy --workspace --all-targets +``` + +Une commande non exécutée n'est jamais déclarée réussie. + +### 3.2 Architecture à préserver + +Lire ensuite : + +```text +docs/architecture/000-README.md +docs/architecture/002-LAYERS_AND_DEPENDENCIES.md +docs/architecture/003-COMPONENT_CONTRACTS.md +docs/architecture/004-COMPONENT_INVENTORY.md +docs/architecture/005-DEPENDENCY_GRAPH.md +docs/architecture/009-ACQUISITION_WORKERS_AND_JOBS.md +docs/architecture/010-APPS_SERVICES_SCENARIOS_AND_CONTROL.md +``` + +Points déjà acquis : + +```text +ksp-onchain-transport-lib possède HTTP + WS + Yellowstone gRPC +aucune crate ksp-onchain-transport-api séparée +Transport -X-> Config / Store / Program +Config -> Transport autorisé +providers Yellowstone spécifiques = extensions futures +contrat Yellowstone initial = standard/provider-neutral +pool/scheduler automatique de sessions = seulement si besoin démontré +``` + +### 3.3 Séquence fonctionnelle et héritage Transport + +Lire : + +```text +docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md +docs/plans/007-V0_2_0_SERIES_PLANNING.md + +docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md +docs/plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md +docs/plans/015-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET_PLAN.md + +docs/validation/003-V0_2_1_ONCHAIN_HTTP.md +docs/validation/005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md +docs/validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md +docs/validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md +docs/validation/011-V0_2_8_HELIUS_LASERSTREAM_WEBSOCKET.md + +deltas/0.2.8/rel.001.md +``` + +L'objectif est de réutiliser les règles éprouvées de Transport sans forcer HTTP, WebSocket et gRPC dans une abstraction commune artificielle. + +### 3.4 Contrats publics réels à réauditer + +Inspecter le code réel de la base stable, au minimum : + +```text +Cargo.toml +crates/ksp-onchain-transport-lib/Cargo.toml +crates/ksp-onchain-transport-lib/README.md +crates/ksp-onchain-transport-lib/USAGE.md +crates/ksp-onchain-transport-lib/src/lib.rs +crates/ksp-onchain-transport-lib/src/constants.rs +crates/ksp-onchain-transport-lib/src/settings.rs +crates/ksp-onchain-transport-lib/src/ws_settings.rs +crates/ksp-onchain-transport-lib/src/ws_protocol_session.rs +crates/ksp-onchain-transport-lib/src/ws_session.rs +crates/ksp-onchain-transport-lib/src/ws_lifecycle.rs +crates/ksp-onchain-transport-lib/tests/public_api.rs +crates/ksp-onchain-transport-lib/tests/release_completeness.rs + +crates/ksp-config-lib/Cargo.toml +crates/ksp-config-lib/src/transport.rs +crates/ksp-config-lib/unit_tests/transport.rs +config/std.transport.json +config/schemas/std.transport.schema.json +.env.example +``` + +Ne pas décider une API gRPC à partir d'un ancien prompt si le code stable a déjà évolué. + +### 3.5 Références historiques utiles + +Relire au moins les prompts : + +```text +prompts/006-V0_2_1_START_PROMPT.md +prompts/012-V0_2_7_START_PROMPT.md +prompts/013-V0_2_8_START_PROMPT.md +``` + +Le premier rappelle le gate de sizing Transport, le second le lifecycle streaming standard et le troisième les contraintes provider/secrets/forecast récentes. + +--- + +## 4. Sources externes normatives à réauditer en `pre.001` + +La fraîcheur est obligatoire. Les versions, RPCs et messages Yellowstone changent activement. + +Sources primaires à relire depuis leur état courant : + +```text +https://github.com/rpcpool/yellowstone-grpc +https://github.com/rpcpool/yellowstone-grpc/blob/master/README.md +https://github.com/rpcpool/yellowstone-grpc/blob/master/CHANGELOG.md +https://github.com/rpcpool/yellowstone-grpc/releases +https://github.com/rpcpool/yellowstone-grpc/blob/master/yellowstone-grpc-proto/proto/geyser.proto +https://github.com/rpcpool/yellowstone-grpc/blob/master/yellowstone-grpc-proto/proto/solana-storage.proto +https://github.com/rpcpool/yellowstone-grpc/tree/master/yellowstone-grpc-client +https://github.com/rpcpool/yellowstone-grpc/tree/master/examples/rust +https://crates.io/crates/yellowstone-grpc-client +https://crates.io/crates/yellowstone-grpc-proto +``` + +Puis vérifier les crates génériques réellement nécessaires si cette stratégie est retenue : + +```text +tonic +prost +prost-types +tokio-stream +futures / futures-util +bytes +``` + +Ne jamais traiter les versions historiques du présent prompt comme des pins. + +### Snapshot informatif au 2026-08-23 — à ne pas figer + +Au moment où ce prompt est préparé, le `geyser.proto` upstream observé expose notamment : + +```text +Subscribe +SubscribeDeshred +SubscribeReplayInfo +Ping +GetLatestBlockhash +GetBlockHeight +GetSlot +IsBlockhashValid +GetVersion +``` + +Le `SubscribeRequest` observé contient notamment : + +```text +accounts +slots +transactions +transactions_status +blocks +blocks_meta +entry +commitment +accounts_data_slice +ping +from_slot +``` + +L'upstream courant contient aussi des évolutions telles que : + +```text +CuckooFilter / filtres account/block compressés +TokenAccountExpansionControlFlag +SubscribeDeshred / deshred transactions +reconnect/replay évolué côté client upstream +``` + +**Ces éléments ne sont pas automatiquement dans le scope `0.2.9`.** `pre.001` doit déterminer leur statut : standard upstream, extension Triton, capacité nouvelle, expérimental, hors fondation ou report explicite. + +Le `Cargo.toml` master observé le 2026-08-23 montre notamment : + +```text +workspace license AGPL-3.0 +yellowstone-grpc-client (workspace) 13.3.0 +yellowstone-grpc-proto (workspace) 12.6.0 +tonic / prost / prost-types 0.14 +release GitHub observée v14.2.2+solana.4.1.0 (2026-07-27) +``` + +Ce snapshot est **informatif uniquement** : les numéros du workspace `master`, des crates publiées et des releases GitHub ne suivent pas nécessairement le même rythme. La licence du repository/proto doit en outre être traitée comme un **gate explicite** avant toute copie, génération vendored ou incorporation de source/proto dans KSP MIT ; ne pas déduire la licence d'une crate publiée uniquement de la licence du repository. + +Vérifier séparément au démarrage de `pre.001` : + +```text +release GitHub réellement courante +crate crates.io réellement courante et sa licence publiée +version proto compatible +licence du proto/source réellement utilisé +MSRV / Rust requis +features activées +build dependencies / protoc éventuel +``` + +### Sources provider — secondaires pour `0.2.9` + +Les docs Helius/Triton/ERPC/Chainstack/Shyft peuvent servir à comprendre interop, headers, quotas et smokes, mais **elles ne définissent pas à elles seules le contrat standard KSP**. + +Toute divergence `upstream proto/release` vs `provider documentation` doit être enregistrée explicitement. + +--- + +## 5. État validé à préserver depuis `v0.2.8` + +### 5.1 HTTP + +Ne pas régresser : + +```text +52 méthodes courantes typed +14 historiques Deprecated/Removed +KSP-TRANSPORT-007 +no-resend après dispatch ambigu pour WriteSubmission +pool/rôles/capabilities/limites/retry existants +``` + +Aucun refactor gRPC ne justifie de casser le contrat HTTP. + +### 5.2 WebSocket Solana standard + +Conserver : + +```text +9 familles / 18 opérations +sessions physiques explicites +subscriptions logiques typées +local IDs stables +remote IDs internes/remappables +reconnect/resubscribe/backpressure/shutdown bornés +continuity_gap_count +signature one-shot +Config V2 solana_standard +``` + +Le gRPC ne doit pas être représenté comme un nouveau `WsProtocolKind`. + +### 5.3 Helius LaserStream WebSocket + +Conserver : + +```text +HeliusLaserStreamWsSession +7 familles standard supportées +transactionSubscribe/unsubscribe typed +block/vote absents +slotsUpdates unstable +heartbeat Helius-only Ping 60 s +credentials Helius Config-owned/redacted +``` + +Helius LaserStream **gRPC** reste conceptuellement un provider Yellowstone futur, pas une extension de cette façade WebSocket. + +### 5.4 Config et ownership + +Conserver : + +```text +ksp-config-lib = propriétaire documents/env/secrets +Config -> Transport +Transport -X-> Config +Transport -X-> std::env KSP_* +.env.example = inventaire canonique des variables runtime +``` + +Une éventuelle extension `std.transport` pour gRPC doit être décidée par audit. Ne pas supposer automatiquement `format_version = 3` ni réutiliser `ws_endpoints`. + +### 5.5 Logging et erreurs + +Conserver : + +```text +ksp-core-lib = Error/Result commun +ksp-logging-lib = façade tracing +Transport n'utilise pas tracing directement +secrets/payloads provider absents de Debug/Display/context/logs +``` + +Les erreurs Tonic/HTTP2/TLS/metadata devront être mappées dans le domaine KSP sans rendre de token ou payload arbitraire. + +--- + +## 6. Frontières architecturales et règles de dépendances + +### 6.1 Propriétaire + +`ksp-onchain-transport-lib` reste propriétaire de Yellowstone gRPC. + +Ne pas créer sans preuve : + +```text +ksp-yellowstone-lib +ksp-grpc-lib +ksp-onchain-transport-api +``` + +### 6.2 Provider-neutral obligatoire + +Le contrat public initial ne doit pas s'appeler : + +```text +HeliusGrpc... +TritonGrpc... +ERPC... +Chainstack... +Shyft... +``` + +Le provider peut apparaître dans des settings descriptifs ou tests, mais les types protocole/filtres/updates doivent représenter Yellowstone standard lorsque c'est réellement leur sémantique. + +### 6.3 Séparation des transports + +Ne pas réutiliser artificiellement : + +```text +WsProtocolKind +WsEndpointSettings +WsSession +WsSubscription +HeliusLaserStreamWsSession +``` + +pour représenter gRPC. + +Le gRPC peut partager des DTOs Solana déjà publics **uniquement lorsque leur sémantique et leur wire sont réellement compatibles**. Une duplication claire et bornée vaut mieux qu'une abstraction fausse. + +### 6.4 Firewall des exécutables + +Les applications/workers/jobs ne doivent pas dépendre directement de : + +```text +yellowstone-grpc-client +yellowstone-grpc-proto +tonic/prost pour un besoin protocolaire Yellowstone +``` + +Ils consomment l'API KSP propriétaire. + +### 6.5 Dépendances Cargo + +Toute nouvelle dépendance externe : + +```text +déclarée une fois au workspace root +consommée .workspace = true +features activées localement et minimalement +version caret normalisée +cargo tree inspecté +``` + +Les doublons de générations `prost/tonic/http/tower/bytes/rustls` sont particulièrement à surveiller. + +--- + +## 7. Décisions acquises et questions réellement ouvertes + +### 7.1 Décisions acquises — ne pas redébattre sans contradiction réelle + +```text +0.2.9 cible Yellowstone gRPC standard/provider-neutral +la surface vit dans ksp-onchain-transport-lib +aucun provider commercial ne devient propriétaire du contrat +Helius/Triton/ERPC/Chainstack/Shyft adapters = futur +shred/deshred/pré-exécution = hors scope initial sauf reclassification normative explicite +Transport ne dépend pas de Config +Config peut adapter vers Transport +WebSocket et gRPC restent des backends distincts +pre.001 = audit/sizing obligatoire +une release surdimensionnée est scindée avant implémentation lourde +``` + +### 7.2 Questions ouvertes à trancher pendant `pre.001` + +#### Dépendances / génération wire + +Comparer au minimum : + +```text +A. yellowstone-grpc-client + yellowstone-grpc-proto +B. yellowstone-grpc-proto + client KSP autour de tonic +C. proto/génération KSP minimale bornée +D. autre composition démontrée par l'audit +``` + +Critères : + +```text +licence +compatibilité MIT KSP +MSRV +versions tonic/prost +poids transitif +features +exposition de types upstream dans l'API publique +stabilité/breaking cadence +besoin réel de code generation/build.rs/protoc +facilité de contrôle redaction/lifecycle/backpressure +``` + +**Ne pas copier des fichiers source/proto upstream sous licence sans audit licence explicite.** + +#### Surface RPC exacte + +Décider si `0.2.9` couvre dans cette release : + +```text +Subscribe +SubscribeReplayInfo +Ping +GetLatestBlockhash +GetBlockHeight +GetSlot +IsBlockhashValid +GetVersion +``` + +et classifier explicitement : + +```text +SubscribeDeshred +extensions provider/Triton +méthodes nouvelles apparues depuis ce prompt +``` + +#### Subscribe filters + +Auditer : + +```text +accounts +slots +transactions +transactions_status +blocks +blocks_meta +entry +commitment +accounts_data_slice +ping +from_slot +account memcmp/dataSize/token state/lamports filters +compressed/Cuckoo filters si encore standards +TokenAccountExpansionControlFlag si encore standard +``` + +#### Updates + +Auditer toutes les variantes réellement présentes : + +```text +account +slot +transaction +transaction_status +block +block_meta +entry +ping +pong +``` + +ainsi que les champs/oneofs/optional actuels. + +#### Lifecycle + +Décider : + +```text +un stream bidirectionnel par session ? +plusieurs logical filter groups dans un SubscribeRequest ? +modification dynamique des subscriptions sur le même stream ? +close/drop semantics +reconnect automatique ou explicite +resubscribe déterministe +from_slot/replay ownership +continuity gap / duplicate observability +backpressure et bounded queues +``` + +#### Auth metadata + +Décider une shape provider-neutral : + +```text +aucun header commercial hardcodé dans le contrat standard sans nécessité +secrets jamais dans Debug/Display +metadata sensible séparée des metadata publiques +Config propriétaire des valeurs de secret +``` + +#### Config + +Décider seulement après audit : + +```text +nouveau grpc_endpoints ? +nouveau kind/descriptor ? +version de document à incrémenter ou non ? +TLS/timeout/message-size/reconnect defaults ? +références de secrets par placeholders Config ? +``` + +#### Smoke réseau + +Déterminer si un endpoint provider accessible permet un smoke sans introduire : + +```text +secret versionné +provider-specific API dans Transport +Transport -> Config +test cross-crates placé dans Config par facilité +``` + +Si aucune surface d'intégration KSP dédiée n'existe encore, documenter la limite au lieu de violer l'architecture. + +--- + +## 8. Objectifs et livrables de `0.2.9` + +Sous réserve du sizing `pre.001`, la release vise : + +```text +1. plan Yellowstone gRPC dédié +2. matrice protocolaire/compliance dédiée +3. stratégie dépendances/licence documentée +4. settings gRPC runtime bornés et redacted +5. endpoint/session/client gRPC provider-neutral +6. typed requests/filters/updates pour la surface retenue +7. unary RPCs retenus dans la matrice +8. stream lifecycle borné +9. reconnect/continuity semantics explicites +10. erreurs et observabilité KSP +11. Config adapter si scope confirmé +12. tests déterministes et adversariaux +13. smoke live opt-in si architecture-safe +14. README/USAGE +15. non-régressions HTTP/WS/Helius +16. cargo tree final +17. prompt 0.2.10 +``` + +Les documents de release attendus à l'ouverture sont normalement : + +```text +docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md +docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md +deltas/0.2.9/pre.001.md +``` + +Le numéro exact peut être ajusté seulement si la base stable contient déjà un nouveau document occupant ces indices. + +--- + +## 9. Hors périmètre explicite + +Sauf décision de split/reclassification documentée à `pre.001` : + +```text +Helius LaserStream gRPC adapter spécifique +Triton-specific adapter/auth/capabilities +ERPC-specific adapter +Chainstack-specific adapter +Shyft-specific adapter +shred delivery +SubscribeDeshred / pré-exécution provider extension +RabbitStream ou équivalent +serveur Geyser/plugin validator +Store/persistence +workers/jobs d'acquisition +backfill historique +replay lossless garanti +scheduler/pool automatique complexe de sessions gRPC +refonte HTTP +refonte WebSocket +prix offchain +Wallet/Wallet Desk +Program/Interface +``` + +`0.2.10 — off-chain price transport` ne doit pas être anticipée ici. + +--- + +## 10. Contraintes sécurité, ressources, lifecycle et API + +### 10.1 Credentials / metadata + +Threat model minimal : + +```text +token/header provider dans metadata gRPC +endpoint potentiellement sensible +message d'erreur TLS/tonic contenant metadata ou URI +Debug automatique d'un request contenant filtres/adresses +provider Status avec message/details arbitraires +``` + +Exigences : + +```text +aucun secret dans Debug/Display/KspError/log/snapshot +aucune metadata secrète dans DTO public safe +Config reste propriétaire des valeurs issues de KSP_SECRET_* +Transport reçoit un contrat résolu/opaque +``` + +### 10.2 Bornes de ressources + +Auditer et borner : + +```text +connect timeout +request timeout si unary +max inbound message size +max outbound message size +stream channel capacity +logical subscription/filter count +nombre de noms de filters +longueur des filter names +nombre d'accounts/owners/include/exclude/required +nombre de memcmp/data slices +payload account/block/transaction +reconnect attempts/backoff +``` + +Ne pas recopier aveuglément un quota provider dans le contrat standard KSP. + +### 10.3 Backpressure + +Le stream doit avoir une politique explicite : + +```text +pas de queue non bornée +pas de blocage global silencieux +pas de drop silencieux présenté comme lossless +état terminal/overflow observable +``` + +### 10.4 Reconnect, replay et continuité + +Ne pas promettre : + +```text +exactly-once +lossless +historical replay complet +ordre global sans gap +``` + +sans preuve protocolaire. + +`from_slot`, `SubscribeReplayInfo` et toute feature client upstream de replay/reconnect doivent être audités séparément : leur présence ne signifie pas automatiquement que KSP peut garantir une continuité parfaite entre providers/nodes. + +### 10.5 API publique + +Favoriser : + +```text +types KSP stables +façade crate-root explicite +raw upstream types cachés si leur stabilité est insuffisante +#[non_exhaustive] lorsque l'évolution wire le justifie +Unknown/bounded fallback seulement si compatible avec KSP-TRANSPORT-007 +``` + +Ne pas exposer un client Tonic brut permettant de contourner les capabilities ou l'observabilité KSP sans justification. + +--- + +## 11. Première mission `0.2.9-pre.001` — gate obligatoire + +### 11.1 Reprise de la base et baseline avant modification + +Avant changement significatif : + +```bash +cargo fmt --all +python3 scripts/audit_rust_workspace_rules.py +cargo check --workspace +cargo clippy --workspace --all-targets +cargo test --workspace +cargo tree -p ksp-onchain-transport-lib +cargo tree -p ksp-onchain-transport-lib --duplicates +``` + +Enregistrer : + +```text +version Cargo stable +versions directes Transport +principaux doublons transitifs +état tests +état docs/plan/validation 0.2.8 +``` + +### 11.2 Audit normatif Yellowstone actuel + +Produire une matrice exhaustive avec, pour chaque RPC/message/capacité : + +```text +nom +source normative +présence release stable / master +statut standard vs extension +request fields +response/update variants +optional/oneof semantics +limites documentées +provider-neutral oui/non +cible 0.2.9 oui/non/report +raison du report +preuve/test prévu +``` + +Inventorier explicitement le service `Geyser` courant et les messages `SubscribeRequest` / `SubscribeUpdate`. + +### 11.3 Audit dépendances et licences + +Avant d'ajouter quoi que ce soit : + +```text +version stable yellowstone-grpc-client +version stable yellowstone-grpc-proto +versions tonic/prost nécessaires +MSRV +features par défaut +build dependencies/protoc +licences de chaque crate et du repo/proto +compatibilité avec la distribution MIT de KSP +transitifs Solana/Agave imposés ou non +``` + +Comparer les stratégies A/B/C de la section 7. + +Produire les `cargo tree` hypothétiques ou réels nécessaires avant de valider la stratégie. + +### 11.4 Audit architecture KSP + +Décider et documenter : + +```text +noms des settings/types gRPC +séparation HTTP/WS/gRPC +ownership du client/session +shape public vs wire interne +metadata/auth contract +Config shape éventuelle +error mapping +logging target +lifecycle/reconnect/backpressure +smoke ownership +``` + +### 11.5 Threat model + +Brainstormer au minimum : + +```text +credential metadata leak +URI leak +provider Status message/details leak +malicious oversized message +stream flood/backpressure +filter explosion +filter-name collision/untrusted names +unknown enum/oneof value +server half-close +client half-close +reconnect loop +reconnect to different node with divergent slot history +duplicate/gap after replay/from_slot +late updates after local subscription mutation +TLS/certificate failures +unary call timeout +``` + +### 11.6 Sizing et prévision souple obligatoire + +Avant implémentation lourde, produire : + +```text +surface exacte retenue +surface explicitement reportée +stratégie dependencies/license +nombre prévisionnel de prereleases +objectif précis de chaque tranche +fichiers/contrats principaux attendus +preuves/tests/gates par tranche +budget nominal <= environ 15–20 min par tranche +risques et critères de split +``` + +La prévision de la section 12 est un **forecast initial**, pas une obligation. + +Si l'audit démontre que `Subscribe + toutes variantes + unary + replay + Config + lifecycle` ne tient pas raisonnablement dans la release, **scinder avant d'ajouter le client lourd**. Exemple acceptable : conserver `0.2.9` comme foundation connexion + subset canonique et reporter une extension Yellowstone suivante explicitement dans la séquence. + +### 11.7 Documents de sortie du gate + +Créer/mettre à jour au minimum : + +```text +docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md +docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md +deltas/0.2.9/pre.001.md +``` + +ainsi que les index concernés. + +### Critères de sortie de `pre.001` + +Gate positif seulement si : + +```text +base stable v0.2.8 confirmée +baseline opérateur enregistrée +sources upstream actuelles relues +surface service/proto exhaustive inventoriée +standard vs provider-extension classifié +SubscribeDeshred explicitement classifié +unary RPCs explicitement classifiés +replay/from_slot semantics audités +strategy dependency choisie ou reportée avec raison +licence auditée avant ajout de crate/proto +MSRV/features/transitifs audités +architecture gRPC distincte de WS décidée +metadata/auth strategy provider-neutral décidée +Config shape décidée ou explicitement reportée +resource/backpressure bounds décidées +smoke ownership décidé +release dimensionnée +forecast recalibré +critères de split écrits +aucune implémentation lourde non justifiée déjà introduite +``` + +--- + +## 12. Prévision souple initiale des prereleases + +Prévision de départ, **obligatoirement recalibrée par `pre.001`** : + +```text +pre.001 audit Yellowstone actuel + service/proto matrix + licences/dependencies + architecture + threat model + sizing + preuve : plan + validation matrix + dependency decision + forecast recalibré ; pas de client lourd avant gate + +pre.002 stratégie proto/client matérialisée + settings/errors gRPC runtime + façade provider-neutral minimale + preuve : Cargo/features justifiés + API/settings tests + redaction ; aucun Config coupling + +pre.003 connexion/TLS/metadata générique + lifecycle session minimal + unary canaries retenus + preuve : serveur gRPC local/fixture + timeout/TLS/error mapping + metadata secret-safe + +pre.004 SubscribeRequest foundation : filter maps + commitment + ping/from_slot + validation/bounds communs + preuve : wire exact + omitted/empty semantics + bounds avant I/O + Debug safe + +pre.005 Accounts + Slots : filtres, data slices et updates typed retenus + preuve : account/slot fixtures exactes + malformed/unknown/adversarial cases + +pre.006 Transactions + transaction_status : filtres et updates typed retenus + preuve : account include/exclude/required + vote/failed/signature + status/meta lossless utile + +pre.007 Blocks + block_meta + entry et autres variantes standard retenues + preuve : fixtures exactes + optional/oneof + payload bounds ; split si tranche trop large + +pre.008 stream bidirectionnel : mutation request, Ping/Pong, close/half-close, backpressure et shutdown bornés + preuve : actor/session tests locaux + bounded queues + cleanup déterministe + +pre.009 reconnect/resubscribe + from_slot/replay semantics + gaps/duplicates + adversarial lifecycle + preuve : reconnect local déterministe + continuité explicitement non-lossless si non prouvée + +pre.010 Config Transport gRPC si retenue + schema/fixtures + mapping Config -> Transport + secret provenance + preuve : backward Config + no Transport -> Config + redaction + profile/provider-neutral + +pre.011 compliance Yellowstone + non-régressions HTTP 52/14 + Standard WS 18/18 + Helius + API/firewall/security + preuve : release-completeness + dependency boundaries + workspace ciblé + +pre.012 smoke live opt-in si stratégie architecture-safe + README/USAGE + cargo tree direct/duplicates final + preuve : aucune credential versionnée + provider test-only + docs version-neutral + +pre.013 validation workspace finale + fermeture plan/matrice/indexes + prompt 0.2.10 + preuve : workspace final vert + docs cohérentes + prompt suivant autonome + +rel.001 publication stable stricte +``` + +Règles : + +```text +chaque tranche vise nominalement 15–20 min de travail effectif +pre.001 peut fusionner/scinder/déplacer/ajouter des prereleases +un fix peut être inséré après n'importe quelle tranche +pre.013 n'est pas une deadline +le numéro final n'est jamais un critère de clôture +une extension normative découverte tardivement peut créer pre.014+ +une release trop large doit être scindée avant implémentation lourde +``` + +Le forecast détaillé vit dans le plan de release. `ROADMAP.md` reste global et `CHANGELOG.md` reste principalement réservé à la clôture stable. + +--- + +## 13. Versionnement, deltas, commits, archives et tags + +Convention : + +```text +0.2.9-pre.001 -> Cargo 0.2.9-pre.1 +0.2.9-pre.002 -> Cargo 0.2.9-pre.2 +0.2.9-pre.NNN-fix.MMM -> Cargo 0.2.9-pre.N.fix.M si code/build/runtime/config change +0.2.9-rel.001 -> Cargo 0.2.9 +``` + +Une prerelease non-fix synchronise toujours `workspace.package.version`, même si elle est surtout documentaire. + +Un fix purement documentaire suit `VERSION_WORKFLOW.md` et ne force pas une version Cargo si aucun artefact code/build/runtime/config/migration n'est modifié. + +Deltas : + +```text +deltas/0.2.9/pre.001.md +... +deltas/0.2.9/pre.NNN-fix.MMM.md +deltas/0.2.9/rel.001.md +``` + +Commits : + +```text +v0.2.9-pre.001 +v0.2.9-pre.001-fix.001 +... +v0.2.9-rel.001 +``` + +Archives : + +```text +ksp-general-0.2.9-pre.001.zip +ksp-general-0.2.9-pre.NNN-fix.MMM.zip +ksp-general-0.2.9-rel.001.zip +``` + +Les archives delta contiennent uniquement les fichiers ajoutés/modifiés, avec leurs chemins workspace. + +Aucun tag Git prerelease. Le tag stable attendu est seulement : + +```text +v0.2.9 +``` + +Les deltas déjà publiés sont immuables ; un correctif crée un nouveau `fix.MMM`. + +--- + +## 14. Validation opérateur et application + +Après application d'une tranche Rust : + +```bash +cargo fmt --all +python3 scripts/audit_rust_workspace_rules.py +cargo check --workspace +cargo clippy --workspace --all-targets +``` + +Puis tests ciblés pertinents : + +```bash +cargo test -p ksp-onchain-transport-lib +cargo test -p ksp-config-lib # si Config modifiée +``` + +À la fermeture d'une prerelease technique : + +```bash +cargo test --workspace +``` + +Quand le graphe gRPC est ajouté/modifié : + +```bash +cargo tree -p ksp-onchain-transport-lib +cargo tree -p ksp-onchain-transport-lib --duplicates +cargo tree --duplicates +``` + +Inspecter explicitement : + +```text +yellowstone-grpc-* directes éventuelles +tonic/prost/prost-types +tower/http/hyper/bytes +rustls/tokio-rustls +Solana/Agave transitifs inattendus +versions dupliquées +features activées +``` + +Un doublon transitif peut être accepté s'il est inévitable et documenté. Ne pas dégrader une dépendance moderne uniquement pour forcer une unification artificielle. + +### Tests gRPC attendus + +Selon le scope final : + +```text +settings validation +endpoint/TLS validation +metadata redaction +connection errors safe +unary request/response exact +Subscribe request wire +filter validation/bounds +update oneof decode +unknown enum/oneof behavior +stream open/send/receive/close +server half-close +client close +Ping/Pong +backpressure +oversized inbound/outbound +provider Status safe mapping +reconnect budget +resubscribe ordering +from_slot/replay semantics +duplicate/gap observability +shutdown during reconnect +public API crate-root +release completeness +``` + +### Smoke live + +Le smoke live est **opt-in**. + +Il ne peut pas justifier : + +```text +secret versionné +std::env lu dans Transport +provider API publique hardcodée +nouveau smoke cross-crates ajouté à Config par facilité +``` + +Si une future surface d'intégration/orchestration KSP n'existe toujours pas, documenter la stratégie opérateur au lieu de casser les frontières. + +### Frontend/Tauri + +Aucun build Tauri n'est requis par défaut pour une release Transport pure si aucune application n'est modifiée. + +--- + +## 15. Critères de clôture de `0.2.9` + +La release ne peut devenir stable que si : + +```text +surface Yellowstone actuelle réauditée +standard vs extension provider explicitement classifié +scope final documenté sans dette silencieuse +strategy licence/dependencies justifiée +backend gRPC distinct de HTTP/WS +provider-neutral public API +secrets/metadata redacted +resource bounds explicites +stream lifecycle borné +backpressure/shutdown testés +reconnect/replay semantics documentés honnêtement +aucune promesse lossless non prouvée +Config -> Transport seulement +aucun Transport -> Config/Store/Program +aucun tracing direct dans Transport +aucun provider commercial propriétaire du contrat +HTTP 52 current + 14 historical non régressé +Standard WebSocket 18/18 non régressé +Helius WebSocket non régressé +public API canaries verts +release-completeness vert +workspace complet vert +cargo tree final inspecté +README/USAGE synchronisés +matrice Yellowstone fermée +forecast réalisé ou recalibré explicitement +prompt 0.2.10 préparé +``` + +Le numéro de la dernière prerelease n'est jamais un critère de clôture. Si les gates ne sont pas verts à `pre.013`, continuer avec `pre.014+` ou des fixes. + +`CHANGELOG.md` et le statut stable du `ROADMAP.md` sont finalisés à `rel.001`, pas artificiellement avant. + +--- + +## 16. Release/session suivante envisagée + +La release suivante prévue est : + +```text +0.2.10 — off-chain price transport +``` + +Mission pressentie : + +```text +introduire ksp-offchain-transport-lib +premier besoin réel = prix +au minimum SOL/USD et SOL/EUR +provider interchangeable derrière un contrat KSP +erreurs/timeouts/observabilité +``` + +Ne pas anticiper `0.2.10` dans Yellowstone en ajoutant des dépendances prix ou une abstraction réseau globale commune on-chain/off-chain. + +`0.2.11` reste la Price Desk + intégration prix dans Wallet Desk, après validation du composant off-chain spécialisé. + +--- + +## 17. Instruction d'ouverture + +Au début de la session `0.2.9` : + +1. confirmer la base stable `v0.2.8` ou l'archive stable autoritaire ; +2. vérifier `workspace.package.version = 0.2.8` et `deltas/0.2.8/rel.001.md` ; +3. lire les sources internes obligatoires dans l'ordre de la section 3 ; +4. relire les plans/validations HTTP, WebSocket standard et Helius ; +5. inspecter le code réel de Transport/Config avant de proposer les types gRPC ; +6. exécuter et enregistrer la baseline avant modification ; +7. réauditer **immédiatement** l'upstream Yellowstone courant : release, changelog, `geyser.proto`, `solana-storage.proto`, client/proto crates ; +8. dresser la matrice exacte des RPCs, filtres, updates, replay et extensions ; +9. séparer standard Yellowstone, extensions Triton/provider et pré-exécution/deshred ; +10. auditer licences, MSRV, versions `yellowstone-grpc-*`, `tonic` et `prost` avant toute dépendance ; +11. comparer les stratégies client/proto A/B/C ; +12. brainstormer credentials, message bounds, backpressure, reconnect, replay/gaps et smoke ownership ; +13. dimensionner chaque tranche à environ 15–20 minutes et **recalibrer explicitement la prévision souple de la section 12** ; +14. créer le plan, la validation et `deltas/0.2.9/pre.001.md` avec le forecast recalibré ; +15. exécuter les validations de gate disponibles ; +16. **ne pas ajouter `yellowstone-grpc-client`, `yellowstone-grpc-proto`, `tonic`, `prost`, un `grpc_endpoint` Config ou un client gRPC de production avant que le gate dependencies/licence/architecture/sizing soit cohérent**. + +La première réponse de travail de la nouvelle session doit donc être un **audit/sizing `0.2.9-pre.001` complet avec matrice et forecast recalibré**, pas une implémentation prématurée.