7.3 KiB
0.1.4-pre.007 — Bridge frontend logging KSP
1. Base validée
La base 0.1.4-pre.6.fix.1 a été validée localement avec :
cargo fmt --all
cargo check --workspace
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
Les tests de l'application et de Config passent, Vite démarre sur 1430, le binaire Tauri s'exécute et le fallback Logging transitoire reste observable lorsque std.logging.json n'est pas disponible depuis les paths actifs.
2. Objectif
Cette tranche reprend/refond le mécanisme frontend_log.ts éprouvé dans khadhroony-bot3 afin que les événements techniques des WebViews passent par la façade Logging KSP.
Elle introduit :
FrontendLogPayloadDtoavec binding TS-RS ;frontend/ts/frontend_log.ts;- les helpers
frontendTrace/frontendDebug/frontendInfo/frontendWarn/frontendError; - un bridge
console.*pourtrace,debug,log,info,warneterror; - la commande Tauri centralisée
emit_frontend_log; - une whitelist d'identifiants de targets frontend ;
- des callsites tracing KSP statiques et filtrables ;
- des tests unitaires de validation level/target.
Le panneau manuel Logging Test, ses targets de test et ses domaines personnalisables restent hors scope de pre.007.
3. Version technique
La tranche modifie le runtime Rust et TypeScript :
workspace.package.version = "0.1.4-pre.7"
Les versions frontend/Tauri applicatives restent 0.1.4.
4. Différence volontaire avec bot3
Bot3 acceptait un target texte frontend puis réémettait tous les événements sous un seul callsite Rust fixe, le target frontend demandé étant conservé comme champ structuré.
Config Desk doit pouvoir valider les filtres réels par target de ksp-logging-lib. pre.007 ne transporte donc plus un target tracing libre. Le DTO expose un targetId logique limité à :
frontend
main
splash
Rust mappe ces identifiants vers les callsites statiques :
frontend -> ksp-app-config-desk.frontend
main -> ksp-app-config-desk.frontend.main
splash -> ksp-app-config-desk.frontend.splash
Un identifiant arbitraire est rejeté. Le frontend ne peut donc ni usurper un target d'une autre crate ni créer dynamiquement une taxonomie de targets.
5. Niveau et domaine
Les seuls niveaux acceptés sont :
trace
debug
info
warn
error
La casse et les espaces périphériques sont normalisés côté Rust. Tout autre niveau produit config_desk.frontend_log_level_invalid.
Les événements techniques du bridge utilisent le domaine structuré fixe :
frontend
Le domaine reste distinct du target. Les domaines personnalisables appartiendront au panneau manuel Logging Test et ne sont pas ajoutés à ce DTO technique.
6. Ownership Logging
Le chemin est :
frontend helper / console bridge
-> invoke("emit_frontend_log")
-> wrapper #[tauri::command] dans tauri.rs
-> frontend_logging service
-> ksp-logging-lib::{trace,debug,info,warn,error}!
-> subscriber KSP déjà installé
ksp-app-config-desk n'importe pas directement tracing et tauri-plugin-tracing n'installe toujours aucun subscriber par défaut.
Le package @fltsci/tauri-plugin-tracing reste l'adaptateur frontend correspondant au plugin Tauri, mais le contrat applicatif KSP à target filtrable passe par la commande dédiée ci-dessus.
7. DTO et binding TS-RS
Le nouveau DTO est :
FrontendLogPayloadDto
├── level
├── targetId
└── message
Le binding est généré sous :
frontend/ts/bindings/ksp_app_config_desk/frontend_logging/FrontendLogPayloadDto.ts
Le message est une donnée technique fournie par le frontend. Cette surface ne doit pas être utilisée pour recopier des secrets Config ou des résultats de reveal.
8. Bridge console
installFrontendConsoleBridge(targetId) conserve les méthodes console originales puis route :
console.trace -> trace
console.debug -> debug
console.log -> info
console.info -> info
console.warn -> warn
console.error -> error
L'affichage WebView original est conservé. Si invoke("emit_frontend_log") échoue, le diagnostic est écrit avec originalConsole.error, et non avec le console.error remplacé, afin d'éviter une récursion du bridge.
main.ts installe le bridge avec main; splash.ts avec splash. Les deux émettent également un événement info lors de leur DOMContentLoaded.
9. Erreurs applicatives
Deux codes stables sont ajoutés :
config_desk.frontend_log_level_invalid
config_desk.frontend_log_target_invalid
Le wrapper Tauri transforme ces erreurs avec le CommandErrorDto borné déjà introduit en pre.006.
10. Tests
Les tests unitaires hors src/ vérifient :
- les cinq niveaux reconnus et leur normalisation ;
- le rejet d'un niveau inconnu ;
- les trois
targetIdwhitelistés ; - le rejet d'un target arbitraire.
Le derive TS-RS ajoute le test d'export de FrontendLogPayloadDto.
11. Fichiers
| Fichier | Action |
|---|---|
Cargo.toml |
modifié |
crates/ksp-app-config-desk/src/constants.rs |
modifié |
crates/ksp-app-config-desk/src/errors.rs |
modifié |
crates/ksp-app-config-desk/src/frontend_logging.rs |
ajouté |
crates/ksp-app-config-desk/src/lib.rs |
modifié |
crates/ksp-app-config-desk/src/tauri.rs |
modifié |
crates/ksp-app-config-desk/unit_tests/frontend_logging.rs |
ajouté |
crates/ksp-app-config-desk/frontend/ts/frontend_log.ts |
ajouté |
crates/ksp-app-config-desk/frontend/ts/main.ts |
modifié |
crates/ksp-app-config-desk/frontend/ts/splash.ts |
modifié |
crates/ksp-app-config-desk/README.md |
modifié |
crates/ksp-app-config-desk/USAGE.md |
modifié |
crates/ksp-app-config-desk/TODO.md |
modifié |
deltas/0.1.4/pre.007.md |
ajouté |
12. Validations à exécuter
Depuis la racine du workspace :
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
Après les tests Rust, vérifier la présence du binding :
crates/ksp-app-config-desk/frontend/ts/bindings/ksp_app_config_desk/frontend_logging/FrontendLogPayloadDto.ts
Au lancement avec le fallback Logging Info, les événements Config Desk splash frontend loaded doivent être observables sous le target ksp-app-config-desk.frontend.splash. Le target main deviendra observable dans le lifecycle réel du shell lorsque la fenêtre principale sera affichée.
13. Suite
Après validation, pre.008 traite le shell et le lifecycle splash configurable : readiness frontend, fermeture/masquage du splash, affichage de main, et temporisation issue de Config/env plutôt qu'une constante environnementale codée en dur.