v0.2.12-pre.010

This commit is contained in:
2026-08-27 19:11:07 +02:00
parent ca6af3d904
commit 4f71dbc62d
14 changed files with 457 additions and 50 deletions

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/003-COMPONENT_CONTRACTS.md -->
<!-- version: 8 -->
<!-- version: 9 -->
# Contrats initiaux des composants KSP
@@ -78,7 +78,9 @@ Pour cette surface, Off-chain Transport possède le registry runtime des provide
Les adapters provider V1 utilisent uniquement `reqwest` et les primitives génériques du workspace ; aucun SDK provider n'est introduit. Config peut adapter ses documents vers les settings publics provider-capability-aware, mais Off-chain Transport ne lit jamais directement l'environnement ou les fichiers Config.
La future `ksp-app-solprices-desk` est une HID provider-agnostic : elle liste et déclenche uniquement les surfaces génériques de la crate. Toute connaissance de CoinGecko, CoinMarketCap, CoinPaprika, Kraken, Coinbase, Jupiter, Birdeye ou DexScreener reste sous Off-chain Transport/Config.
`ksp-app-solprices-desk` est la HID provider-agnostic dédiée : elle liste et déclenche uniquement les surfaces génériques de la crate. Toute connaissance de CoinGecko, CoinMarketCap, CoinPaprika, Kraken, Coinbase, Jupiter, Birdeye ou DexScreener reste sous Off-chain Transport/Config.
Wallet Desk peut consommer la même surface générique comme capacité auxiliaire. Sa moyenne SOL/USD et l'équivalent USD de balance sont des projections locales au consumer calculées à partir des observations du refresh courant ; ils ne deviennent ni un consensus, ni un fallback, ni un prix canonique possédé par Off-chain Transport.
## Wallet

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/004-COMPONENT_INVENTORY.md -->
<!-- version: 22 -->
<!-- version: 23 -->
# Inventaire initial des composants KSP
@@ -25,13 +25,13 @@ Ce document maintient l'inventaire synthétique des composants retenus ou presse
| Config Desk | `ksp-app-config-desk` | app | Stable | `0.1.4` | validation/management Config |
| On-chain HTTP | `ksp-onchain-transport-lib` | lib | Stable | `0.2.1``0.2.4` | HTTP standard complet : 52/52 current + 14/14 historical |
| Wallet | `ksp-wallet-lib` | lib | Stable | `0.2.5` | `.kspwallet`, VIEW/OWNER, secrets, signature, import/export |
| Wallet Desk | `ksp-app-wallet-desk` | app | Stable | `0.2.6` | Wallet + Config composite + HTTP/balance |
| Wallet Desk | `ksp-app-wallet-desk` | app | Stable | `0.2.6` | Wallet + Config + balance HTTP + projection SOL/USD auxiliaire |
| Wallet V2 | `ksp-wallet-lib` | lib | Stable | `0.2.6` | wire/runtime V2 + API default/versionnée + migration explicite |
| Standard WS | `ksp-onchain-transport-lib` | lib | Stable | `0.2.7` | WebSocket Solana 18/18, sessions/subscriptions bornées |
| Helius WS | `ksp-onchain-transport-lib` | lib | Stable | `0.2.8` | LaserStream WS : 7 standard + transaction, actor partagé |
| Yellowstone | `ksp-onchain-transport-lib` | lib | Stable | `0.2.9` | client gRPC standard/provider-neutral |
| Off-chain price | `ksp-offchain-transport-lib` | lib | Actif | `0.2.11` | prix SOL/USD multi-provider, limits et availability |
| SOL Prices Desk | `ksp-app-solprices-desk` | app | Retenu | `0.2.12` | HID provider-agnostic pour visualisation/refresh prix |
| Off-chain price | `ksp-offchain-transport-lib` | lib | Stable | `0.2.11` | prix SOL/USD multi-provider, limits et availability |
| SOL Prices Desk | `ksp-app-solprices-desk` | app | Stable | `0.2.12` | HID provider-agnostic pour visualisation/refresh prix |
| Wire | `ksp-interface-lib` | lib | Retenu | `0.2.13` | façade wire officielle + API publique wire |
| Program API | `ksp-program-api` | API | Retenu | `0.2.14` | contrats extensibles Program |
| Program impl. | `ksp-program-lib` | lib | Retenu | vertical slices ultérieurs | implementations Program officielles |

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/005-DEPENDENCY_GRAPH.md -->
<!-- version: 14 -->
<!-- version: 15 -->
# Graphe de dépendances KSP
@@ -395,10 +395,11 @@ ksp-app-wallet-desk
-> ksp-config-lib
-> ksp-wallet-lib
-> ksp-onchain-transport-lib
-> ksp-offchain-transport-lib
-> ksp-logging-lib
```
L'app compose ; elle ne déplace pas Config/Wallet/Transport dans Tauri. Les handles `WalletView`/`WalletOwner` restent côté Rust, et le frontend ne reçoit que des DTOs sûrs. Config fournit la racine/profil Wallet et le profil Transport. Les passwords Wallet ne deviennent jamais des champs des documents JSON Config ; ils peuvent être saisis éphémèrement frontend -> Rust ou provenir plus tard de secrets process/`.env` `KSP_SECRET_WALLET_PASS_*` possédés exclusivement par Config. Le secret Solana ne devient jamais une valeur Config ni un DTO frontend.
L'app compose ; elle ne déplace pas Config/Wallet/Transport dans Tauri. Les handles `WalletView`/`WalletOwner` restent côté Rust, et le frontend ne reçoit que des DTOs sûrs. Config fournit la racine/profil Wallet, le profil Transport et le profil Off-chain Transport. Le refresh de balance peut composer une moyenne SOL/USD et un équivalent USD auxiliaires à partir des observations génériques du refresh courant sans introduire de provider concret dans Wallet Desk. Les passwords Wallet ne deviennent jamais des champs des documents JSON Config ; ils peuvent être saisis éphémèrement frontend -> Rust ou provenir plus tard de secrets process/`.env` `KSP_SECRET_WALLET_PASS_*` possédés exclusivement par Config. Le secret Solana ne devient jamais une valeur Config ni un DTO frontend.
### SOL Prices Desk

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/010-APPS_SERVICES_SCENARIOS_AND_CONTROL.md -->
<!-- version: 5 -->
<!-- version: 6 -->
# Applications, services, scenarios et control plane
@@ -76,6 +76,7 @@ Exemples de familles spécialisées :
```text
ksp-app-config-desk
ksp-app-wallet-desk
ksp-app-solprices-desk
ksp-app-store-desk
ksp-app-worker-<role>-desk
ksp-app-scenario-<domain>-<environment>-desk-demo
@@ -96,7 +97,14 @@ ksp-app-config-desk
-> ksp-config-lib
ksp-app-wallet-desk
-> ksp-config-lib
-> ksp-wallet-lib
-> ksp-onchain-transport-lib
-> ksp-offchain-transport-lib
ksp-app-solprices-desk
-> ksp-config-lib
-> ksp-offchain-transport-lib
ksp-app-store-desk
-> ksp-store-api

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md -->
<!-- version: 92 -->
<!-- version: 93 -->
# Séquence des releases fonctionnelles KSP
@@ -512,7 +512,9 @@ Ces providers ne déplacent pas la séquence active et ne reçoivent ni façade,
`0.2.11` introduit `ksp-offchain-transport-lib` avec une première surface volontairement limitée à SOL/USD. La release retient huit adapters REST (`CoinGecko`, `CoinMarketCap`, `CoinPaprika`, `Kraken`, `Coinbase Exchange`, `Jupiter Price V3`, `Birdeye`, `DexScreener`) utilisant `reqwest` et des DTOs KSP privés, sans SDK provider. Off-chain Transport possède le registry, les capacités/rate limits, les indisponibilités et les refresh individuels/multiples séquentiels ; Config construit le service depuis `std.offchain_transport`. Le gate live final keyless passe `7/7` après correction du paramètre CoinMarketCap Simple Price V2. Aucun consensus, fallback automatique ou découverte de pool DexScreener n'est introduit.
`0.2.12` ajoute `ksp-app-solprices-desk`, HID pure qui ne connaît aucun provider et consomme uniquement les descriptors, observations, états et opérations génériques de `ksp-offchain-transport-lib`. Sa première vue liste les providers/prix et permet refresh individuel/multiple en laissant entièrement les limitations au service. Après stabilisation de cette application spécialisée, la même release doit intégrer la capacité de prix offchain dans `ksp-app-wallet-desk` sans dupliquer la récupération/normalisation appartenant au composant spécialisé. Le gate actif est [`019-V0_2_12_SOL_PRICES_DESK_PLAN.md`](019-V0_2_12_SOL_PRICES_DESK_PLAN.md) avec [`../validation/015-V0_2_12_SOL_PRICES_DESK.md`](../validation/015-V0_2_12_SOL_PRICES_DESK.md) : composite Price Desk dédié, ports 1434/1435, état de présentation backend en mémoire, auto-refresh et valorisation USD du solde hors scope.
`0.2.12` ajoute `ksp-app-solprices-desk`, HID pure qui ne connaît aucun provider et consomme uniquement les descriptors, observations, états et opérations génériques de `ksp-offchain-transport-lib`. La vue Prices expose les états et timestamps distincts, le prix exact, le refresh individuel, sélectionné et global, avec garde batch `1..=64` et sans polling/auto-refresh. Le composite dédié utilise les ports 1434/1435 et un état de présentation backend en mémoire.
La même release étend `ksp-app-wallet-desk` de façon minimale : le refresh de balance déclenche aussi le refresh SOL/USD générique, calcule côté Rust une moyenne à partir des observations produites par ce refresh puis affiche cette moyenne et l'équivalent USD exact de la balance, ou `N.A.`. Cette moyenne est strictement consumer-owned et ne crée aucun consensus/fallback/prix canonique dans Off-chain Transport. Le gate final est conservé dans [`019-V0_2_12_SOL_PRICES_DESK_PLAN.md`](019-V0_2_12_SOL_PRICES_DESK_PLAN.md) avec [`../validation/015-V0_2_12_SOL_PRICES_DESK.md`](../validation/015-V0_2_12_SOL_PRICES_DESK.md).
Metadata HTTP/IPFS/Arweave viendra au premier besoin Metadata réel. SOL/EUR et les autres quotes restent une extension ultérieure explicite, sans conversion fiat cachée.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md -->
<!-- version: 19 -->
<!-- version: 20 -->
# Plan `0.2.12` — SOL Prices Desk + intégration prix Wallet Desk
@@ -588,21 +588,29 @@ Fusion des anciens hardenings `pre.008`/`pre.012` et du gate `pre.013` : la sél
#### `pre.009-fix.001` — Build Price Desk + source de vérité de version Tauri
**Statut : réalisé ; gate opérateur complet PASS, y compris smoke live et builds Config/Wallet/SOL Prices Desk.**
Le fix supprime la fonction TypeScript morte et formalise la politique de version desktop : `workspace.package.version` est l'identité KSP autoritative ; les trois `tauri.conf.json` omettent `version` afin que Tauri la dérive de Cargo ; les `package.json` privés restent des manifests frontend non couplés au bump workspace. Les canaris Config/Wallet/SOL Prices vérifient désormais ce fallback plutôt qu'une égalité artificielle `package.json == tauri.conf.json == CARGO_PKG_VERSION`. Aucun comportement prix, Wallet ou Config n'est modifié.
### `pre.010` — Réconciliation documentaire + préparation de publication
### `pre.010` — Réconciliation documentaire finale
**Statut : réalisé ; gate documentaire à confirmer.**
Réconciliation finale des documents durables avec le runtime effectivement validé : README/USAGE SOL Prices Desk, README/USAGE Wallet Desk, architecture Apps/Dependencies/Contracts/Inventory, séquence fonctionnelle, index documentation, présent plan et matrice de validation. Cette tranche ne modifie ni `CHANGELOG.md`, ni `ROADMAP.md`, ni le prompt suivant et ne rouvre aucun code fonctionnel.
### `pre.011` — Préparation de publication minimale
**Statut : planifié.**
Fusion des anciennes tranches `pre.014`/`pre.015` : réconciliation README/USAGE/plan/validation avec le runtime réellement validé, puis prompt suivant, `CHANGELOG.md` et `ROADMAP.md`. Cette tranche reste documentaire/mécanique et ne rouvre aucun code fonctionnel.
Dernière prerelease conforme à `PROMPT_STRUCTURE.md` / `VER-LIFECYCLE-003` : hors `Cargo.toml` et delta mécaniques, elle modifie uniquement le prompt de démarrage `0.2.13`, `CHANGELOG.md` et `ROADMAP.md`. Aucun README/USAGE/plan/validation/architecture/code/test n'est rouvert.
### `rel.001` — Publication stable `v0.2.12`
**Statut : planifié.**
Mécanique de publication stable uniquement, après validation de `pre.010` et vérification de la cohérence de release. Aucun défaut fonctionnel ou documentaire ne doit être absorbé par `rel.001`.
Mécanique de publication stable uniquement, après validation de `pre.011` et vérification de la cohérence de release. Aucun défaut fonctionnel ou documentaire ne doit être absorbé par `rel.001`.
Le Price Desk est fermé fonctionnellement après `pre.007`. La décision opérateur de simplifier Wallet Desk réduit le reste de la release à une seule tranche fonctionnelle `pre.008`, un gate/hardening transversal `pre.009`, une clôture documentaire/mécanique `pre.010`, puis `rel.001`.
Le Price Desk est fermé fonctionnellement après `pre.007`, Wallet après `pre.008`, et le gate technique/live/builds après `pre.009-fix.001`. La fermeture minimale restante est donc `pre.010` documentaire, `pre.011` publication prep, puis `rel.001`.
## 20. Critères de sortie `pre.001`

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/015-V0_2_12_SOL_PRICES_DESK.md -->
<!-- version: 18 -->
<!-- version: 19 -->
# Validation `0.2.12` — SOL Prices Desk + intégration Wallet Desk
@@ -40,7 +40,7 @@ NOT RUN commande non exécutée dans le contexte indiqué
| Wallet integration map | PASS | plan 019 section 12 |
| auto-refresh | OUT | hors scope confirmé |
| équivalent USD du solde | PASS | demandé opérateur; calcul backend exact depuis moyenne du refresh |
| forecast souple recalibré | PASS | clôture condensée jusquà `pre.010` + `rel.001` |
| forecast souple recalibré | PASS | fermeture normative `pre.010` docs + `pre.011` publication + rel |
| scope clôturable | PASS | pas de redécoupage requis avant `pre.002` |
| code/scaffold fonctionnel ajouté en `pre.001` | OUT | interdit par le gate |
@@ -200,7 +200,8 @@ Après décision opérateur de simplifier Wallet Desk, les responsabilités rest
```text
pre.008 intégration Wallet minimale + moyenne SOL/USD
pre.009 hardening transversal + gate technique/live + builds finaux
pre.010 réconciliation documentaire + prompt suivant + CHANGELOG + ROADMAP
pre.010 réconciliation documentaire finale
pre.011 prompt suivant + CHANGELOG + ROADMAP uniquement
rel.001 publication stable
```
@@ -847,3 +848,45 @@ cargo test -p ksp-app-solprices-desk --test market_price_composition_live_smoke
```
Le build Wallet n'a pas besoin d'être rejoué pour valider la correction TypeScript Price Desk, mais un build opportuniste reste autorisé pour confirmer le fallback Cargo sur une autre app.
## 30. Gate `0.2.12-pre.009-fix.001` — clôture technique complète
Le gate opérateur final confirme la correction TypeScript et la nouvelle source de vérité de version desktop :
```text
cargo fmt --all PASS
python3 scripts/audit_rust_workspace_rules.py PASS
python3 scripts/audit_markdown_tables.py README.md ... deltas PASS
cargo check --workspace PASS
cargo clippy --workspace --all-targets PASS
cargo test -p ksp-app-solprices-desk PASS
cargo test --workspace PASS
market_price_composition_live_smoke PASS
cargo tauri build — SOL Prices Desk PASS — deb/rpm/AppImage 0.2.12-pre.9.fix.1
cargo tauri build — Wallet Desk PASS — deb/rpm/AppImage 0.2.12-pre.9.fix.1
cargo tauri build — Config Desk PASS — deb/rpm/AppImage 0.2.12-pre.9.fix.1
```
Le build Config est supplémentaire au gate minimal mais confirme le contrat `VER-ID-015/016` : son `package.json` reste à `0.2.6`, tandis que le bundle Tauri prend correctement `0.2.12-pre.9.fix.1` depuis Cargo sans champ `tauri.conf.json.version`.
Le couloir technique/live/build est donc fermé. Aucun test réseau ou build Tauri supplémentaire n'est requis dans la réconciliation documentaire `pre.010`, sauf découverte d'une anomalie documentaire qui invaliderait une preuve technique.
## 31. Réconciliation `0.2.12-pre.010` — documents durables
La réconciliation finale doit figer les documents durables avant la tranche de publication minimale :
```text
SOL Prices Desk README final provider-neutral/manual refresh
SOL Prices Desk USAGE guide opérateur créé
Wallet Desk README/USAGE moyenne SOL/USD + équivalent USD documentés
architecture Component Contracts Price Desk actuel + moyenne consumer-owned
architecture Component Inventory Off-chain/Price Desk stables pour 0.2.11/0.2.12
architecture Dependency Graph Wallet -> Off-chain Transport explicite
architecture Apps/Services Price Desk et dépendances directes explicites
Functional Release Sequence scope réel 0.2.12 réconcilié
docs/000-README candidate 0.2.12 récapitulée
plan 019 / validation 015 gates réels et fermeture séparée
```
Conformément à `PROMPT_STRUCTURE.md`, `CHANGELOG.md`, `ROADMAP.md` et le prompt `0.2.13` restent intacts dans `pre.010`. Ils appartiennent exclusivement à `pre.011`.