115 lines
5.1 KiB
Markdown
115 lines
5.1 KiB
Markdown
<!-- file: deltas/0.1.4/pre.015.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta `0.1.4-pre.015` — Logging editor, mutations/persistence
|
|
|
|
## Statut
|
|
|
|
Tranche livrée pour validation locale.
|
|
|
|
`0.1.4-pre.014` est considérée validée : `fmt`, `check`, `clippy`, les 46 tests Config Desk, les 87 tests Config, les cinq audits ownership et les 12 tests d'API publique passent. La vue Logging affiche correctement le document typé, la console, les deux file sinks et les trois target filters ; le refresh relit la source sans modifier le runtime.
|
|
|
|
## Objectif
|
|
|
|
Transformer la projection Logging read-only en **éditeur typé persistant**, sans encore reconfigurer le runtime actif. Le frontend manipule un brouillon structuré ; `ksp-config-lib` reste l'unique autorité de validation et de persistence de `std.logging.json`.
|
|
|
|
## Modifications
|
|
|
|
### Backend
|
|
|
|
- les DTO Logging imbriqués acceptent aussi la désérialisation pour former un candidat typé ;
|
|
- ajout de `LoggingDocumentCandidateDto` ;
|
|
- ajout de `LoggingDocumentSaveResultDto` avec `source_changed`, `reload_required` et document rechargé ;
|
|
- nouvelle commande Tauri centralisée `save_logging_document` ;
|
|
- reconstruction explicite du candidat avec les contrats publics :
|
|
- `LoggingConfigDocument` ;
|
|
- `LoggingProfileConfig` ;
|
|
- `LoggingConsoleConfig` ;
|
|
- `LoggingFileConfig` ;
|
|
- `LoggingOutputFilterConfig` ;
|
|
- `LoggingTargetFilterConfig` ;
|
|
- persistence exclusive via `ConfigManagement::save_logging_document()` ;
|
|
- après succès, relecture immédiate du document typé ;
|
|
- logs limités aux compteurs, identifiants non sensibles et booléens de changement ;
|
|
- aucun appel à `ksp_logging_lib::reinitialize` dans cette tranche.
|
|
|
|
### Extension Config minimale
|
|
|
|
- ajout de `LoggingFileConfig::set_ansi()` pour compléter la surface mutable du contrat typed source ;
|
|
- la validation existante continue d'imposer `ansi=false` aux file sinks persistants.
|
|
|
|
### Frontend
|
|
|
|
- `logs_directory` éditable ;
|
|
- `default_profile` éditable ;
|
|
- gestion du brouillon profils :
|
|
- créer ;
|
|
- cloner ;
|
|
- renommer ;
|
|
- supprimer avec modal Bootstrap ;
|
|
- édition de `default_filter` et `span_events` ;
|
|
- édition complète de la console et de son filtre ;
|
|
- gestion 0/1/N file sinks : ajout, modification, retrait du brouillon ;
|
|
- gestion 0/1/N target filters : ajout, modification, retrait du brouillon ;
|
|
- selectors `targets`/`domains` saisis comme listes séparées par virgules puis projetés en tableaux ;
|
|
- bouton **Sauvegarder** désactivé tant que le brouillon est propre ;
|
|
- **Recharger** refuse de jeter silencieusement un brouillon sale et demande confirmation via modal Bootstrap ;
|
|
- une sauvegarde refusée conserve le brouillon et laisse la source inchangée ;
|
|
- le résultat affiche `source_changed` et `reload_required`, avec rappel explicite que le runtime reste inchangé.
|
|
|
|
### Tests
|
|
|
|
- round-trip DTO éditeur -> contrats typed Config ;
|
|
- conservation d'un profil multi-fichiers et de ses target filters ;
|
|
- les exports TS-RS couvrent les nouveaux DTO candidate/save result ;
|
|
- la validation atomique proprement dite reste couverte par les tests `ksp-config-lib` existants.
|
|
|
|
### Documentation
|
|
|
|
- `pre.014` marquée réalisée ;
|
|
- `pre.015` marquée en cours ;
|
|
- README/USAGE/TODO alignés sur l'éditeur mutable et la séparation persistence/runtime.
|
|
|
|
## Hors scope maintenu
|
|
|
|
Cette tranche ne :
|
|
|
|
- recharge pas le subscriber Logging ;
|
|
- ne change pas le `LoggingGuard` actif ;
|
|
- ne choisit pas encore un profil runtime à appliquer ;
|
|
- ne crée pas encore les noms de fichiers uniques par lancement ;
|
|
- n'introduit pas encore le panneau de test Logging.
|
|
|
|
Ces éléments appartiennent respectivement à `pre.016` et `pre.017`.
|
|
|
|
## Scénarios de validation
|
|
|
|
1. modifier `default_filter` d'un profil, sauvegarder, puis vérifier `source_changed=true` et `reload_required=true` ;
|
|
2. recharger et constater que la valeur persiste dans `std.logging.json` ;
|
|
3. cloner `local_dev` vers `local_test`, définir `default_profile=local_test`, sauvegarder puis recharger ;
|
|
4. renommer le clone et vérifier que `default_profile` suit automatiquement si le profil renommé est le default ;
|
|
5. ajouter un troisième file sink, sauvegarder, puis vérifier qu'il réapparaît après reload ;
|
|
6. retirer un sink pour revenir à un seul, puis à zéro si souhaité : le document doit rester valide ;
|
|
7. ajouter/retirer un target filter ;
|
|
8. produire volontairement un candidat invalide, par exemple `output_id` invalide ou targets vides : la sauvegarde doit être refusée et le fichier existant doit rester inchangé ;
|
|
9. avec un brouillon sale, **Recharger** doit ouvrir un modal Bootstrap ; **Annuler** conserve le brouillon, **Abandonner et recharger** restaure la source ;
|
|
10. vérifier qu'aucune de ces sauvegardes ne change encore le runtime Logging actif pendant le même lancement.
|
|
|
|
## Version technique
|
|
|
|
```text
|
|
workspace.package.version = "0.1.4-pre.15"
|
|
```
|
|
|
|
## Validation locale demandée
|
|
|
|
```bash
|
|
cargo fmt --all
|
|
cargo check --workspace
|
|
cargo clippy --workspace --all-targets
|
|
cargo test -p ksp-app-config-desk
|
|
cargo test -p ksp-config-lib
|
|
cargo tree -p ksp-app-config-desk
|
|
cargo tauri dev -c crates/ksp-app-config-desk/tauri.conf.json
|
|
```
|