From c5a70a2eff5e21984f24d03a6013c208eb629891 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Thu, 27 Aug 2026 10:11:33 +0200 Subject: [PATCH] v0.2.12-pre.004-fix.001 --- Cargo.toml | 2 +- .../unit_tests/profiles.rs | 5 +- crates/ksp-app-solprices-desk/package.json | 2 +- crates/ksp-app-solprices-desk/tauri.conf.json | 2 +- .../composite.ksp-app-solprices-desk.json | 51 ++++++ deltas/0.2.12/pre.004-fix.001.md | 151 ++++++++++++++++++ .../plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md | 10 +- .../validation/015-V0_2_12_SOL_PRICES_DESK.md | 58 ++++++- 8 files changed, 274 insertions(+), 7 deletions(-) create mode 100644 crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-solprices-desk.json create mode 100644 deltas/0.2.12/pre.004-fix.001.md diff --git a/Cargo.toml b/Cargo.toml index 39ce76d..1243827 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ 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.4" +version = "0.2.12-pre.4.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-app-config-desk/unit_tests/profiles.rs b/crates/ksp-app-config-desk/unit_tests/profiles.rs index e53c7c4..f10d7d0 100644 --- a/crates/ksp-app-config-desk/unit_tests/profiles.rs +++ b/crates/ksp-app-config-desk/unit_tests/profiles.rs @@ -1,5 +1,5 @@ // file: crates/ksp-app-config-desk/unit_tests/profiles.rs -// version: 6 +// version: 7 #[test] fn profile_inventory_exposes_registered_profile_documents() { @@ -21,6 +21,9 @@ fn profile_inventory_exposes_registered_profile_documents() { assert!(inventory.iter().any(|document| -> bool { return document.file_id == ksp_config_lib::FILE_ID_COMPOSITE_KSP_APP_WALLET_DESK; })); + assert!(inventory.iter().any(|document| -> bool { + return document.file_id == ksp_config_lib::FILE_ID_COMPOSITE_KSP_APP_SOLPRICES_DESK; + })); for document in inventory { assert!(!document.default_profile.is_empty()); assert!(document.profile_ids.iter().any(|profile_id| -> bool { diff --git a/crates/ksp-app-solprices-desk/package.json b/crates/ksp-app-solprices-desk/package.json index dcb2d54..4270c46 100644 --- a/crates/ksp-app-solprices-desk/package.json +++ b/crates/ksp-app-solprices-desk/package.json @@ -1,7 +1,7 @@ { "name": "ksp-app-solprices-desk", "private": true, - "version": "0.2.12-pre.4", + "version": "0.2.12-pre.4.fix.1", "type": "module", "scripts": { "dev": "vite", diff --git a/crates/ksp-app-solprices-desk/tauri.conf.json b/crates/ksp-app-solprices-desk/tauri.conf.json index 78d7416..9772cd9 100644 --- a/crates/ksp-app-solprices-desk/tauri.conf.json +++ b/crates/ksp-app-solprices-desk/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "KSP SOL Prices Desk", - "version": "0.2.12-pre.4", + "version": "0.2.12-pre.4.fix.1", "identifier": "com.sasedev.ksp-app-solprices-desk", "build": { "beforeDevCommand": { diff --git a/crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-solprices-desk.json b/crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-solprices-desk.json new file mode 100644 index 0000000..551be3a --- /dev/null +++ b/crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-solprices-desk.json @@ -0,0 +1,51 @@ +{ + "format_version": 1, + "default_profile": "public_keyless", + "profiles": [ + { + "profile_id": "public_keyless", + "documents": [ + { + "component_id": "logging", + "file_id": "cfg.std.logging", + "profile_id": "local_dev" + }, + { + "component_id": "offchain_transport", + "file_id": "cfg.std.offchain_transport", + "profile_id": "public_keyless" + } + ] + }, + { + "profile_id": "all_free", + "documents": [ + { + "component_id": "logging", + "file_id": "cfg.std.logging", + "profile_id": "local_dev" + }, + { + "component_id": "offchain_transport", + "file_id": "cfg.std.offchain_transport", + "profile_id": "all_free" + } + ] + }, + { + "profile_id": "tests", + "documents": [ + { + "component_id": "logging", + "file_id": "cfg.std.logging", + "profile_id": "local_dev" + }, + { + "component_id": "offchain_transport", + "file_id": "cfg.std.offchain_transport", + "profile_id": "public_keyless" + } + ] + } + ] +} diff --git a/deltas/0.2.12/pre.004-fix.001.md b/deltas/0.2.12/pre.004-fix.001.md new file mode 100644 index 0000000..8d0210a --- /dev/null +++ b/deltas/0.2.12/pre.004-fix.001.md @@ -0,0 +1,151 @@ + + + +# Delta `0.2.12-pre.004-fix.001` — fixture composite SOL Prices pour Config Desk + +## 1. Base requise + +```text +0.2.12-pre.004 appliquée +workspace.package.version = 0.2.12-pre.4 +``` + +Le gate opérateur du `27 août 2026` confirme `cargo fmt`, les audits Rust/Markdown, `cargo check --workspace`, Clippy workspace et `cargo test -p ksp-app-solprices-desk`. Le lancement `cargo tauri dev` du SOL Prices Desk fonctionne également et affiche les bootstraps Logging/Off-chain attendus. + +`cargo test --workspace` échoue toutefois dans `ksp-app-config-desk` sur `profile_inventory_exposes_registered_profile_documents` avec `config/json_file_read_failed` : le registry contient `cfg.composite.ksp-app-solprices-desk`, mais le répertoire de fixtures Config Desk ne contient pas encore le fichier physique correspondant. + +## 2. Type de livraison et version + +```text +ksp-general-0.2.12-pre.004-fix.001.zip +``` + +Le correctif modifie un test Rust compilé. Conformément à `VER-ID-007` et `VER-ID-010`, la version technique devient : + +```text +workspace.package.version = 0.2.12-pre.4.fix.1 +``` + +Les versions de `crates/ksp-app-solprices-desk/package.json` et `tauri.conf.json` sont synchronisées sur `0.2.12-pre.4.fix.1`. + +## 3. Cause + +`ksp-app-config-desk` construit son management de fixture depuis : + +```text +crates/ksp-config-lib/unit_tests/fixtures +``` + +L'inventory parcourt tous les descriptors du registry par défaut. Depuis l'ajout du composite SOL Prices Desk, il tente donc de charger : + +```text +cfg.composite.ksp-app-solprices-desk +-> composite.ksp-app-solprices-desk.json +``` + +Le descriptor est valide et le runtime Config réel est correct ; seule la fixture de test n'avait pas suivi l'extension du registry. + +## 4. Correction + +Le fix ajoute : + +```text +crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-solprices-desk.json +``` + +La fixture conserve la structure fonctionnelle du composite avec les profils : + +```text +public_keyless +all_free +tests +``` + +Elle référence uniquement des profils présents dans les autres fixtures : + +```text +logging -> local_dev +offchain_transport -> public_keyless / all_free +``` + +Le test `profile_inventory_exposes_registered_profile_documents` est renforcé pour exiger explicitement : + +```text +FILE_ID_COMPOSITE_KSP_APP_SOLPRICES_DESK +``` + +Ainsi, une future extension du registry sans synchronisation du jeu de fixtures reste détectable au gate workspace. + +## 5. Périmètre strict + +Aucun changement n'est apporté à : + +```text +MarketPriceRuntime +MarketPriceService +DTOs prix +commandes Tauri prix +frontend SOL Prices Desk +providers / adapters / wire REST +Config registry ou schéma +composite runtime config/composite.ksp-app-solprices-desk.json +``` + +Le fix ne change donc ni le comportement fonctionnel de `pre.004`, ni le forecast de `pre.005`. + +## 6. Fichiers ajoutés + +```text +crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-solprices-desk.json +deltas/0.2.12/pre.004-fix.001.md +``` + +## 7. Fichiers modifiés + +```text +Cargo.toml +crates/ksp-app-config-desk/unit_tests/profiles.rs +crates/ksp-app-solprices-desk/package.json +crates/ksp-app-solprices-desk/tauri.conf.json +docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md +docs/validation/015-V0_2_12_SOL_PRICES_DESK.md +``` + +## 8. Fichiers supprimés + +Aucun. + +## 9. Validations exécutées dans le sandbox + +```text +python3 scripts/audit_rust_workspace_rules.py +General Rust rule audit: clean +Rust export completeness audit: 0 candidate(s) +KSP workspace Rust rule audit: clean + +python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.2.12 +Markdown table audit: clean +``` + +Le sandbox ne possède pas `cargo`; aucune validation Cargo n'est revendiquée localement. + +## 10. 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-config-desk +cargo test -p ksp-app-solprices-desk +cargo test --workspace +``` + +Le résultat attendu est la fermeture du seul défaut observé : l'inventory Config Desk doit charger les onze documents enregistrés, dont le composite SOL Prices Desk, sans `json_file_read_failed`. + +## 11. Décisions et questions ouvertes + +Décision : corriger la fixture et renforcer le canari plutôt que modifier le registry ou masquer le descriptor dans Config Desk. + +Question ouverte : aucune. Après un gate workspace propre, `pre.005` peut commencer le refresh individuel prévu. diff --git a/docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md b/docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md index e9cae98..2464f77 100644 --- a/docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md +++ b/docs/plans/019-V0_2_12_SOL_PRICES_DESK_PLAN.md @@ -1,5 +1,5 @@ - + # Plan `0.2.12` — SOL Prices Desk + intégration prix Wallet Desk @@ -496,10 +496,16 @@ Correction strictement locale du test `config_composition` : le message d'assert ### `pre.004` — Runtime prix, registry rows et DTOs -**Statut : implémenté ; gate opérateur à confirmer.** +**Statut : implémenté ; corrigé par `pre.004-fix.001`, gate opérateur à confirmer.** Création du `MarketPriceRuntime` applicatif, projection provider-neutral du registry, DTOs TS-RS et états initiaux/loading/empty. `list_market_prices` projette les lignes depuis le registry sans dispatch réseau ; l'état de présentation reste uniquement en mémoire backend. Les providers restent opaques à l'UI, le prix exact et les timestamps traversent l'IPC sous forme de chaînes exactes, et aucun refresh n'est encore disponible avant `pre.005`. +#### `pre.004-fix.001` — Synchronisation de la fixture composite Config Desk + +**Statut : implémenté ; gate opérateur à confirmer.** + +Correction du gate workspace révélé après `pre.004` : le registry Config contient désormais le composite SOL Prices Desk, donc le jeu de fixtures utilisé par `ksp-app-config-desk` doit contenir le document correspondant. Le fix ajoute la fixture dédiée avec des profils valides dans l'environnement de test et renforce le canari d'inventory pour vérifier explicitement `cfg.composite.ksp-app-solprices-desk`. Aucun runtime prix, provider, DTO ou frontend n'est modifié. + ### `pre.005` — Refresh individuel **Statut : planifié.** diff --git a/docs/validation/015-V0_2_12_SOL_PRICES_DESK.md b/docs/validation/015-V0_2_12_SOL_PRICES_DESK.md index 24fa4bf..80707a4 100644 --- a/docs/validation/015-V0_2_12_SOL_PRICES_DESK.md +++ b/docs/validation/015-V0_2_12_SOL_PRICES_DESK.md @@ -1,5 +1,5 @@ - + # Validation `0.2.12` — SOL Prices Desk + intégration Wallet Desk @@ -334,3 +334,59 @@ python3 scripts/audit_rust_workspace_rules.py PASS python3 scripts/audit_markdown_tables.py README.md ... deltas PASS cargo fmt/check/clippy/test NOT RUN — cargo indisponible dans le sandbox ``` + +## 18. Fix `0.2.12-pre.004-fix.001` + +Le gate opérateur de `pre.004` confirme : + +```text +cargo fmt --all PASS +python3 scripts/audit_rust_workspace_rules.py PASS +python3 scripts/audit_markdown_tables.py ... deltas/0.2.12 PASS +cargo check --workspace PASS +cargo clippy --workspace --all-targets PASS +cargo test -p ksp-app-solprices-desk PASS +cargo tauri dev SOL Prices Desk PASS +cargo test --workspace FAIL +``` + +L'échec workspace est unique et externe au runtime prix : `ksp-app-config-desk::profiles::profile_inventory_exposes_registered_profile_documents` construit son `ConfigManagement` sur `crates/ksp-config-lib/unit_tests/fixtures`. Depuis l'enregistrement de `cfg.composite.ksp-app-solprices-desk`, l'inventory parcourt onze descriptors et tente donc de charger : + +```text +crates/ksp-config-lib/unit_tests/fixtures/composite.ksp-app-solprices-desk.json +``` + +Cette fixture n'avait pas été ajoutée, ce qui produit `config/json_file_read_failed`. Le correctif : + +```text +ajoute composite.ksp-app-solprices-desk.json dans les fixtures Config +conserve les profils composite public_keyless / all_free / tests +utilise logging/local_dev, réellement disponible dans la fixture Logging +utilise offchain_transport/public_keyless ou all_free selon le profil +ajoute au canari Config Desk l'assertion explicite du nouveau composite +ne modifie aucun runtime prix, DTO, adapter provider ou frontend +``` + +La version technique devient `0.2.12-pre.4.fix.1` parce qu'un test Rust compilé est modifié. Les versions applicatives SOL Prices Desk de `package.json` et `tauri.conf.json` sont synchronisées. + +Validations sandbox après matérialisation du fix : + +```text +python3 scripts/audit_rust_workspace_rules.py PASS +python3 scripts/audit_markdown_tables.py README.md ... deltas PASS +cargo fmt/check/clippy/test NOT RUN — cargo indisponible dans le sandbox +``` + +Gate opérateur attendu 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-config-desk +cargo test -p ksp-app-solprices-desk +cargo test --workspace +``` +