v0.2.11-pre.013
This commit is contained in:
12
CHANGELOG.md
12
CHANGELOG.md
@@ -1,8 +1,18 @@
|
||||
<!-- file: CHANGELOG.md -->
|
||||
<!-- version: 14 -->
|
||||
<!-- version: 15 -->
|
||||
|
||||
# Changelog KSP
|
||||
|
||||
## 0.2.11 — Off-chain price transport — 2026-08-26
|
||||
|
||||
`0.2.11` crée `ksp-offchain-transport-lib` avec une première surface volontairement bornée à **SOL/USD** et huit adapters REST V1 : CoinGecko, CoinMarketCap, CoinPaprika, Kraken, Coinbase Exchange, Jupiter Price V3, Birdeye et DexScreener. Les adapters utilisent `reqwest` directement, sans SDK provider, avec origines HTTPS possédées par la crate, DTOs wire privés et prix normalisés par `MarketPriceDecimal` sans passage canonique par `f64`. `MarketPriceObservation` conserve paire, sémantique, provenance et timestamps réellement disponibles afin de ne pas confondre prix agrégé, dernier trade d'exchange, heuristique Solana, spot provider et prix DEX pair. DexScreener exige une paire Solana explicite et ne réalise aucune discovery ou sélection automatique de pool.
|
||||
|
||||
La crate possède désormais le registry provider-neutral, les descriptors/capabilities, les limites et quotas informatifs, les états `MarketPriceProviderAvailability`, le cooldown et le service générique `MarketPriceService`. Les consumers disposent de `registry`, `refresh`, `refresh_many` et `refresh_all`; le batch V1 reste séquentiel et déterministe, ne dort jamais pour attendre un rate limit et n'introduit ni fallback, ni consensus, ni moyenne KSP. Les erreurs provider sont normalisées en états génériques et les credentials/endpoints/raw bodies restent absents des projections et diagnostics publics.
|
||||
|
||||
Config ajoute `std.offchain_transport` V1, son schema, les profils `public_keyless` et `all_free`, ainsi que `ResolvedOffchainTransportConfig` qui construit le service sans dépendance inverse. Les credentials CoinGecko/CoinMarketCap/Jupiter/Birdeye restent sous `KSP_SECRET_*`; la paire DexScreener utilise une provenance `KSP_PUBLIC_*`. Les deux applications desktop existantes embarquent les nouvelles resources Config sans encore consommer fonctionnellement le prix. Les canaris de sécurité verrouillent notamment l'absence d'URL/rate-limit provider configurable au-dessus de Config, de lecture directe d'environnement dans Off-chain Transport et de fuite de clés par `Debug`.
|
||||
|
||||
Le gate technique final a passé les audits Rust/Markdown, `cargo check`, Clippy, les tests ciblés Config/Off-chain, le workspace complet et les graphes Cargo. Le premier smoke live keyless a isolé une erreur de query CoinMarketCap (`ids=5426` au lieu de `id=5426`); `pre.011-fix.001` la corrige pour les modes Keyless et Basic, puis le re-smoke passe **7/7** providers keyless. Le smoke keyed Birdeye/CoinGecko Demo/CoinMarketCap Basic/Jupiter Free reste explicitement `SKIP opérateur`. `prompts/017-V0_2_12_START_PROMPT.md` ouvre ensuite `0.2.12 — SOL Prices Desk + intégration prix Wallet Desk` uniquement depuis le tag stable `v0.2.11`, avec audit/sizing desktop strict avant toute implémentation UI lourde.
|
||||
|
||||
## 0.2.10 — OrbitFlare Yellowstone gRPC — 2026-08-25
|
||||
|
||||
`0.2.10` ajoute OrbitFlare comme provider Yellowstone gRPC sur le moteur N1 et le standard N2 acquis dans `0.2.9`, sans modifier le moteur gRPC ni créer de façade provider inutile. L'audit et le smoke live ont établi le contrat réel du service Solana Free Devnet : endpoint `http://devnet.rpc.orbitflare.com:10000`, authentification par metadata gRPC secrète `x-token` portant la License Key OrbitFlare, et émission du Ping Yellowstone standard. Config Transport V3 représente ce provider avec `provider = orbitflare`, `cluster = devnet`, `protocol = solana_yellowstone` et `secret_metadata`, tandis que `.env.example` inventorie `KSP_SECRET_ORBITFLARE_DEVNET_GRPC_X_TOKEN` sans valeur réelle.
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# file: Cargo.toml
|
||||
# version: 284
|
||||
# version: 285
|
||||
|
||||
[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-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.2.11-pre.12"
|
||||
version = "0.2.11-pre.13"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: ROADMAP.md -->
|
||||
<!-- version: 88 -->
|
||||
<!-- version: 89 -->
|
||||
|
||||
# Roadmap KSP
|
||||
|
||||
@@ -55,7 +55,7 @@ Le roadmap décrit les objectifs à atteindre et les grandes étapes prévues. U
|
||||
- [X] `0.2.8` — Helius LaserStream WebSocket stable : façade provider dédiée sur l’actor 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.9` — Yellowstone gRPC standard/provider-neutral stable : moteur Tonic/Protobuf KSP partagé, sept unary standard retenues, `Subscribe` bidi et neuf variantes d’update, 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.
|
||||
- [X] `0.2.10` — OrbitFlare Yellowstone gRPC stable : profil Config V3 Devnet, License Key injectée comme metadata secrète `x-token`, smoke live `Subscribe -> Slot + Ping` validé deux fois, sans modification du moteur N1/N2 ni heartbeat provider.
|
||||
- [ ] `0.2.11` — Introduire `ksp-offchain-transport-lib` avec SOL/USD multi-provider via HTTP REST `reqwest` sans SDK provider ; la crate possède adapters, capacités/rate limits, disponibilité et refresh génériques, sans consensus/fallback automatique.
|
||||
- [X] `0.2.11` — Off-chain price transport stable : `ksp-offchain-transport-lib` expose SOL/USD via huit adapters REST `reqwest` sans SDK provider, décimal exact, sémantiques/provenance explicites, registry/availability/rate limits et refresh single/many/all génériques ; Config `std.offchain_transport` construit le service sans dépendance inverse, DexScreener reste lié à une paire explicite sans discovery, aucun consensus/fallback automatique n’est introduit, et le smoke live keyless final passe 7/7 après correction CoinMarketCap V2.
|
||||
- [ ] `0.2.12` — Introduire `ksp-app-solprices-desk` comme HID provider-agnostic consommant uniquement `ksp-offchain-transport-lib`, avec tableau prix/provider et refresh individuel/multiple ; puis intégrer cette capacité dans `ksp-app-wallet-desk` sans dupliquer la logique de récupération/normalisation.
|
||||
- [ ] `0.2.13` — Introduire la première surface de `ksp-interface-lib`, comprenant une API wire publique utilisable par les implémentations officielles et externes.
|
||||
- [ ] `0.2.14` — Introduire `ksp-program-api` comme premier contrat Program extensible, sans imposer encore `ksp-program-lib` complet.
|
||||
|
||||
245
deltas/0.2.11/pre.013.md
Normal file
245
deltas/0.2.11/pre.013.md
Normal file
@@ -0,0 +1,245 @@
|
||||
<!-- file: deltas/0.2.11/pre.013.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.2.11-pre.013` — préparation de publication minimale
|
||||
|
||||
## 1. Base
|
||||
|
||||
```text
|
||||
0.2.11-pre.012
|
||||
```
|
||||
|
||||
Cette tranche est exclusivement le couloir de préparation de publication. Conformément à `docs/rules/PROMPT_STRUCTURE.md` et `docs/rules/FILE_CONTRACTS.md`, elle ne modifie aucun code fonctionnel, test, schema, Config, README, USAGE, plan, validation, architecture ou règle normative.
|
||||
|
||||
Le payload fonctionnel est limité à :
|
||||
|
||||
```text
|
||||
prompt de démarrage 0.2.12
|
||||
CHANGELOG.md
|
||||
ROADMAP.md
|
||||
```
|
||||
|
||||
avec les deux fichiers mécaniques autorisés :
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
deltas/0.2.11/pre.013.md
|
||||
```
|
||||
|
||||
## 2. Gate `pre.012`
|
||||
|
||||
Le gate opérateur `pre.012` du `2026-08-26` est entièrement vert :
|
||||
|
||||
```text
|
||||
cargo fmt --all PASS
|
||||
Rust workspace audit PASS / 0 export candidate
|
||||
Markdown audit PASS / 127 tables / 122 files
|
||||
cargo check --workspace PASS
|
||||
cargo clippy --workspace --all-targets PASS
|
||||
cargo test --workspace PASS
|
||||
```
|
||||
|
||||
Les suites directement concernées conservent notamment :
|
||||
|
||||
```text
|
||||
Off-chain Transport unit 58/58 PASS
|
||||
Off-chain dependency boundary 6/6 PASS
|
||||
Off-chain public API 7/7 PASS
|
||||
Off-chain release completeness 2/2 PASS
|
||||
Off-chain security hardening 3/3 PASS
|
||||
Config unit 120/120 PASS
|
||||
Config ownership 5/5 PASS
|
||||
Config public API 16/16 PASS
|
||||
```
|
||||
|
||||
Les smokes live restent `ignored` dans le workspace normal. Le re-smoke keyless `pre.011-fix.001` acquis avant la réconciliation documentaire reste la preuve live finale :
|
||||
|
||||
```text
|
||||
7/7 providers keyless PASS
|
||||
```
|
||||
|
||||
Le smoke keyed reste explicitement `SKIP opérateur` et n'est pas requalifié.
|
||||
|
||||
## 3. Version technique
|
||||
|
||||
```text
|
||||
workspace.package.version = 0.2.11-pre.13
|
||||
commit attendu = v0.2.11-pre.013
|
||||
aucun tag prerelease
|
||||
```
|
||||
|
||||
Le changement Cargo est mécanique ; aucune sémantique runtime ne change.
|
||||
|
||||
## 4. Relecture préalable au prompt `0.2.12`
|
||||
|
||||
Avant rédaction du prompt, les sources normatives ont été relues, notamment :
|
||||
|
||||
```text
|
||||
docs/rules/PROMPT_STRUCTURE.md
|
||||
docs/rules/VERSION_WORKFLOW.md
|
||||
docs/rules/RULES_DOCUMENTATION.md
|
||||
docs/rules/RULES_GENERAL.md
|
||||
docs/rules/RULES_DEPENDENCIES.md
|
||||
docs/rules/RULES_KSP.md
|
||||
docs/rules/FILE_CONTRACTS.md
|
||||
|
||||
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
|
||||
```
|
||||
|
||||
La rédaction a aussi confronté :
|
||||
|
||||
```text
|
||||
prompts/011-V0_2_6_START_PROMPT.md
|
||||
prompts/015-V0_2_10_START_PROMPT.md
|
||||
prompts/016-V0_2_11_START_PROMPT.md
|
||||
|
||||
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
||||
docs/plans/018-V0_2_11_OFFCHAIN_PRICE_TRANSPORT_PLAN.md
|
||||
docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md
|
||||
|
||||
crates/ksp-offchain-transport-lib public API
|
||||
ksp-config-lib Off-chain adapter/composite/packaging
|
||||
ksp-app-config-desk gabarit Tauri actuel
|
||||
ksp-app-wallet-desk composition/runtime actuel
|
||||
```
|
||||
|
||||
Les sources officielles Tauri 2 actuelles sur configuration, sécurité et capabilities ainsi que la référence TS-RS sont inscrites dans le prompt comme sources externes à réauditer en `0.2.12-pre.001`. Aucune version historique n'est transformée en pin.
|
||||
|
||||
## 5. Prompt `0.2.12`
|
||||
|
||||
Ajout de :
|
||||
|
||||
```text
|
||||
prompts/017-V0_2_12_START_PROMPT.md
|
||||
```
|
||||
|
||||
Le prompt ouvre exclusivement :
|
||||
|
||||
```text
|
||||
v0.2.11 -> 0.2.12-pre.001
|
||||
```
|
||||
|
||||
Mission :
|
||||
|
||||
```text
|
||||
1. créer ksp-app-solprices-desk comme HID provider-agnostic
|
||||
2. valider inventory/price/availability/freshness + refresh single/many/all
|
||||
3. intégrer ensuite la même capacité générique dans ksp-app-wallet-desk
|
||||
4. ne dupliquer aucune récupération/normalisation provider dans les applications
|
||||
```
|
||||
|
||||
Les décisions acquises sont reprises depuis l'architecture et la clôture `0.2.11` :
|
||||
|
||||
```text
|
||||
SOL/USD V1 existant
|
||||
8 providers sous Off-chain Transport
|
||||
aucun provider concret hardcodé dans l'app
|
||||
Config propriétaire des credentials
|
||||
Off-chain Transport propriétaire des rate limits/cooldowns
|
||||
provider_id opaque autorisé comme identifiant générique
|
||||
ports SOL Prices Desk attendus 1434/1435
|
||||
Tauri lancé crate-local
|
||||
aucun fetch provider frontend
|
||||
aucune API key/URL/header provider dans les DTOs
|
||||
Wallet Desk réutilise MarketPriceService
|
||||
```
|
||||
|
||||
Le prompt ne transforme pas les questions d'UI/composition encore ouvertes en décisions arbitraires. `pre.001` doit notamment trancher screen map, command/DTO map, composite dédié, ownership de l'état de présentation, UX refresh, capabilities Tauri, insertion Wallet Desk et stratégie de gate fonctionnel/live.
|
||||
|
||||
## 6. Prévision souple `0.2.12`
|
||||
|
||||
Le prompt fournit un forecast initial détaillé allant de l'audit/sizing au scaffold SOL Prices Desk, composition Config, table/refresh, stabilisation standalone, intégration Wallet Desk, hardening, puis trois couloirs distincts :
|
||||
|
||||
```text
|
||||
gate technique/live final
|
||||
réconciliation documentaire finale
|
||||
préparation minimale de publication
|
||||
```
|
||||
|
||||
Le forecast est explicitement recalibrable par `0.2.12-pre.001`. Si SOL Prices Desk + intégration Wallet Desk apparaît surdimensionné pour une release concrète clôturable dans la session, la frontière doit être rediscutée avant implémentation lourde plutôt que de supprimer silencieusement une partie de la mission.
|
||||
|
||||
## 7. `CHANGELOG.md`
|
||||
|
||||
Le changelog stable est préparé pour `0.2.11 — Off-chain price transport` avec les faits consolidés :
|
||||
|
||||
```text
|
||||
SOL/USD V1
|
||||
8 adapters REST sans SDK provider
|
||||
MarketPriceDecimal exact
|
||||
sémantiques/provenance/timestamps explicites
|
||||
registry + availability + rate limits/cooldowns
|
||||
refresh single/many/all séquentiel et déterministe
|
||||
Config std.offchain_transport V1
|
||||
origines provider fixes et secrets Config-owned
|
||||
DexScreener pair explicite sans discovery
|
||||
aucun consensus/fallback/moyenne KSP
|
||||
CoinMarketCap ids -> id corrigé au gate live
|
||||
re-smoke keyless final 7/7 PASS
|
||||
smoke keyed SKIP opérateur
|
||||
prompt 0.2.12 préparé
|
||||
```
|
||||
|
||||
## 8. `ROADMAP.md`
|
||||
|
||||
`0.2.11` passe à l'état réalisé avec une synthèse stable correspondant au contrat réellement livré et au smoke keyless final `7/7`.
|
||||
|
||||
La suite active reste :
|
||||
|
||||
```text
|
||||
0.2.12 SOL Prices Desk + intégration prix Wallet Desk
|
||||
0.2.13 Interface foundation
|
||||
0.2.14 Program API foundation
|
||||
```
|
||||
|
||||
Aucune renumérotation supplémentaire n'est introduite.
|
||||
|
||||
## 9. Fichiers modifiés/ajoutés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
CHANGELOG.md
|
||||
ROADMAP.md
|
||||
prompts/017-V0_2_12_START_PROMPT.md
|
||||
deltas/0.2.11/pre.013.md
|
||||
```
|
||||
|
||||
Aucun autre fichier ne doit changer dans cette tranche. En particulier, `prompts/000-README.md` n'est pas mis à jour ici : c'est un README et la lane de publication minimale interdit de rouvrir les README après la réconciliation documentaire.
|
||||
|
||||
## 10. Gate opérateur
|
||||
|
||||
Comme cette 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.11
|
||||
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.
|
||||
|
||||
## 11. Suite
|
||||
|
||||
Si ce gate est vert, la seule étape restante est :
|
||||
|
||||
```text
|
||||
0.2.11-rel.001
|
||||
```
|
||||
|
||||
Elle est limitée à la mécanique de publication stable : version Cargo `0.2.11`, delta `rel.001`, commit final et tag stable `v0.2.11`, sans rattrapage technique ou documentaire.
|
||||
|
||||
Après publication du tag stable, la session suivante ouvre :
|
||||
|
||||
```text
|
||||
0.2.12-pre.001
|
||||
```
|
||||
|
||||
avec `prompts/017-V0_2_12_START_PROMPT.md` et commence impérativement par l'audit/sizing défini dans ce prompt.
|
||||
1337
prompts/017-V0_2_12_START_PROMPT.md
Normal file
1337
prompts/017-V0_2_12_START_PROMPT.md
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user