v0.2.12-pre.010
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
# file: Cargo.toml
|
||||
# version: 299
|
||||
# version: 300
|
||||
|
||||
[workspace]
|
||||
resolver = "3"
|
||||
members = ["crates/ksp-app-config-desk", "crates/ksp-app-solprices-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.12-pre.9.fix.1"
|
||||
version = "0.2.12-pre.10"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||
|
||||
@@ -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).
|
||||
|
||||
149
crates/ksp-app-solprices-desk/USAGE.md
Normal file
149
crates/ksp-app-solprices-desk/USAGE.md
Normal file
@@ -0,0 +1,149 @@
|
||||
<!-- file: crates/ksp-app-solprices-desk/USAGE.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Utilisation de `ksp-app-solprices-desk`
|
||||
|
||||
## 1. Lancement de développement
|
||||
|
||||
Depuis la racine du workspace :
|
||||
|
||||
```bash
|
||||
(cd crates/ksp-app-solprices-desk && cargo tauri dev)
|
||||
```
|
||||
|
||||
Le launcher debug normalise son current working directory vers la racine du workspace avant le bootstrap Config.
|
||||
|
||||
Les ports réservés sont :
|
||||
|
||||
```text
|
||||
Vite HTTP : 1434
|
||||
Vite WS : 1435
|
||||
```
|
||||
|
||||
## 2. Profil de prix
|
||||
|
||||
Le composite `cfg.composite.ksp-app-solprices-desk` utilise `public_keyless` par défaut.
|
||||
|
||||
Profils committed :
|
||||
|
||||
```text
|
||||
public_keyless providers utilisables sans secret
|
||||
all_free modes gratuits avec credentials Config lorsqu'ils sont requis
|
||||
tests composition de test
|
||||
```
|
||||
|
||||
La sélection d'un autre profil appartient aux mécanismes Config ; l'interface ne demande jamais directement une API key et ne choisit pas d'endpoint provider.
|
||||
|
||||
## 3. Vue Prices
|
||||
|
||||
La vue `Prices` présente une row par provider du registry Off-chain.
|
||||
|
||||
Les informations principales sont :
|
||||
|
||||
- paire SOL/USD ;
|
||||
- sémantique de prix ;
|
||||
- mode d'authentification ;
|
||||
- availability ;
|
||||
- prix exact lorsqu'une observation existe ;
|
||||
- timestamp provider lorsqu'il est réellement fourni ;
|
||||
- timestamp de réception KSP ;
|
||||
- prochaine deadline `retry_at` lorsqu'elle existe.
|
||||
|
||||
`Not supplied` signifie qu'un provider n'a pas fourni de timestamp exploitable. Cette absence n'est jamais remplacée artificiellement par le timestamp KSP.
|
||||
|
||||
## 4. Refresh individuel
|
||||
|
||||
Le bouton `Refresh` d'une row déclenche uniquement le provider correspondant via `MarketPriceService::refresh`.
|
||||
|
||||
Pendant l'appel, la row passe temporairement à `Refreshing`. Le Desk ne garde aucun mutex de présentation pendant l'I/O réseau.
|
||||
|
||||
Si le service ne produit pas de nouvelle observation, la dernière observation réussie peut rester visible tandis que l'availability/retry est actualisée.
|
||||
|
||||
## 5. Refresh sélectionné
|
||||
|
||||
Cocher une ou plusieurs rows puis utiliser :
|
||||
|
||||
```text
|
||||
Refresh selected
|
||||
```
|
||||
|
||||
La sélection est reconstruite dans l'ordre courant du registry. Les doublons, IDs inconnus, conflits `in_flight`, batch vide et batch supérieur à 64 IDs sont rejetés côté Rust avant dispatch partiel.
|
||||
|
||||
Les contrôles :
|
||||
|
||||
```text
|
||||
Select all providers
|
||||
Clear selection
|
||||
```
|
||||
|
||||
ne déclenchent aucun accès réseau par eux-mêmes.
|
||||
|
||||
## 6. Refresh global
|
||||
|
||||
```text
|
||||
Refresh all
|
||||
```
|
||||
|
||||
appelle la surface générique `MarketPriceService::refresh_all` et conserve l'ordre déterministe du service.
|
||||
|
||||
Les providers disabled, en cooldown ou temporairement indisponibles restent classifiés par Off-chain Transport. Le frontend ne contourne jamais ces règles et n'implémente aucun retry local.
|
||||
|
||||
## 7. Lecture des états
|
||||
|
||||
Les états visibles sont provider-neutral, notamment :
|
||||
|
||||
```text
|
||||
Ready
|
||||
Cooling down
|
||||
Authentication unavailable
|
||||
Disabled
|
||||
Misconfigured
|
||||
Quota unavailable
|
||||
Temporarily unavailable
|
||||
Refreshing
|
||||
```
|
||||
|
||||
Le résumé en haut de la vue indique les nombres de providers, rows ready, observations disponibles, états nécessitant attention et refresh en cours.
|
||||
|
||||
Aucune moyenne ou fusion de prix n'est calculée dans SOL Prices Desk.
|
||||
|
||||
## 8. Diagnostics et sécurité
|
||||
|
||||
La vue `Diagnostics` expose uniquement les informations sûres de composition/runtime.
|
||||
|
||||
Le frontend :
|
||||
|
||||
- ne fait aucun `fetch`/XHR provider ;
|
||||
- ne possède aucun endpoint ou header provider ;
|
||||
- ne stocke aucun secret dans `localStorage`/`sessionStorage` ;
|
||||
- n'utilise aucun scheduler ou polling prix ;
|
||||
- ne journalise aucun prix ou payload provider brut.
|
||||
|
||||
Les actions utilisateur sont instrumentées via le bridge Logging KSP.
|
||||
|
||||
## 9. Runtime packagé
|
||||
|
||||
En build release, les documents Config et schemas enregistrés sont embarqués comme resources Tauri. `ksp-config-lib` prépare ensuite la racine KSP user-writable commune ; les Config utilisateur existantes sont conservées, les schemas sont resynchronisés et `.env` n'est jamais embarqué.
|
||||
|
||||
La version de bundle est dérivée de Cargo. `package.json` reste un manifeste frontend privé.
|
||||
|
||||
## 10. Validation de publication
|
||||
|
||||
Avant le build :
|
||||
|
||||
```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.12
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo test -p ksp-app-solprices-desk
|
||||
cargo test --workspace
|
||||
cargo test -p ksp-app-solprices-desk --test market_price_composition_live_smoke -- --ignored --nocapture
|
||||
```
|
||||
|
||||
Le build production est :
|
||||
|
||||
```bash
|
||||
(cd crates/ksp-app-solprices-desk && cargo tauri build)
|
||||
```
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: crates/ksp-app-wallet-desk/README.md -->
|
||||
<!-- version: 3 -->
|
||||
<!-- version: 4 -->
|
||||
|
||||
# `ksp-app-wallet-desk`
|
||||
|
||||
@@ -21,6 +21,7 @@ Wallet Desk reste une couche d'interface et de composition. Il ne possède ni le
|
||||
ksp-config-lib -> configuration/composite/.env
|
||||
ksp-wallet-lib -> format, crypto, VIEW/OWNER, import/export, migration
|
||||
ksp-onchain-transport-lib -> RPC Solana HTTP
|
||||
ksp-offchain-transport-lib -> prix SOL/USD provider-neutral
|
||||
ksp-logging-lib -> logging/tracing applicatif
|
||||
ksp-app-wallet-desk -> orchestration Tauri + projections sûres
|
||||
```
|
||||
@@ -64,6 +65,19 @@ La surface validée comprend :
|
||||
- export OWNER Solana CLI JSON/Base58 no-clobber ;
|
||||
- wire V2 par défaut tout en conservant la compatibilité V1.
|
||||
|
||||
## Prix SOL/USD auxiliaire
|
||||
|
||||
Le refresh de balance compose deux capacités backend : `getBalance` et `MarketPriceService::refresh_all`. Les observations réussies du refresh courant sont moyennées côté Rust sans `f64`; la balance SOL reste autoritative et le prix reste auxiliaire.
|
||||
|
||||
Le frontend reçoit uniquement :
|
||||
|
||||
```text
|
||||
SOL/USD moyen
|
||||
Équivalent USD de la balance
|
||||
```
|
||||
|
||||
ou `N.A.` lorsque le prix n'est pas disponible. Cette moyenne est une projection locale à Wallet Desk : elle ne devient ni un consensus, ni un fallback, ni un prix canonique de `ksp-offchain-transport-lib`. Aucun provider ID ou détail provider n'est exposé au frontend Wallet.
|
||||
|
||||
## Frontières desktop
|
||||
|
||||
Le frontend utilise Bootstrap, Font Awesome, DataTables/Select, SimpleBar et le bridge Logging KSP. Les capabilities Tauri du guest restent minimales :
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: crates/ksp-app-wallet-desk/USAGE.md -->
|
||||
<!-- version: 2 -->
|
||||
<!-- version: 3 -->
|
||||
|
||||
# Utilisation de `ksp-app-wallet-desk`
|
||||
|
||||
@@ -82,9 +82,21 @@ migrate_wallet_file_v1_to_v2_in_place
|
||||
|
||||
Elles authentifient OWNER, reconstruisent un document cryptographique V2 neuf et conservent l'identité Solana ainsi que les metadata/note IDs. Lorsque VIEW est activé, un password VIEW cible doit être fourni. La copie est no-clobber ; le remplacement in-place est stale-protected.
|
||||
|
||||
## 7. Balance Solana
|
||||
## 7. Balance Solana et prix auxiliaire
|
||||
|
||||
Une session VIEW ou OWNER autorisée peut demander `getBalance` via `ksp-onchain-transport-lib`. Le frontend ne choisit ni Pubkey arbitraire ni URL RPC : ces valeurs sont dérivées de l'état Rust autorisé et de Config.
|
||||
Une session VIEW ou OWNER autorisée peut rafraîchir sa balance. Le backend compose alors `getBalance` via `ksp-onchain-transport-lib` et un `refresh_all` SOL/USD via `ksp-offchain-transport-lib`. Le frontend ne choisit ni Pubkey arbitraire, ni URL RPC, ni provider prix : ces valeurs sont dérivées de l'état Rust autorisé et de Config.
|
||||
|
||||
Lorsque des observations SOL/USD sont produites par le refresh courant, Wallet Desk calcule côté Rust une moyenne arithmétique exacte puis l'équivalent USD de la balance. Aucun `f64` n'est utilisé comme vérité métier.
|
||||
|
||||
L'interface affiche :
|
||||
|
||||
```text
|
||||
Balance SOL
|
||||
SOL/USD moyen
|
||||
Équivalent USD
|
||||
```
|
||||
|
||||
Si aucune observation prix exploitable n'est disponible, les deux champs USD affichent `N.A.` sans transformer un `getBalance` réussi en erreur Wallet. La moyenne est strictement une projection de consommation Wallet ; elle ne modifie pas le contrat provider-neutral de `ksp-offchain-transport-lib`.
|
||||
|
||||
## 8. Runtime packagé
|
||||
|
||||
|
||||
92
deltas/0.2.12/pre.010.md
Normal file
92
deltas/0.2.12/pre.010.md
Normal file
@@ -0,0 +1,92 @@
|
||||
<!-- file: deltas/0.2.12/pre.010.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.2.12-pre.010` — réconciliation documentaire finale
|
||||
|
||||
## Base requise
|
||||
|
||||
```text
|
||||
0.2.12-pre.009-fix.001
|
||||
workspace.package.version = 0.2.12-pre.9.fix.1
|
||||
```
|
||||
|
||||
Le gate opérateur de cette base est intégralement vert : audits, `cargo check`, Clippy, tests ciblés, workspace complet, smoke live de composition SOL Prices et builds Tauri Linux SOL Prices/Wallet/Config Desk.
|
||||
|
||||
## Objectif
|
||||
|
||||
Figé documentaire final de `0.2.12` avant la prerelease de préparation de publication. Cette tranche applique explicitement la séparation `VER-LIFECYCLE-006` : elle réconcilie README/USAGE, architecture, plan et validation, sans modifier `CHANGELOG.md`, `ROADMAP.md` ni créer/finaliser le prompt `0.2.13`.
|
||||
|
||||
## Version Cargo
|
||||
|
||||
Publication non-fix de prerelease :
|
||||
|
||||
```text
|
||||
0.2.12-pre.9.fix.1
|
||||
-> 0.2.12-pre.10
|
||||
```
|
||||
|
||||
Conformément à `VER-ID-015/016`, aucun `tauri.conf.json` ou `package.json` n'est synchronisé artificiellement.
|
||||
|
||||
## Fichiers ajoutés
|
||||
|
||||
```text
|
||||
crates/ksp-app-solprices-desk/USAGE.md
|
||||
deltas/0.2.12/pre.010.md
|
||||
```
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-app-solprices-desk/README.md
|
||||
crates/ksp-app-wallet-desk/README.md
|
||||
crates/ksp-app-wallet-desk/USAGE.md
|
||||
docs/000-README.md
|
||||
docs/architecture/003-COMPONENT_CONTRACTS.md
|
||||
docs/architecture/004-COMPONENT_INVENTORY.md
|
||||
docs/architecture/005-DEPENDENCY_GRAPH.md
|
||||
docs/architecture/010-APPS_SERVICES_SCENARIOS_AND_CONTROL.md
|
||||
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
||||
docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md
|
||||
docs/validation/015-V0_2_12_SOL_PRICES_DESK.md
|
||||
```
|
||||
|
||||
## Fichiers supprimés
|
||||
|
||||
Aucun.
|
||||
|
||||
## Décisions réconciliées
|
||||
|
||||
- SOL Prices Desk est une HID provider-neutral avec refresh manuel row/selected/all, batch borné `1..=64`, aucune moyenne/fallback/auto-refresh.
|
||||
- Wallet Desk consomme `MarketPriceService::refresh_all` pendant le refresh balance et calcule côté Rust une moyenne SOL/USD consumer-owned ainsi que l'équivalent USD exact ; indisponibilité prix -> `N.A.` sans échec de balance.
|
||||
- La moyenne Wallet ne devient jamais un contrat Off-chain Transport ni un prix canonique.
|
||||
- La version desktop reste Cargo-owned ; les manifests npm privés ne pilotent pas la version KSP.
|
||||
- La fermeture ne fusionne finalement pas documentation et publication : `pre.010` est documentaire, `pre.011` sera la préparation minimale.
|
||||
|
||||
## Validations exécutées dans l'environnement de génération
|
||||
|
||||
```text
|
||||
python3 scripts/audit_rust_workspace_rules.py PASS
|
||||
python3 scripts/audit_markdown_tables.py README.md ... deltas PASS — 143 tables / 127 fichiers
|
||||
```
|
||||
|
||||
Les contrôles portent sur l'arbre complet reconstruit jusqu'à `pre.009-fix.001`, puis réconcilié par `pre.010`.
|
||||
|
||||
## Validations opérateur héritées de la base
|
||||
|
||||
```text
|
||||
fmt/audits/check/clippy PASS
|
||||
tests SOL Prices + workspace PASS
|
||||
smoke live composition SOL Prices PASS
|
||||
Tauri build SOL Prices PASS
|
||||
Tauri build Wallet PASS
|
||||
Tauri build Config PASS supplémentaire
|
||||
```
|
||||
|
||||
## Validations non exécutées
|
||||
|
||||
Les commandes Cargo ne sont pas revendiquées dans l'environnement de génération. `pre.010` ne requiert aucun nouveau smoke live ni build Tauri, le couloir technique étant déjà fermé.
|
||||
|
||||
## Question ouverte
|
||||
|
||||
Aucune pour le périmètre `0.2.12`. La tranche suivante est exclusivement `pre.011` : prompt `0.2.13 — Interface foundation`, `CHANGELOG.md`, `ROADMAP.md`, `Cargo.toml` et delta mécanique.
|
||||
File diff suppressed because one or more lines are too long
@@ -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
|
||||
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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`
|
||||
|
||||
|
||||
@@ -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`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user