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

View File

@@ -1,11 +1,11 @@
<!-- file: crates/ksp-app-solprices-desk/README.md -->
<!-- version: 1 -->
<!-- version: 2 -->
# `ksp-app-solprices-desk`
`ksp-app-solprices-desk` est le Desk Tauri spécialisé destiné à visualiser les prix SOL/USD fournis par `ksp-offchain-transport-lib` sans exposer les détails propres aux providers au frontend.
`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`.
`0.2.12-pre.002` crée uniquement le **scaffold desktop**. La composition Off-chain, les DTO prix, la table provider-neutral et les commandes de refresh appartiennent aux tranches suivantes.
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
@@ -15,30 +15,93 @@ 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, l'état de bootstrap, le bridge Logging et le lifecycle des fenêtres.
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.
## Surface du scaffold
## Responsabilités
```text
splash
-> Config standard + Logging
-> main
-> Prices placeholder non fonctionnel en pre.002
-> Diagnostics identité/runtime Logging sûre
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 scaffold ne possède encore aucun `MarketPriceService`, aucun fetch prix, aucun provider, aucun endpoint, aucun credential et aucun scheduler.
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 les capabilities :
Le frontend utilise uniquement :
```text
core:default
tracing:default
```
Aucun plugin dialog, filesystem, HTTP ou shell n'est accordé au WebView. Le bridge frontend Logging passe par des commandes Rust centralisées dans `tauri.rs`.
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 :
@@ -47,32 +110,45 @@ Vite HTTP : 1434
Vite WS : 1435
```
Le port Vite est strict et le frontend build est isolé sous :
Le frontend build est isolé sous :
```text
builds/khadhroony-solana-project/ksp-app-solprices-desk/dist
```
## Config et packaging
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.
Pendant `pre.002`, le Desk utilise le document Logging standard pour établir le gabarit commun. Le composite dédié `cfg.composite.ksp-app-solprices-desk` n'existe pas encore et reste réservé à `pre.003`.
## Runtime packagé
Le bundle embarque les dix ressources correspondant au registry Config courant. `pre.003` ajoutera atomiquement le onzième document composite et synchronisera les resources des Desks concernés.
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
Le cycle Tauri est crate-local :
## Développement et validation
```bash
(cd crates/ksp-app-solprices-desk && cargo tauri dev)
```
`-c/--config` n'est pas utilisé comme sélecteur d'application. En développement, le launcher normalise le current working directory vers la racine du workspace avant le bootstrap Config.
Gate Rust courant :
Le build production final sera exécuté dans le couloir de validation de la release :
```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)
```
`USAGE.md` sera finalisé lorsque l'application sera fonctionnellement complète, conformément au workflow de clôture des applications KSP.
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).