From f0f295423642d2f6554cf97957a7eed2adad5731 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Sun, 16 Aug 2026 15:04:58 +0200 Subject: [PATCH] v0.1.4-pre.010 --- Cargo.toml | 4 +- crates/ksp-app-config-desk/Cargo.toml | 3 +- crates/ksp-app-config-desk/README.md | 11 +- crates/ksp-app-config-desk/TODO.md | 6 +- crates/ksp-app-config-desk/USAGE.md | 20 +- crates/ksp-app-config-desk/frontend/main.html | 90 ++++- .../frontend/sass/_app.scss | 22 +- .../ksp-app-config-desk/frontend/ts/main.ts | 12 +- .../frontend/ts/profiles.ts | 261 +++++++++++++ crates/ksp-app-config-desk/src/constants.rs | 4 +- crates/ksp-app-config-desk/src/errors.rs | 7 +- crates/ksp-app-config-desk/src/lib.rs | 8 +- crates/ksp-app-config-desk/src/profiles.rs | 351 ++++++++++++++++++ crates/ksp-app-config-desk/src/tauri.rs | 28 +- .../unit_tests/profiles.rs | 73 ++++ deltas/0.1.4/pre.010.md | 123 ++++++ docs/plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md | 6 +- 17 files changed, 1007 insertions(+), 22 deletions(-) create mode 100644 crates/ksp-app-config-desk/frontend/ts/profiles.ts create mode 100644 crates/ksp-app-config-desk/src/profiles.rs create mode 100644 crates/ksp-app-config-desk/unit_tests/profiles.rs create mode 100644 deltas/0.1.4/pre.010.md diff --git a/Cargo.toml b/Cargo.toml index 278494b..6a50759 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 76 +# version: 77 [workspace] resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib"] [workspace.package] -version = "0.1.4-pre.9" +version = "0.1.4-pre.10" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-app-config-desk/Cargo.toml b/crates/ksp-app-config-desk/Cargo.toml index 9a1df10..7ad8b5e 100644 --- a/crates/ksp-app-config-desk/Cargo.toml +++ b/crates/ksp-app-config-desk/Cargo.toml @@ -1,5 +1,5 @@ # file: crates/ksp-app-config-desk/Cargo.toml -# version: 4 +# version: 5 [package] name = "ksp-app-config-desk" @@ -27,6 +27,7 @@ ksp-config-lib = { path = "../ksp-config-lib" } ksp-core-lib = { path = "../ksp-core-lib" } ksp-logging-lib = { path = "../ksp-logging-lib" } serde.workspace = true +serde_json.workspace = true tauri.workspace = true tauri-plugin-tracing.workspace = true tokio.workspace = true diff --git a/crates/ksp-app-config-desk/README.md b/crates/ksp-app-config-desk/README.md index 65b0730..362e958 100644 --- a/crates/ksp-app-config-desk/README.md +++ b/crates/ksp-app-config-desk/README.md @@ -1,5 +1,5 @@ - + # `ksp-app-config-desk` @@ -27,6 +27,7 @@ Le gabarit desktop actif fournit maintenant : - SimpleBar + `resize-observer-polyfill` pour le scrolling du shell ; - DataTables 3 + Select 4 pour l’inventaire interactif des documents Config ; - le panneau Documents générique alimenté par le registre `ksp-config-lib`, avec diagnostics backend et réparation validée ; +- le panneau Profils générique pour `default_profile`, sélection explicite, vues global/profil/effective sûre et provenance ; - `tauri-plugin-tracing` côté Rust et `@fltsci/tauri-plugin-tracing` côté frontend ; - les ports dédiés `1430` pour Vite HTTP et `1431` pour le WebSocket de développement ; - la destination frontend externe commune à Tauri et Vite; @@ -51,6 +52,7 @@ frontend/ │ ├── frontend_log.ts │ ├── invoke.ts │ ├── main.ts +│ ├── profiles.ts │ └── splash.ts ├── main.html └── splash.html @@ -127,6 +129,13 @@ Après la readiness frontend, Rust émet `fade_in`, attend la durée minimale, Le shell principal expose les cinq routes de référence `Vue d'ensemble`, `Documents`, `Profils`, `Environnement / .env` et `Logging`. Le logo porte déjà l'identité KSP ; le texte du header suit donc la forme `Config Desk — ` au lieu de répéter `KSP`. Les quelques commandes principales restent des pills/tabs à droite ; un dropdown sera préféré lorsqu'une application possède trop de commandes pour conserver ce format lisible. Les routes non encore fonctionnelles affichent un placeholder sans réimplémenter les services prévus par les prereleases suivantes. + +## Panneau Profils + +La vue **Profils** inspecte les documents validés qui exposent le contrat standard `default_profile` / `profiles`. Elle ne revalide ni ne fusionne les valeurs dans le frontend : le backend utilise `ConfigDocumentEngine::load_resolved_profile()` puis `ResolvedConfigProfile::resolve_effective_environment_detailed()`. + +L'inspection expose le profil par défaut ou une sélection explicite, les vues source `globals` et `profile`, ainsi que l'effective après résolution environnementale. Cette dernière est toujours sérialisée depuis `ResolvedConfigJson::safe_value()` afin qu'une substitution Secret soit redacted. La provenance top-level distingue `global` / `profile`; la provenance environnement n'expose que JSON Pointer, nom de variable, source `process`/`.env`/fallback et sensibilité, jamais la valeur résolue. + ## Traçabilité frontend Les actions utilisateur significatives et changements d'état sont journalisés en `debug`; les opérations plus fines (rendu/remplacement DOM, étapes IPC, animations et événements fréquents) en `trace`. Le wrapper `invoke.ts` trace début/fin des commandes sans journaliser leurs arguments, afin de ne pas créer ultérieurement de fuite de valeurs sensibles. diff --git a/crates/ksp-app-config-desk/TODO.md b/crates/ksp-app-config-desk/TODO.md index 442731f..6b58f2d 100644 --- a/crates/ksp-app-config-desk/TODO.md +++ b/crates/ksp-app-config-desk/TODO.md @@ -1,13 +1,13 @@ - + # TODO `ksp-app-config-desk` -Le gabarit frontend, le bootstrap Config/Logging, `AppState`, le `LoggingGuard` durable, les premiers DTO TS-RS, le bridge frontend logging KSP, le lifecycle `splash -> main` et le panneau Documents sont maintenant présents. +Le gabarit frontend, le bootstrap Config/Logging, `AppState`, le `LoggingGuard` durable, les premiers DTO TS-RS, le bridge frontend logging KSP, le lifecycle `splash -> main`, le panneau Documents et le panneau Profils/provenance sont maintenant présents. Les prochaines tranches doivent encore : -- développer les panneaux Profils, Environnement/`.env`, Secrets et Logging ; +- développer les panneaux Environnement/`.env`, Secrets et Logging ; - faire évoluer le runtime Logging vers des fichiers applicatifs uniques par lancement (`app-name..`) ; - ramener le target applicatif de `debug` à `info` ou `warn` avant clôture de la release ; - démontrer le hot reload Logging et le panneau de test de routage ; diff --git a/crates/ksp-app-config-desk/USAGE.md b/crates/ksp-app-config-desk/USAGE.md index 962c4f6..651c28c 100644 --- a/crates/ksp-app-config-desk/USAGE.md +++ b/crates/ksp-app-config-desk/USAGE.md @@ -1,11 +1,11 @@ - + # Utilisation de `ksp-app-config-desk` ## État actuel -Le gabarit Rust/Tauri et le frontend Vite/TypeScript/SCSS sont présents. Le backend initialise Config, le runtime Logging et `AppState`. Le panneau Documents est fonctionnel ; les panneaux Profils, Environnement/`.env`, Secrets et Logging restent à compléter. +Le gabarit Rust/Tauri et le frontend Vite/TypeScript/SCSS sont présents. Le backend initialise Config, le runtime Logging et `AppState`. Les panneaux Documents et Profils sont fonctionnels ; les panneaux Environnement/`.env`, Secrets et Logging restent à compléter. La fenêtre `splash` est visible au démarrage. Après readiness du frontend et temporisation résolue par Config, l'application effectue le fade-out, affiche/focalise `main` puis détruit `splash`. La fenêtre principale expose immédiatement la navigation monofenêtre de référence. @@ -131,7 +131,7 @@ Environnement / .env Logging ``` -Seule la vue d'ensemble consomme déjà `get_app_snapshot`; les autres routes restent des placeholders jusqu'à leurs tranches fonctionnelles. Le header affiche `Config Desk — ` : le logo fournit déjà l'identité KSP. Les commandes principales peu nombreuses utilisent des pills/tabs alignées à droite ; une application plus chargée devra préférer un dropdown. Chaque clic de tab est tracé en `trace`, l'activation utilisateur significative reste tracée en `debug`, et chaque remplacement/rendu de section en `trace`. Les appels Tauri partagés utilisent `frontend/ts/invoke.ts`, qui journalise le début et la fin d'une commande sans journaliser ses arguments. +Les vues d'ensemble, Documents et Profils sont fonctionnelles ; Environnement / `.env` et Logging restent des placeholders jusqu'à leurs tranches fonctionnelles. Le header affiche `Config Desk — ` : le logo fournit déjà l'identité KSP. Les commandes principales peu nombreuses utilisent des pills/tabs alignées à droite ; une application plus chargée devra préférer un dropdown. Chaque clic de tab est tracé en `trace`, l'activation utilisateur significative reste tracée en `debug`, et chaque remplacement/rendu de section en `trace`. Les appels Tauri partagés utilisent `frontend/ts/invoke.ts`, qui journalise le début et la fin d'une commande sans journaliser ses arguments. ## Asset font du splash @@ -153,3 +153,17 @@ Pour chaque document, le backend expose : La sélection charge le source brut via `ConfigManagement::read_source()`, y compris lorsque le document est invalide mais lisible. Le bouton **Valider et sauvegarder** envoie le texte à `ConfigManagement::save_source_candidate()` : aucune écriture frontend directe du fichier n’est effectuée. Un candidat invalide est refusé avant persistence et le diagnostic backend reste l’autorité de validation. Les clics, sélections, chargements, remplacements DOM et sauvegardes sont tracés via le bridge frontend KSP sans journaliser le contenu du source. + + +## Panneau Profils + +La vue **Profils** charge l'inventaire des documents Config validés qui possèdent `default_profile` et `profiles`. Pour le document sélectionné : + +- **Profil par défaut** appelle le backend sans `profile_id` et doit afficher `source de sélection = default_profile` ; +- changer **Profil inspecté** effectue une sélection explicite et doit afficher `source de sélection = sélection explicite` ; +- **Globals source** et **Profil source** affichent les objets validés correspondants ; +- **Effective sûre** affiche le résultat de résolution environnementale redacted par Config ; +- **Provenance top-level** indique si chaque clé effective vient des globals ou du profil ; +- **Provenance environnement** indique JSON Pointer, variable, source et sensibilité sans valeur réelle. + +Avec le `std.logging.json` actuel et `KSP_LOGS_DIRECTORY` défini dans `.env`, la provenance attendue pour `/logs_directory` est `KSP_LOGS_DIRECTORY`, source `dotenv`, sensibilité `Internal`. Le contenu des vues JSON n'est pas recopié dans les logs ; seuls les identifiants de document/profil et métadonnées de résolution sont tracés. diff --git a/crates/ksp-app-config-desk/frontend/main.html b/crates/ksp-app-config-desk/frontend/main.html index c5d49b8..8fe4ebd 100644 --- a/crates/ksp-app-config-desk/frontend/main.html +++ b/crates/ksp-app-config-desk/frontend/main.html @@ -1,5 +1,5 @@ - + @@ -116,6 +116,94 @@
Chargement de l'inventaire Config...
+ + +