v0.2.12-pre.008-fix.001

This commit is contained in:
2026-08-27 14:46:41 +02:00
parent f1e365ec97
commit fe46cbe3bd
8 changed files with 125 additions and 15 deletions

View File

@@ -1,12 +1,12 @@
# file: Cargo.toml # file: Cargo.toml
# version: 295 # version: 296
[workspace] [workspace]
resolver = "3" 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"] 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] [workspace.package]
version = "0.2.12-pre.8" version = "0.2.12-pre.8.fix.1"
edition = "2024" edition = "2024"
license = "MIT" license = "MIT"
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"

View File

@@ -1,7 +1,7 @@
{ {
"name": "ksp-app-wallet-desk", "name": "ksp-app-wallet-desk",
"private": true, "private": true,
"version": "0.2.12-pre.8", "version": "0.2.12-pre.8.fix.1",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-app-wallet-desk/src/wallet_balance.rs // file: crates/ksp-app-wallet-desk/src/wallet_balance.rs
// version: 2 // version: 3
//! Safe Wallet balance projection produced by the typed HTTP Transport path. //! Safe Wallet balance projection produced by the typed HTTP Transport path.
@@ -112,7 +112,7 @@ pub(crate) fn average_sol_usd_prices(prices: &[ksp_offchain_transport_lib::Marke
} }
fn format_scaled_decimal(mut coefficient: u128, mut scale: u8) -> String { fn format_scaled_decimal(mut coefficient: u128, mut scale: u8) -> String {
while scale > 0 && coefficient % 10 == 0 { while scale > 0 && coefficient.is_multiple_of(10) {
coefficient /= 10; coefficient /= 10;
scale -= 1; scale -= 1;
} }

View File

@@ -1,7 +1,7 @@
{ {
"$schema": "https://schema.tauri.app/config/2", "$schema": "https://schema.tauri.app/config/2",
"productName": "KSP Wallet Desk", "productName": "KSP Wallet Desk",
"version": "0.2.12-pre.8", "version": "0.2.12-pre.8.fix.1",
"identifier": "com.sasedev.ksp-app-wallet-desk", "identifier": "com.sasedev.ksp-app-wallet-desk",
"build": { "build": {
"beforeDevCommand": { "beforeDevCommand": {

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-app-wallet-desk/tests/desktop_contract.rs // file: crates/ksp-app-wallet-desk/tests/desktop_contract.rs
// version: 25 // version: 26
//! Desktop build, shell and Config-status contract audits for Wallet Desk. //! Desktop build, shell and Config-status contract audits for Wallet Desk.
@@ -511,18 +511,18 @@ fn v0_2_12_pre_008_wallet_balance_refresh_adds_one_auxiliary_sol_usd_average_onl
let balance = read_text(root.join("src/wallet_balance.rs").as_path()); let balance = read_text(root.join("src/wallet_balance.rs").as_path());
let main = read_text(root.join("frontend/ts/main.ts").as_path()); let main = read_text(root.join("frontend/ts/main.ts").as_path());
let html = read_text(root.join("frontend/main.html").as_path()); let html = read_text(root.join("frontend/main.html").as_path());
assert!(manifest.contains("ksp-offchain-transport-lib = { path = "../ksp-offchain-transport-lib" }")); assert!(manifest.contains(r#"ksp-offchain-transport-lib = { path = "../ksp-offchain-transport-lib" }"#));
assert!(composite.contains(""component_id": "offchain_transport"")); assert!(composite.contains(r#""component_id": "offchain_transport""#));
assert!(composite.contains(""profile_id": "public_keyless"")); assert!(composite.contains(r#""profile_id": "public_keyless""#));
assert!(state.contains("initialize_offchain_transport")); assert!(state.contains("initialize_offchain_transport"));
assert!(state.contains("refresh_sol_usd_average")); assert!(state.contains("refresh_sol_usd_average"));
assert!(state.contains("tokio::join!")); assert!(state.contains("tokio::join!"));
assert!(state.contains("refresh_all().await")); assert!(state.contains("refresh_all().await"));
assert!(balance.contains("sol_usd_average")); assert!(balance.contains("sol_usd_average"));
assert!(balance.contains("average_sol_usd_prices")); assert!(balance.contains("average_sol_usd_prices"));
assert!(html.contains("id="currentWalletSolUsdAverage"")); assert!(html.contains(r#"id="currentWalletSolUsdAverage""#));
assert_eq!(html.matches("currentWalletSolUsdAverage").count(), 1); assert_eq!(html.matches("currentWalletSolUsdAverage").count(), 1);
assert!(main.contains("balance.solUsdAverage ? `${balance.solUsdAverage} USD` : "N.A."")); assert!(main.contains(r#"balance.solUsdAverage ? `${balance.solUsdAverage} USD` : "N.A.""#));
assert!(!main.contains("refresh_market_price")); assert!(!main.contains("refresh_market_price"));
assert!(!main.contains("refresh_all_market_prices")); assert!(!main.contains("refresh_all_market_prices"));
assert!(!main.contains("fetch(")); assert!(!main.contains("fetch("));

View File

@@ -0,0 +1,70 @@
<!-- file: deltas/0.2.12/pre.008-fix.001.md -->
<!-- version: 1 -->
# Delta `0.2.12-pre.008-fix.001` — correction canari desktop et Clippy Wallet
## Base
```text
0.2.12-pre.008
```
## Cause
Le premier gate opérateur de `pre.008` a confirmé les audits KSP et `cargo check --workspace`, mais a révélé deux défauts techniques dans les fichiers nouvellement modifiés :
- `crates/ksp-app-wallet-desk/tests/desktop_contract.rs` contient plusieurs littéraux Rust avec des guillemets internes non échappés ; `cargo fmt --all` ne peut donc pas parser le fichier et Clippy `--all-targets` échoue sur le même canari ;
- `crates/ksp-app-wallet-desk/src/wallet_balance.rs` déclenche `clippy::manual_is_multiple_of` sur le test `coefficient % 10 == 0`.
`cargo check --workspace` reste vert parce que ce chemin ne compile pas le test d'intégration fautif.
## Correctif
- version workspace : `0.2.12-pre.8.fix.1` ;
- versions npm/Tauri Wallet Desk synchronisées sur `0.2.12-pre.8.fix.1` ;
- les assertions textuelles du canari `v0_2_12_pre_008_wallet_balance_refresh_adds_one_auxiliary_sol_usd_average_only` utilisent désormais des raw strings Rust valides ;
- `coefficient % 10 == 0` devient `coefficient.is_multiple_of(10)` dans le formateur décimal ;
- le plan et la validation enregistrent explicitement ce fix sous `pre.008`.
## Invariants préservés
Aucune logique fonctionnelle de `pre.008` n'est modifiée :
```text
composite Wallet inchangé
OffchainTransportRuntime Wallet inchangé
refresh_wallet_balance inchangé
MarketPriceService::refresh_all inchangé
calcul de moyenne / arrondi inchangé sémantiquement
WalletBalanceDto.sol_usd_average inchangé
frontend SOL/USD moyen / N.A. inchangé
providers / URLs / credentials frontend absents
```
Le remplacement par `is_multiple_of(10)` est strictement équivalent pour le `u128` utilisé ici ; il ne change ni l'arrondi ni la canonicalisation de la moyenne.
## Fichiers modifiés/ajoutés
```text
Cargo.toml
crates/ksp-app-wallet-desk/package.json
crates/ksp-app-wallet-desk/tauri.conf.json
crates/ksp-app-wallet-desk/src/wallet_balance.rs
crates/ksp-app-wallet-desk/tests/desktop_contract.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-fix.001.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)
```

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md --> <!-- file: docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md -->
<!-- version: 14 --> <!-- version: 15 -->
# Plan `0.2.12` — SOL Prices Desk + intégration prix Wallet Desk # Plan `0.2.12` — SOL Prices Desk + intégration prix Wallet Desk
@@ -555,10 +555,16 @@ Finalisation de la table responsive sans changer le contrat de dispatch : résum
### `pre.008` — Intégration Wallet minimale + recalibrage de clôture ### `pre.008` — Intégration Wallet minimale + recalibrage de clôture
**Statut : implémenté ; gate opérateur à confirmer.** **Statut : implémenté ; corrigé par `pre.008-fix.001`, gate opérateur à confirmer.**
Absorption de l'ancien couloir Wallet `pre.009``pre.011` dans une seule tranche : ajout `offchain_transport/public_keyless` au composite Wallet, runtime Off-chain auxiliaire, `refresh_all` lors de `refresh_wallet_balance`, moyenne SOL/USD backend sans `f64`, `WalletBalanceDto.sol_usd_average` et une seule case UI `SOL/USD moyen`/`N.A.`. Aucun panneau provider, aucune command prix Wallet, aucun provider ID frontend et aucune valorisation USD du solde. La tranche réconcilie également le présent forecast avec cette réduction de scope. Absorption de l'ancien couloir Wallet `pre.009``pre.011` dans une seule tranche : ajout `offchain_transport/public_keyless` au composite Wallet, runtime Off-chain auxiliaire, `refresh_all` lors de `refresh_wallet_balance`, moyenne SOL/USD backend sans `f64`, `WalletBalanceDto.sol_usd_average` et une seule case UI `SOL/USD moyen`/`N.A.`. Aucun panneau provider, aucune command prix Wallet, aucun provider ID frontend et aucune valorisation USD du solde. La tranche réconcilie également le présent forecast avec cette réduction de scope.
#### `pre.008-fix.001` — Correction du canari desktop et Clippy de la moyenne
**Statut : implémenté ; gate opérateur à confirmer.**
Le premier gate de `pre.008` confirme `cargo check --workspace` mais révèle deux défauts purement techniques : des littéraux Rust non échappés dans le nouveau canari `desktop_contract.rs`, qui empêchent `cargo fmt` et les targets de test de parser le fichier, et un warning Clippy `manual_is_multiple_of` dans le formateur décimal Wallet. Le fix remplace les littéraux fragiles par des raw strings Rust et applique `u128::is_multiple_of(10)`. Aucune logique de moyenne, aucun appel Off-chain, aucun DTO ni aucune UI n'est modifié.
### `pre.009` — Hardening transversal + gate technique/live final ### `pre.009` — Hardening transversal + gate technique/live final
**Statut : planifié.** **Statut : planifié.**

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/015-V0_2_12_SOL_PRICES_DESK.md --> <!-- file: docs/validation/015-V0_2_12_SOL_PRICES_DESK.md -->
<!-- version: 13 --> <!-- version: 14 -->
# Validation `0.2.12` — SOL Prices Desk + intégration Wallet Desk # Validation `0.2.12` — SOL Prices Desk + intégration Wallet Desk
@@ -603,3 +603,37 @@ TypeScript syntax transpile Wallet main.ts PASS
cargo fmt/check/clippy/test NOT RUN — cargo indisponible dans le sandbox cargo fmt/check/clippy/test NOT RUN — cargo indisponible dans le sandbox
``` ```
## 25. Gate `0.2.12-pre.008-fix.001` — correction compilation des canaris
Le premier gate opérateur de `pre.008` a produit les résultats suivants :
```text
cargo fmt --all FAIL — littéraux Rust invalides dans desktop_contract.rs
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 FAIL — desktop_contract.rs + manual_is_multiple_of
```
Le correctif attendu est strictement mécanique :
```text
desktop_contract.rs raw strings Rust valides
wallet_balance.rs coefficient.is_multiple_of(10)
version 0.2.12-pre.8.fix.1
logique moyenne / Off-chain / DTO / frontend inchangée
```
Gate opérateur à rejouer après application :
```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)
```