v0.1.4-pre.001-fix.003

This commit is contained in:
2026-08-16 09:35:09 +02:00
parent f8db9f7fb1
commit 839664377f
2 changed files with 192 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md -->
<!-- version: 3 -->
<!-- version: 4 -->
# Plan `0.1.4` — `ksp-app-config-desk`
@@ -15,7 +15,7 @@ workspace.package.version = "0.1.3"
deltas/0.1.3/rel.001.md présent
```
L'archive ne contient pas de métadonnées `.git`. Le tag Git `v0.1.3` ne peut donc pas être revérifié matériellement depuis cette archive seule ; la livraison stable fournie est prise comme base de session, conformément au prérequis utilisateur de publication/tag validés.
L'archive `khadhroony-solana-project-v0.1.3.zip` est l'archive source générée automatiquement par Gitea à partir du tag stable `v0.1.3`, selon le mode de livraison normal du projet. L'absence de métadonnées `.git` à l'intérieur de cette archive est donc attendue et ne constitue pas une réserve sur la provenance de la base : l'archive Gitea nommée d'après le tag est prise comme export matériel de la release stable validée. Ce même principe s'applique aux futures bases KSP fournies sous forme d'archives de tag Gitea.
La mission de `0.1.4` est d'introduire la première application desktop spécialisée KSP :
@@ -167,6 +167,8 @@ La référence est réutilisée par **principes**, pas copiée mécaniquement.
- gabarit visuel initial de bot3 comme base à simplifier/affiner, sans recopier les écrans métier ;
- même icône de base bot3 (`favicon.png` / `favicon.ico`) tant qu'aucune identité KSP plus spécifique n'est décidée ;
- Font Awesome pour l'iconographie ;
- SimpleBar pour le scrolling applicatif cohérent et visuellement plus confortable que les scrollbars WebKitGTK par défaut ;
- `resize-observer-polyfill` comme dépendance du gabarit pour les composants/layouts qui doivent réagir proprement aux redimensionnements ;
- organisation Vite explicite avec frontend sous `frontend/` ;
- génération TS-RS à la frontière applicative ;
- `LoggingGuard` gardé durablement dans l'état backend.
@@ -187,15 +189,16 @@ Le frontend bot3 déclare `@fltsci/tauri-plugin-tracing`, package frontend compa
Bot3 n'utilise toutefois pas directement les helpers JS du package pour son routing applicatif : son `frontend_log.ts` appelle une commande Tauri dédiée avec un niveau, un target frontend explicite et le message. Ce principe est retenu et refondu dans KSP afin de conserver des targets KSP contrôlés et de faire passer l'émission finale par `ksp-logging-lib`. Le package officiel reste disponible pour les capacités réellement utiles du plugin, notamment l'intégration console lorsque celle-ci est compatible avec l'ownership Logging KSP.
Les dépendances propres aux nombreuses démos bot3 ne sont pas retenues pour Config Desk :
Les dépendances propres aux nombreuses démos bot3 ne sont pas toutes reprises par défaut. Sont écartées tant qu'un besoin immédiat n'est pas démontré :
- DataTables ;
- ECharts ;
- `@andypf/json-viewer` ;
- SimpleBar ;
- resize-observer polyfill ;
- `markdown-it` en l'absence de vue de présentation.
SimpleBar et `resize-observer-polyfill` **restent au contraire dans le gabarit frontend KSP** : ils participent au confort et à la robustesse visuelle du shell, notamment pour éviter de dépendre uniquement du scrolling natif WebKitGTK et pour conserver des composants correctement redimensionnés.
DataTables n'est pas imposé au tout premier squelette vide, mais il fait partie des composants attendus dès qu'un tableau HTML devient réellement interactif. Dès qu'un panneau requiert tri, filtrage, pagination locale, sélection, cases à cocher ou autres interactions tabulaires structurées, la tranche qui introduit ce besoin doit ajouter/configurer DataTables plutôt que réimplémenter ces fonctions à la main. Le couple bot3 `datatables.net-bs5` + `datatables.net-select-bs5` constitue la référence à réauditer au moment de son introduction.
`init_rustls` n'est pas copié par réflexe. Aucun besoin TLS direct de Config Desk n'est identifié. Le helper ne sera introduit que si une dépendance réellement utilisée l'exige. Le helper bot3 d'ouverture/focus de fenêtre est réduit à une primitive commune adaptée au shell (`show/focus` de `main` après splash) ; aucun helper multi-fenêtres générique n'est ajouté sans deuxième usage.
### 3.3 Décision frontend
@@ -208,6 +211,9 @@ Vite
SCSS via sass-embedded
Bootstrap
Font Awesome Free
SimpleBar
resize-observer-polyfill
DataTables lorsque le premier tableau interactif le justifie
```
Aucun framework React/Vue/Svelte n'est nécessaire pour ce manager spécialisé. Cette décision réduit la surface et reste cohérente avec le modèle bot3 ainsi qu'avec le template Vanilla TypeScript officiellement supporté par Tauri 2.
@@ -219,7 +225,7 @@ Le premier éditeur raw utilisera un contrôle texte natif correctement stylé ;
Aucune dépendance n'est ajoutée par `pre.001`. Les versions suivantes ont été revérifiées depuis les registres/documentations officiels afin de fixer la génération candidate à réévaluer **au moment exact de l'ajout** :
| Dépendance | Version actuelle auditée | Usage envisagé |
|---------------------------------|-------------------------:|----------------------------------------------|
| ------------------------------- | -----------------------: | -------------------------------------------- |
| `tauri` | `2.11.5` | runtime desktop |
| `tauri-build` | `2.6.3` | build Tauri |
| `tauri-plugin-tracing` | `0.3.4` | intégration tracing à la frontière Tauri |
@@ -385,6 +391,19 @@ bin : ksp-app-config-desk
- les wrappers très minces qui délèguent aux services/modules ;
- les helpers Tauri réellement transverses de démarrage/fenêtres.
La construction du runtime Tauri doit rester lisible et facilement désactivable par étape. `run` ne doit donc pas accumuler une longue chaîne de `.plugin(...).manage(...).setup(...).invoke_handler(...)`. La convention cible est une variable builder construite/réassignée progressivement, éventuellement via des helpers courts :
```text
let mut builder = tauri::Builder::default();
builder = configure_tracing(builder, ...);
builder = configure_state(builder, ...);
builder = configure_plugins(builder, ...);
builder = configure_setup(builder, ...);
builder = configure_commands(builder, ...);
```
Le code Rust final respectera évidemment les signatures réelles de Tauri et les règles KSP de retours explicites. L'objectif architectural est qu'un plugin, un bloc de setup ou un groupe de commandes puisse être commenté/désactivé temporairement sans devoir démanteler ou reformater une chaîne de builder monolithique.
Aucune annotation `#[tauri::command]` n'est dispersée dans `config_service.rs`, `logging_service.rs`, `tw_*`, etc.
### 5.2 Convention `tw_*`
@@ -648,7 +667,7 @@ En parallèle, le `frontend_log.ts` commun reprend/refond le mécanisme bot3 pou
Les noms ci-dessous sont les noms fonctionnels cibles ; ils pourront être normalisés avant implémentation, mais leurs responsabilités sont fixées.
| Commande Tauri | Service interne | API KSP principale | Secret réel ? |
|--------------------------------|--------------------------------------|-----------------------------------------------------------------------------|---------------------------------------------:|
| ------------------------------ | ------------------------------------ | --------------------------------------------------------------------------- | -------------------------------------------: |
| `get_app_snapshot` | `config_service` + `logging_service` | registry/management + runtime state | non |
| `list_config_documents` | `config_service` | future vue publique du `ConfigFileRegistry` | non |
| `inspect_config_document` | `config_service` | `load_validated_document` + `read_source` si erreur | non |
@@ -848,7 +867,7 @@ La réussite de ce scénario ferme le critère « une erreur de nouvelle configu
La release ne peut pas être clôturée sans preuve des cas suivants :
| Cas | Action UI | Résultat attendu |
|-----|-------------------------------|--------------------------------------------------------------------------------|
| --- | ----------------------------- | ------------------------------------------------------------------------------ |
| L1 | créer un second profil | profil ajouté via types Config et sauvegardable |
| L2 | modifier le profil existant | mutation persistée via `save_logging_document()` |
| L3 | profil mono-fichier | console optionnelle + exactement un sink fichier valide |
@@ -1096,12 +1115,14 @@ pre.004 squelette Rust Tauri
- membre workspace
- Cargo lib+bin/build.rs
- main.rs/lib.rs/tauri.rs minimaux
- builder Tauri configuré par étapes courtes/réassignées, sans chaîne monolithique
- tauri.conf/capabilities/icône
- single-instance
pre.005 squelette frontend/gabarit
- package.json + Vite/TypeScript
- SCSS/Bootstrap/Font Awesome
- SimpleBar + resize-observer-polyfill comme socle du gabarit
- @fltsci/tauri-plugin-tracing avec plugin Rust
- main/splash HTML+TS minimaux
- build frontend de base
@@ -1131,6 +1152,7 @@ pre.009 Documents + diagnostics
- catégories JSON/schema/sémantique/effective
- source brut invalide
- réparation via Config
- introduire DataTables ici si le tableau Documents requiert déjà tri/filtre/sélection
pre.010 Profils + provenance
- default_profile
@@ -1142,6 +1164,7 @@ pre.011 Environnement — rapports
- desired/effective/source/shadow
- sensibilité + safe values
- table issue uniquement de Config
- DataTables si tri/filtre/sélection/checkboxes sont requis à ce stade
- refresh/reload du rapport
pre.012 Environnement — management/test .env
@@ -1237,9 +1260,13 @@ typescript
sass-embedded
bootstrap
@fortawesome/fontawesome-free
simplebar
resize-observer-polyfill
```
`@types/node` ne sera ajouté que si la configuration Vite TypeScript en a réellement besoin. Les autres packages bot3 sont exclus tant qu'une tranche n'en démontre pas l'usage immédiat.
DataTables est ajouté à la première tranche qui introduit un tableau nécessitant tri/filtrage/sélection/checkboxes, avec le couple bot3 `datatables.net-bs5` + `datatables.net-select-bs5` comme référence à réauditer avant ajout. Il n'est pas ajouté au squelette vide uniquement par symétrie.
`@types/node` ne sera ajouté que si la configuration Vite TypeScript en a réellement besoin. ECharts, `@andypf/json-viewer` et les autres packages métier/démo bot3 restent exclus tant qu'une tranche n'en démontre pas l'usage immédiat.
La politique KSP sans lockfile versionné reste inchangée.
@@ -1251,6 +1278,7 @@ La politique KSP sans lockfile versionné reste inchangée.
- la crate est directement sous `crates/` ;
- lib+bin séparés, `main.rs` mince, `lib.rs` déclaratif ;
- `run` configure le `tauri::Builder` par étapes courtes/réassignées ou helpers ciblés, sans longue chaîne monolithique ;
- toutes les commandes Tauri sont dans `tauri.rs` ;
- services/modules métier hors wrappers ;
- aucune lecture/écriture directe des fichiers Config/`.env` ;