Files
khadhroony-solana-project/deltas/0.1.4/pre.015-fix.002.md

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 :

  1. lecture de la source Logging précédente via ConfigManagement::read_source() ;
  2. reconstruction du candidat typé ;
  3. validation et persistence atomique via ConfigManagement::save_logging_document() ;
  4. chargement d'un ConfigEnvironment frais ;
  5. résolution du default_profile avec load_resolved_logging_config() ;
  6. préparation/application du runtime via ksp_logging_lib::reinitialize() sur le LoggingGuard conservé dans AppState ;
  7. mise à jour de active_logging_profile, logging_generation, fallback_logging_active et 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_profile ré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.json et unit_tests/fixtures/examples/composite.example.json pour 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_generation et active_profile ;
  • Recharger le document reste une resynchronisation du brouillon uniquement ;
  • l'avertissement UI explique le rollback source/runtime ;
  • désactiver console.enabled puis 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

  1. démarrer avec la console Logging activée ;
  2. ouvrir Logging et décocher Console / Enabled sur le default_profile ;
  3. cliquer Sauvegarder et appliquer ;
  4. vérifier le résultat runtime_applied=true et l'incrément de logging_generation ;
  5. sans arrêter l'application, cliquer dans plusieurs vues ;
  6. aucun nouvel événement KSP horodaté issu de ces clics ne doit apparaître dans le terminal ;
  7. réactiver Console / Enabled, Sauvegarder et appliquer ;
  8. les événements KSP doivent réapparaître immédiatement, toujours sans redémarrage.