# `ksp-app-solprices-desk` `ksp-app-solprices-desk` est l'application desktop spécialisée de visualisation et de refresh manuel des prix SOL/USD fournis par `ksp-offchain-transport-lib`. L'application reste une **HID provider-neutral** : elle consomme le registry, les observations, les disponibilités et les opérations génériques du service Off-chain sans connaître les endpoints, credentials, limites ou wire formats propres aux providers. ## Package ```text package : ksp-app-solprices-desk lib : ksp_app_solprices_desk_lib bin : ksp-app-solprices-desk ``` Le binaire reste un launcher mince. La bibliothèque applicative possède l'assemblage Tauri, le bootstrap Config/Logging/Off-chain, l'état de présentation en mémoire et les commands Tauri. ## Responsabilités ```text ksp-config-lib -> composite, profils, secrets et runtime packagé ksp-offchain-transport-lib -> providers, HTTP, registry, availability, limits et refresh ksp-logging-lib -> logging/tracing applicatif ksp-app-solprices-desk -> orchestration Tauri + projections provider-neutral sûres ``` Le Desk ne possède aucun client HTTP provider et ne réimplémente ni admission, ni cooldown, ni retry provider. ## Vues ### Prices La vue `Prices` affiche l'inventaire SOL/USD dans l'ordre stable du registry et conserve chaque observation séparée. La projection comprend notamment : - identité/display provider et paire ; - sémantique et mode d'authentification ; - availability générique ; - prix exact sous forme de `String` ; - timestamp provider lorsqu'il existe ; - timestamp de réception KSP ; - `retry_at` lorsqu'il existe ; - état `Refreshing` local à la présentation. Aucune moyenne, aucun fallback automatique et aucun prix canonique ne sont produits par cette application. Les actions manuelles sont : ```text Refresh Refresh selected Refresh all Select all providers Clear selection ``` Le batch applicatif est borné à `1..=64` IDs opaques avant parsing/dispatch. Les doublons, IDs inconnus et conflits `in_flight` sont rejetés avant mutation partielle. ### Diagnostics La vue `Diagnostics` expose uniquement des informations de runtime sûres : identité/version applicative, profils résolus et compte de providers. Aucun endpoint, header, API key, payload provider ou prix n'est journalisé comme diagnostic brut. ## Config et profils Le composite dédié est : ```text cfg.composite.ksp-app-solprices-desk ``` Il compose : ```text logging Off-chain Transport ``` Profils committed : ```text public_keyless profil par défaut all_free modes gratuits incluant les credentials Config requis tests profil déterministe de composition ``` Le frontend ne sélectionne ni provider concret ni secret. La résolution des credentials reste entièrement possédée par Config. ## Frontières desktop Le frontend utilise uniquement : ```text core:default tracing:default ``` Il ne possède aucun accès direct filesystem, HTTP, shell ou persistence navigateur. Les refresh passent uniquement par les commands Rust centralisées dans `tauri.rs`. Il n'existe aucun polling, auto-refresh ou scheduler prix dans le Desk. Les deadlines/cooldowns affichés proviennent de `ksp-offchain-transport-lib`. ## Ports et build Les ports réservés sont : ```text Vite HTTP : 1434 Vite WS : 1435 ``` Le frontend build est isolé sous : ```text builds/khadhroony-solana-project/ksp-app-solprices-desk/dist ``` La version du binaire et des bundles Tauri provient de la version Cargo résolue. `tauri.conf.json` ne duplique pas cette version ; `package.json` reste un manifeste frontend privé non autoritatif pour la release KSP. ## Runtime packagé Les onze resources Config/Schemas enregistrées sont embarquées dans le bundle. Au démarrage release, `ksp-config-lib` prépare la racine KSP user-writable commune, seed les documents absents, resynchronise les schemas et ne bundle jamais `.env`. ## Développement et validation ```bash (cd crates/ksp-app-solprices-desk && cargo tauri dev) ``` Gate Rust courant : ```bash cargo fmt --all python3 scripts/audit_rust_workspace_rules.py cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-app-solprices-desk cargo test --workspace ``` Smoke live de composition opt-in : ```bash cargo test -p ksp-app-solprices-desk --test market_price_composition_live_smoke -- --ignored --nocapture ``` Build production : ```bash (cd crates/ksp-app-solprices-desk && cargo tauri build) ``` Voir également [`USAGE.md`](USAGE.md), [`../ksp-offchain-transport-lib/README.md`](../ksp-offchain-transport-lib/README.md) et [`../../docs/validation/015-V0_2_12_SOL_PRICES_DESK.md`](../../docs/validation/015-V0_2_12_SOL_PRICES_DESK.md).