v0.2.9-pre.015

This commit is contained in:
2026-08-25 08:35:16 +02:00
parent 6ddf2b4995
commit 15b129ad04
5 changed files with 171 additions and 21 deletions

View File

@@ -1,10 +1,18 @@
<!-- file: CHANGELOG.md --> <!-- file: CHANGELOG.md -->
<!-- version: 12 --> <!-- version: 13 -->
# Changelog KSP # Changelog KSP
Ce changelog résume uniquement les releases KSP considérées comme stables, dans l'ordre chronologique décroissant. Les détails de chaque livraison restent dans `deltas/`. Ce changelog résume uniquement les releases KSP considérées comme stables, dans l'ordre chronologique décroissant. Les détails de chaque livraison restent dans `deltas/`.
## 0.2.9 — Yellowstone gRPC standard/provider-neutral — 2026-08-24
`0.2.9` ajoute à `ksp-onchain-transport-lib` un moteur Yellowstone gRPC partagé construit directement sur Tonic/Protobuf, avec `yellowstone-grpc-proto` comme contrat wire upstream et sans `yellowstone-grpc-client` dans le runtime KSP. La surface Solana standard reste provider-neutral et couvre les sept unary retenues (`SubscribeReplayInfo`, `Ping`, `GetLatestBlockhash`, `GetBlockHeight`, `GetSlot`, `IsBlockhashValid`, `GetVersion`), `Subscribe` bidi, les familles accounts/slots/transactions/transaction status/blocks/block meta/entry, les neuf variantes d'update standard retenues, les filtres/common fields actuels, le backpressure, les limites de messages, le half-close/shutdown, ainsi qu'un reconnect/replay prudent depuis le dernier slot observé. Aucune garantie exactly-once, lossless ou d'ordre global gapless n'est introduite ; gaps et duplicates restent observables. `SubscribeDeshred` reste explicitement hors du standard KSP de cette release.
Config passe à `std.transport` V3, backward-readable avec V1 HTTP et V2 HTTP+WebSocket, et sépare les axes `provider` / `protocol` ainsi que `metadata` / `secret_metadata` sans créer de dépendance Transport -> Config/env. PublicNode constitue la première intégration provider : profils Yellowstone Mainnet et Testnet sur `https://solana-yellowstone-grpc.publicnode.com:443` et `https://solana-testnet-yellowstone-grpc.publicnode.com:443`, avec authentification `x-token` résolue par Config depuis des variables `KSP_SECRET_*`. Le smoke Transport pur reçoit les credentials uniquement par stdin opérateur, n'en journalise aucun et valide en live `Subscribe -> Slot` sur les deux réseaux ; le même personal token a été utilisé avec succès pour Mainnet et Testnet, tout en conservant deux entrées Config distinctes par flexibilité opérationnelle.
La clôture conserve les surfaces antérieures HTTP (**52 current typed + 14 historiques**), WebSocket Solana standard (**9 familles / 18 opérations**) et Helius LaserStream WebSocket. Le gate final comprend **383/383** tests unit Transport, **49/49** public API, **43/43** release completeness, **4/4** doctests, `cargo test --workspace`, les canaris de dépendances, le smoke PublicNode live **2/2 PASS** et l'inspection des graphes Cargo (`yellowstone-grpc-proto 12.6.0`, `tonic` / `tonic-prost 0.14.6`, `prost` / `prost-types 0.14.4`). `prompts/015-V0_2_10_START_PROMPT.md` ouvre ensuite `0.2.10 — OrbitFlare Yellowstone gRPC` uniquement depuis le tag stable `v0.2.9`, avec audit provider actuel, threat model et sizing en `pre.001` avant toute extension provider lourde.
## 0.2.8 — Helius LaserStream WebSocket — 2026-08-23 ## 0.2.8 — Helius LaserStream WebSocket — 2026-08-23
`0.2.8` étend `ksp-onchain-transport-lib` avec une façade `HeliusLaserStreamWsSession` dédiée qui réutilise le même `WsSession` physique/actor que le WebSocket Solana standard, sans second client, socket, registry ou scheduler. La surface stable Helius réutilise les sept familles standard actuellement retenues (`account`, `logs`, `program`, `root`, `signature`, `slot`, `slotsUpdates`) et ajoute lextension typée `transactionSubscribe` / `transactionUnsubscribe`; `block` et `vote` restent absents de la façade Helius et `slotsUpdates` conserve son statut unstable. Le heartbeat provider est possédé par lactor partagé et émet un WebSocket Ping control frame toutes les 60 secondes uniquement pour `WsProtocolKind::HeliusLaserStream`. `0.2.8` étend `ksp-onchain-transport-lib` avec une façade `HeliusLaserStreamWsSession` dédiée qui réutilise le même `WsSession` physique/actor que le WebSocket Solana standard, sans second client, socket, registry ou scheduler. La surface stable Helius réutilise les sept familles standard actuellement retenues (`account`, `logs`, `program`, `root`, `signature`, `slot`, `slotsUpdates`) et ajoute lextension typée `transactionSubscribe` / `transactionUnsubscribe`; `block` et `vote` restent absents de la façade Helius et `slotsUpdates` conserve son statut unstable. Le heartbeat provider est possédé par lactor partagé et émet un WebSocket Ping control frame toutes les 60 secondes uniquement pour `WsProtocolKind::HeliusLaserStream`.

View File

@@ -1,12 +1,12 @@
# file: Cargo.toml # file: Cargo.toml
# version: 259 # version: 260
[workspace] [workspace]
resolver = "3" 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"] 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] [workspace.package]
version = "0.2.9-pre.14" version = "0.2.9-pre.15"
edition = "2024" edition = "2024"
license = "MIT" license = "MIT"
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"

View File

@@ -1,5 +1,5 @@
<!-- file: ROADMAP.md --> <!-- file: ROADMAP.md -->
<!-- version: 85 --> <!-- version: 86 -->
# Roadmap KSP # Roadmap KSP
@@ -53,7 +53,7 @@ Le roadmap décrit les objectifs à atteindre et les grandes étapes prévues. U
- [X] `0.2.6``ksp-app-wallet-desk` + `.kspwallet` V2 stables : composition Config/Wallet/HTTP/Logging, lifecycle VIEW/OWNER, balance, administration/import/export, wire binaire V2, APIs multi-version, migration V1 -> V2 explicite et runtime Tauri packagé user-writable validés ; bundles Linux `.deb`/`.rpm`/`.AppImage` produits avant publication. Plan clôturé : `docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md`. - [X] `0.2.6``ksp-app-wallet-desk` + `.kspwallet` V2 stables : composition Config/Wallet/HTTP/Logging, lifecycle VIEW/OWNER, balance, administration/import/export, wire binaire V2, APIs multi-version, migration V1 -> V2 explicite et runtime Tauri packagé user-writable validés ; bundles Linux `.deb`/`.rpm`/`.AppImage` produits avant publication. Plan clôturé : `docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md`.
- [X] `0.2.7` — WebSocket Solana standard stable : 9 familles subscribe/unsubscribe typées (18/18 opérations), sessions physiques multiples explicites, subscriptions logiques typées, lifecycle/reconnect/resubscribe/backpressure/shutdown bornés, Config V2, non-régression HTTP 52+14, compliance finale, smoke WebSocket Devnet et audit de dépendances validés ; publication `rel.001` et prompt `0.2.8` prêts. - [X] `0.2.7` — WebSocket Solana standard stable : 9 familles subscribe/unsubscribe typées (18/18 opérations), sessions physiques multiples explicites, subscriptions logiques typées, lifecycle/reconnect/resubscribe/backpressure/shutdown bornés, Config V2, non-régression HTTP 52+14, compliance finale, smoke WebSocket Devnet et audit de dépendances validés ; publication `rel.001` et prompt `0.2.8` prêts.
- [X] `0.2.8` — Helius LaserStream WebSocket stable : façade provider dédiée sur lactor WebSocket partagé, sept familles standard réutilisées (`account/logs/program/root/signature/slot/slotsUpdates`) + `transactionSubscribe`/`transactionUnsubscribe`, `block/vote` absents, heartbeat Ping 60 s Helius-only, Config V2/secrets redacted, lifecycle adversarial, compliance HTTP 52+14 / Standard WS 18/18 et graphes Cargo finaux validés ; prompt `0.2.9` prêt. - [X] `0.2.8` — Helius LaserStream WebSocket stable : façade provider dédiée sur lactor WebSocket partagé, sept familles standard réutilisées (`account/logs/program/root/signature/slot/slotsUpdates`) + `transactionSubscribe`/`transactionUnsubscribe`, `block/vote` absents, heartbeat Ping 60 s Helius-only, Config V2/secrets redacted, lifecycle adversarial, compliance HTTP 52+14 / Standard WS 18/18 et graphes Cargo finaux validés ; prompt `0.2.9` prêt.
- [ ] `0.2.9`Construire le moteur client Yellowstone gRPC partagé, exposer la surface Solana Yellowstone standard et réaliser la première intégration provider PublicNode Mainnet/Testnet sans dupliquer le moteur ; le provider peut restreindre ou étendre le standard si une divergence réelle est démontrée. - [X] `0.2.9`Yellowstone gRPC standard/provider-neutral stable : moteur Tonic/Protobuf KSP partagé, sept unary standard retenues, `Subscribe` bidi et neuf variantes dupdate, lifecycle/backpressure/reconnect/replay bornés sans promesse lossless, Config Transport V3 backward V1/V2 avec provider/protocol séparés, profils PublicNode Mainnet/Testnet authentifiés par `x-token`, smoke live `Subscribe -> Slot` 2/2 PASS et graphes Cargo finaux inspectés ; `SubscribeDeshred` reste hors scope.
- [ ] `0.2.10` — Ajouter lintégration Yellowstone gRPC OrbitFlare sur le moteur/standard acquis, avec audit explicite des auth/capabilities/restrictions/extensions et Devnet comme cible gratuite prioritaire. - [ ] `0.2.10` — Ajouter lintégration Yellowstone gRPC OrbitFlare sur le moteur/standard acquis, avec audit explicite des auth/capabilities/restrictions/extensions et Devnet comme cible gratuite prioritaire.
- [ ] `0.2.11` — Ajouter lintégration Helius LaserStream gRPC sur le moteur Yellowstone partagé, avec audit de compatibilité/replay/auth/extensions, sans confondre cette surface avec LaserStream WebSocket. - [ ] `0.2.11` — Ajouter lintégration Helius LaserStream gRPC sur le moteur Yellowstone partagé, avec audit de compatibilité/replay/auth/extensions, sans confondre cette surface avec LaserStream WebSocket.
- [ ] `0.2.12` — Introduire `ksp-offchain-transport-lib` avec un premier lecteur de prix, au minimum SOL/USD et SOL/EUR. - [ ] `0.2.12` — Introduire `ksp-offchain-transport-lib` avec un premier lecteur de prix, au minimum SOL/USD et SOL/EUR.

104
deltas/0.2.9/pre.015.md Normal file
View File

@@ -0,0 +1,104 @@
<!-- file: deltas/0.2.9/pre.015.md -->
<!-- version: 1 -->
# Delta `0.2.9-pre.015` — préparation de publication minimale
## 1. Base
```text
0.2.9-pre.014
```
Cette tranche est exclusivement le couloir de préparation de publication défini par les règles de fermeture KSP. Elle ne corrige aucun README, USAGE, plan, validation, règle, code, test, schema ou config.
## 2. Gate `pre.014` reçu
Le gate opérateur de `0.2.9-pre.014` reçu le 2026-08-24 confirme :
```text
cargo fmt --all PASS
Rust workspace audit PASS, 0 export candidate
Markdown audit PASS, 87 tableaux / 259 fichiers
cargo check --workspace PASS
cargo clippy --workspace --all-targets PASS sans warning
cargo test --workspace PASS
```
`pre.014` n'ayant modifié que la version Cargo et la documentation, le smoke PublicNode 2/2 et les graphes Cargo fermés dans `pre.013` n'ont pas été rejoués.
## 3. Version technique
```text
workspace.package.version = 0.2.9-pre.15
```
La modification est mécanique ; aucune sémantique runtime ne change.
## 4. `CHANGELOG.md`
Le changelog stable est préparé pour `0.2.9 — Yellowstone gRPC standard/provider-neutral` avec les faits consolidés : moteur Yellowstone partagé, surface Solana standard, Config V3, PublicNode Mainnet/Testnet avec `x-token`, smoke live 2/2, non-régressions et graphes finaux.
## 5. `ROADMAP.md`
`0.2.9` passe à l'état réalisé/validé dans la roadmap globale. La séquence suivante reste :
```text
0.2.10 OrbitFlare Yellowstone gRPC
0.2.11 Helius LaserStream gRPC
0.2.12 off-chain price transport
0.2.13 Price Desk + intégration prix Wallet Desk
0.2.14 interface/wire foundation
0.2.15 program-api foundation
```
## 6. Prompt `0.2.10`
Le draft `prompts/015-V0_2_10_START_PROMPT.md` est finalisé. Il intègre l'état réel de `v0.2.9` :
```text
PublicNode Mainnet + Testnet validés
metadata x-token secrète via Config
Subscribe -> Slot 2/2 PASS
unary standard != entitlement garanti chez chaque provider
```
Sa prévision souple est également corrigée pour réserver explicitement les trois couloirs de fermeture applicables :
```text
gate technique/live final éventuel
réconciliation documentaire finale
préparation de publication minimale prompt + CHANGELOG + ROADMAP
```
Le prompt rappelle qu'un `fix` reste local à son couloir et que `rel.001` ne sert jamais de rattrapage.
## 7. Fichiers modifiés/ajoutés
```text
Cargo.toml
CHANGELOG.md
ROADMAP.md
prompts/015-V0_2_10_START_PROMPT.md
deltas/0.2.9/pre.015.md
```
Aucun autre fichier ne doit changer dans cette tranche.
## 8. Gate opérateur
Comme la tranche ne modifie aucun code/runtime/config/schema :
```bash
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.2.9
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test --workspace
```
Aucun smoke live ni `cargo tree` n'est à rejouer si le delta est appliqué exactement.
## 9. Suite
Si ce gate est vert, `0.2.9-rel.001` est la seule étape restante. Elle est limitée à la mécanique de publication stable : version Cargo `0.2.9`, delta `rel.001`, commit final et tag `v0.2.9`, sans rattrapage technique ou documentaire.

View File

@@ -1,5 +1,5 @@
<!-- file: prompts/015-V0_2_10_START_PROMPT.md --> <!-- file: prompts/015-V0_2_10_START_PROMPT.md -->
<!-- version: 1 --> <!-- version: 2 -->
# Prompt de démarrage `0.2.10` — OrbitFlare Yellowstone gRPC # Prompt de démarrage `0.2.10` — OrbitFlare Yellowstone gRPC
@@ -55,7 +55,9 @@ Yellowstone Subscribe accounts/slots/transactions/status/blocks/meta/
Yellowstone updates 9 variantes standard retenues Yellowstone updates 9 variantes standard retenues
Yellowstone lifecycle bidi/backpressure/half-close/shutdown bornés Yellowstone lifecycle bidi/backpressure/half-close/shutdown bornés
Yellowstone reconnect/replay KSP-owned, prudent, non lossless Yellowstone reconnect/replay KSP-owned, prudent, non lossless
PublicNode N3 premier provider standard sans divergence wire PublicNode N3 Mainnet + Testnet validés sur le standard N2
PublicNode auth metadata secrète x-token via Config
PublicNode live Subscribe -> Slot 2/2 PASS
Config Transport V1 HTTP + V2 WS + V3 gRPC backward-readable Config Transport V1 HTTP + V2 WS + V3 gRPC backward-readable
Config -> Transport autorisé Config -> Transport autorisé
@@ -399,9 +401,21 @@ Une policy OrbitFlare supplémentaire doit s'ajouter sans casser ces garanties.
### 5.4 PublicNode N3 ### 5.4 PublicNode N3
PublicNode constitue le premier témoin provider : lorsqu'aucune divergence n'existe, KSP réutilise directement le standard N2 avec un `provider` descriptif. PublicNode constitue le premier témoin provider et réutilise directement le standard N2 avec un `provider` descriptif. Les faits stabilisés à préserver sont :
OrbitFlare ne reçoit donc une façade publique spécifique que si `pre.001` démontre qu'un comportement doit être exposé au consumer KSP. ```text
Mainnet endpoint = https://solana-yellowstone-grpc.publicnode.com:443
Testnet endpoint = https://solana-testnet-yellowstone-grpc.publicnode.com:443
auth wire = metadata x-token secrète
Config secret = deux variables KSP_SECRET_* distinctes
live gate = Subscribe -> Slot, Mainnet PASS + Testnet PASS
```
Le même personal token opérateur a été validé sur les deux réseaux ; les deux variables Config restent distinctes uniquement pour conserver de la flexibilité opérationnelle. Ne pas transformer ce constat en règle générale sur la portée des tokens PublicNode.
Les essais live ont aussi montré qu'un endpoint provider peut restreindre certaines unary indépendamment du streaming. Une unary standard disponible dans N2 n'est donc pas une garantie d'entitlement chez chaque provider.
OrbitFlare ne reçoit une façade publique spécifique que si `pre.001` démontre qu'un comportement doit être exposé au consumer KSP.
### 5.5 Config V3 ### 5.5 Config V3
@@ -878,23 +892,34 @@ pre.002 provider descriptor/capabilities et settings/policy minimale réellemen
pre.003 heartbeat/auth/lifecycle OrbitFlare seulement si divergence confirmée pre.003 heartbeat/auth/lifecycle OrbitFlare seulement si divergence confirmée
preuve : fixture déterministe + cancellation/reconnect + redaction + aucun second actor preuve : fixture déterministe + cancellation/reconnect + redaction + aucun second actor
pre.004 Config V3 OrbitFlare + profils retenus + smoke live opt-in architecture-safe pre.004 Config V3 OrbitFlare + profils retenus + déterministe/adversarial/compliance
preuve : provenance secret correcte + endpoint réel opérateur + standard surface réutilisée preuve : provenance secret correcte + standard N2 réutilisé + non-régressions ciblées
pre.005 adversarial/compliance + non-régressions PublicNode/standard + README/USAGE + cargo tree + prompt 0.2.11 pre.005 gate technique/live final si applicable
preuve : workspace final vert + docs/validation fermées + prompt suivant autonome preuve : smoke OrbitFlare opt-in ou bloc externe qualifié + workspace + graphes Cargo finaux
rel.001 publication stable stricte pre.006 réconciliation documentaire finale
preuve : plan + validation + README/USAGE + références durables synchronisés, aucun runtime modifié
pre.007 préparation de publication minimale
preuve : prompt 0.2.11 + CHANGELOG.md + ROADMAP.md uniquement, hors Cargo.toml/delta mécaniques
rel.001 publication stable stricte, sans rattrapage technique ou documentaire
``` ```
Règles : Règles :
```text ```text
chaque tranche vise nominalement 1520 min de travail effectif chaque tranche vise nominalement 1520 min de travail effectif
pre.001 peut fusionner/scinder/déplacer/ajouter des prereleases pre.001 peut fusionner/scinder/déplacer/ajouter des prereleases de développement
si OrbitFlare est purement standard, réduire le nombre de tranches si OrbitFlare est purement standard, réduire les tranches intermédiaires
si auth/heartbeat implique une extension moteur importante, scinder avant implémentation si auth/heartbeat implique une extension moteur importante, scinder avant implémentation
un fix peut être inséré après toute tranche le gate technique/live final peut être omis si aucun smoke/live n'est pertinent
réconciliation documentaire et préparation de publication restent toujours deux prereleases distinctes
la dernière prerelease ne finalise que prompt suivant + CHANGELOG + ROADMAP, hors Cargo.toml/delta mécaniques
un fix reste local à la responsabilité de sa prerelease
un défaut découvert dans un couloir antérieur ouvre une nouvelle prerelease dédiée puis rejoue les couloirs suivants
rel.001 ne sert jamais de tranche de rattrapage
le numéro final n'est jamais un critère de clôture le numéro final n'est jamais un critère de clôture
``` ```
@@ -945,6 +970,17 @@ v0.2.10
Les deltas publiés sont immuables. Les deltas publiés sont immuables.
La fermeture respecte `docs/rules/PROMPT_STRUCTURE.md` et `docs/rules/VERSION_WORKFLOW.md` :
```text
gate technique/live final éventuel
-> réconciliation documentaire finale
-> préparation de publication minimale
-> rel.001
```
La dernière prerelease avant `rel.001` ne modifie fonctionnellement que le prompt suivant, `CHANGELOG.md` et `ROADMAP.md`, en plus de `Cargo.toml` et de son delta mécanique.
--- ---
## 14. Validation opérateur et application ## 14. Validation opérateur et application
@@ -1052,12 +1088,14 @@ Standard WS 18/18 non régressé
Helius WS non régressé Helius WS non régressé
firewall dépendances vert firewall dépendances vert
workspace complet vert workspace complet vert
README/USAGE synchronisés README/USAGE synchronisés dans la prerelease documentaire dédiée
matrice OrbitFlare fermée matrice OrbitFlare fermée avant la prerelease de publication
prompt 0.2.11 préparé prompt 0.2.11 préparé uniquement dans la dernière prerelease
CHANGELOG/ROADMAP finalisés uniquement dans la dernière prerelease
aucun rattrapage technique/documentaire dans rel.001
``` ```
Le numéro de prerelease n'est jamais un critère de clôture. Le numéro de prerelease n'est jamais un critère de clôture. Les numéros de la prévision peuvent dériver, mais l'ordre des couloirs de fermeture ne dérive pas.
--- ---