Files
khadhroony-solana-project/deltas/0.2.12/pre.008.md
2026-08-27 14:41:08 +02:00

112 lines
5.3 KiB
Markdown

<!-- file: deltas/0.2.12/pre.008.md -->
<!-- version: 1 -->
# Delta `0.2.12-pre.008` — intégration Wallet minimale et recalibrage de clôture
## Base
```text
0.2.12-pre.007
```
Le gate opérateur de `pre.007` est intégralement propre : audits Rust/Markdown, `cargo check --workspace`, Clippy workspace, test ciblé SOL Prices Desk, `cargo test --workspace` et `cargo tauri dev` passent. Le parcours visuel confirme la table provider-neutral et les refresh manuel/selected/all.
## Décision opérateur
Le périmètre Wallet Desk est réduit : les fonctionnalités avancées de marché restent dans `ksp-offchain-transport-lib` et `ksp-app-solprices-desk`. Wallet Desk n'a besoin que d'une information auxiliaire SOL/USD lors du refresh de balance.
Contrat retenu :
```text
Refresh balance existant
-> getBalance On-chain
-> refresh_all Off-chain des providers actuellement éligibles
-> ne garder que les observations réussies du refresh courant
-> calculer une moyenne SOL/USD backend
-> afficher une seule case SOL/USD moyen
-> N.A. si aucune observation n'est disponible
```
Aucune valorisation USD du solde, aucun provider canonique, aucun panneau provider détaillé et aucune nouvelle command prix Wallet ne sont introduits.
## Implémentation
- version workspace : `0.2.12-pre.8` ;
- `ksp-app-wallet-desk` dépend désormais directement de `ksp-offchain-transport-lib` ;
- les trois profils du composite Wallet Desk ajoutent `offchain_transport -> cfg.std.offchain_transport/public_keyless` ;
- la fixture Config et l'exemple du composite Wallet sont synchronisés ;
- ajout d'un `OffchainTransportRuntime` Wallet résolu exclusivement via Config ;
- l'initialisation prix est auxiliaire : un échec Config/Off-chain est journalisé par domain/code sûrs et dégrade la projection vers `N.A.` sans empêcher le Desk de démarrer ;
- `refresh_wallet_balance` conserve son input vide et orchestre `getBalance` et `MarketPriceService::refresh_all` dans la même opération backend ;
- la moyenne utilise uniquement les observations réellement produites par le refresh courant ;
- le calcul n'utilise aucun `f64` et arrondit half-up à huit décimales maximum avant suppression des zéros terminaux ;
- `WalletBalanceDto` gagne uniquement `sol_usd_average: Option<String>` ;
- le frontend Wallet affiche une seule case `SOL/USD moyen`, avec `N.A.` en absence de valeur ;
- aucun `provider_id`, URL, endpoint, credential, payload provider ou command prix ne traverse le frontend Wallet ;
- le lifecycle WalletSession, VIEW/OWNER, secrets, import/export et la logique `getBalance` existante restent inchangés.
## Tests/canaris
- moyenne déterministe sur valeurs réalistes ;
- moyenne entière fractionnaire (`1`, `2` -> `1.5`) sans IEEE-754 ;
- composite Wallet vérifie le composant Off-chain et sa provenance Composite ;
- service `public_keyless` construit avec huit entrées provider-neutral ;
- canari desktop exige exactement une case `currentWalletSolUsdAverage` et aucune surface prix avancée ;
- sécurité : `refresh_wallet_balance` ne reçoit toujours ni Pubkey, ni endpoint, ni provider ID depuis le frontend ;
- release compliance reconnaît explicitement `ksp-offchain-transport-lib` comme boundary KSP autorisée.
## Recalibrage du forecast
Les anciennes tranches Wallet riches et les hardenings séparés ne sont plus justifiés. Le forecast restant devient :
```text
pre.008 intégration Wallet minimale + recalibrage
pre.009 hardening transversal + gate technique/live + builds finaux
pre.010 réconciliation documentaire + prompt suivant + CHANGELOG + ROADMAP
rel.001 publication stable
```
Les responsabilités finales restent présentes ; elles sont fusionnées pour éviter des prereleases artificielles.
## Fichiers ajoutés/modifiés
```text
Cargo.toml
config/composite.ksp-app-wallet-desk.json
config/examples/composite.ksp-app-wallet-desk.example.json
crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-wallet-desk.json
crates/ksp-app-wallet-desk/Cargo.toml
crates/ksp-app-wallet-desk/package.json
crates/ksp-app-wallet-desk/tauri.conf.json
crates/ksp-app-wallet-desk/src/app_state.rs
crates/ksp-app-wallet-desk/src/constants.rs
crates/ksp-app-wallet-desk/src/lib.rs
crates/ksp-app-wallet-desk/src/offchain_runtime.rs
crates/ksp-app-wallet-desk/src/wallet_balance.rs
crates/ksp-app-wallet-desk/frontend/main.html
crates/ksp-app-wallet-desk/frontend/ts/main.ts
crates/ksp-app-wallet-desk/unit_tests/wallet_balance.rs
crates/ksp-app-wallet-desk/tests/config_composition.rs
crates/ksp-app-wallet-desk/tests/desktop_contract.rs
crates/ksp-app-wallet-desk/tests/desktop_security.rs
crates/ksp-app-wallet-desk/tests/release_compliance.rs
docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md
docs/validation/015-V0_2_12_SOL_PRICES_DESK.md
deltas/0.2.12/pre.008.md
```
## Gate opérateur attendu
```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-wallet-desk
cargo test --workspace
(cd crates/ksp-app-wallet-desk && cargo tauri dev)
```
Contrôle manuel : ouvrir un Wallet VIEW/OWNER, lancer `Refresh balance`, vérifier que la balance SOL reste correcte et que `SOL/USD moyen` affiche une valeur si au moins un provider keyless répond, sinon `N.A.`.