6.5 KiB
Delta 0.1.4-pre.015-fix.002 — hot reload immédiat Logging et tests indépendants de la Config éditable
Statut
Correctif de 0.1.4-pre.015-fix.001 livré pour validation locale.
Le correctif précédent a clarifié la différence entre rechargement du document et runtime actif, mais cette clarification ne satisfait pas le contrat fonctionnel de Config Desk : KSP-APP-020 exige que le routage Logging soit réellement rechargeable à chaud sans redémarrage. Une sauvegarde Logging doit donc pouvoir être appliquée au subscriber déjà installé.
La validation locale a également révélé que plusieurs tests considéraient les valeurs historiques de config/std.logging.json (warn, new_and_close, etc.) comme une fixture immuable. Après une édition légitime depuis Config Desk vers info / off, ces tests échouaient alors que la configuration restait valide.
Défaut 1 — persistence sans application runtime
Avant ce correctif :
éditeur -> save_logging_document -> std.logging.json
X-> runtime tracing déjà actif
Ainsi, console.enabled=false était bien persisté mais les événements KSP continuaient d'être routés vers la console jusqu'au redémarrage du processus.
Ce comportement contredit l'objectif du manager Logging et KSP-APP-020.
Correction runtime
save_logging_document devient une opération Sauvegarder et appliquer :
- lecture de la source Logging précédente via
ConfigManagement::read_source(); - reconstruction du candidat typé ;
- validation et persistence atomique via
ConfigManagement::save_logging_document(); - chargement d'un
ConfigEnvironmentfrais ; - résolution du
default_profileavecload_resolved_logging_config(); - préparation/application du runtime via
ksp_logging_lib::reinitialize()sur leLoggingGuardconservé dansAppState; - mise à jour de
active_logging_profile,logging_generation,fallback_logging_activeet du diagnostic startup seulement après succès.
Le résultat Tauri expose désormais :
source_changed;reload_required;runtime_applied;logging_generation;active_profile;- le document typé relu.
Transaction/rollback
ksp-logging-lib::reinitialize() prépare les nouveaux outputs avant le swap et conserve déjà l'ancien runtime si la préparation/reload échoue.
Config Desk complète cette garantie au niveau persistence : si la résolution effective ou le hot reload échoue après modification de std.logging.json, la source brute précédente est restaurée via ConfigManagement::save_source_candidate().
Ainsi, l'échec ne doit pas laisser :
source nouvelle + runtime ancien
Un test applicatif spécifique vérifie la restauration de la source précédente après une erreur runtime synthétique.
Défaut 2 — tests dépendants d'un fichier utilisateur mutable
La validation locale a produit notamment :
left: "info"
right: "warn"
et :
raw source candidate fixture must change the persisted bytes
Ces échecs ne signalaient pas une Config invalide : ils provenaient de tests qui supposaient que std.logging.json conserverait éternellement ses valeurs historiques ou une indentation particulière.
Le correctif :
- compare la projection Logging editor avec la source typée réellement chargée ;
- compare la résolution de profil avec le
default_profileréellement présent ; - compare l'adapter runtime avec l'effective réellement résolue au lieu d'imposer
warn/new_and_close; - construit les candidats invalides par modification JSON structurée et non par remplacement du texte
local_dev; - garantit une différence de bytes pour le test raw par ajout de whitespace JSON valide, indépendamment de l'indentation source ;
- réduit les assertions exactes sur la Config workspace aux invariants réellement normatifs ;
- ajoute
crates/ksp-config-lib/unit_tests/fixtures/std.logging.jsonetunit_tests/fixtures/examples/composite.example.jsonpour les tests comportementaux qui ont besoin de valeurs exactes stables.
La nouvelle règle KSP-APP-033 formalise cette frontière : un document Config éditable par Config Desk n'est jamais une fixture immuable pour les tests.
Interface
- le bouton devient Sauvegarder et appliquer ;
- le statut affiche
runtime_applied,logging_generationetactive_profile; - Recharger le document reste une resynchronisation du brouillon uniquement ;
- l'avertissement UI explique le rollback source/runtime ;
- désactiver
console.enabledpuis Sauvegarder et appliquer doit couper immédiatement les événements KSP dans la console du processus courant ; - la ligne de debug annonçant la demande de sauvegarde peut encore apparaître juste avant le swap, puisqu'elle est émise avec l'ancien runtime ; les événements frontend/backend suivants ne doivent plus apparaître sur ce sink si la console est désactivée.
Les messages Cargo/Tauri/Vite restent externes au runtime KSP.
Planification
Le hot reload de base est absorbé par ce fix de pre.015 puisqu'il est requis pour corriger le comportement livré.
pre.016 conserve les compléments runtime :
- fichiers applicatifs uniques par lancement ;
- sélection explicite du profil runtime indépendamment du
default_profile; - observabilité renforcée de la génération/runtime ;
- consolidation des scénarios transactionnels.
Version technique
0.1.4-pre.15.fix.2
Validation attendue
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 tauri dev -c crates/ksp-app-config-desk/tauri.conf.json
La Config workspace peut conserver les valeurs modifiées pendant les essais, par exemple default_filter=info ou span_events=off : les tests ne doivent plus échouer uniquement pour cette raison.
Test hot reload console
- démarrer avec la console Logging activée ;
- ouvrir Logging et décocher
Console / Enabledsur ledefault_profile; - cliquer Sauvegarder et appliquer ;
- vérifier le résultat
runtime_applied=trueet l'incrément delogging_generation; - sans arrêter l'application, cliquer dans plusieurs vues ;
- aucun nouvel événement KSP horodaté issu de ces clics ne doit apparaître dans le terminal ;
- réactiver
Console / Enabled, Sauvegarder et appliquer ; - les événements KSP doivent réapparaître immédiatement, toujours sans redémarrage.