210 lines
7.3 KiB
Markdown
210 lines
7.3 KiB
Markdown
<!-- file: deltas/0.1.4/pre.007.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# `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 :
|
|
|
|
```bash
|
|
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 :
|
|
|
|
- `FrontendLogPayloadDto` avec binding TS-RS ;
|
|
- `frontend/ts/frontend_log.ts` ;
|
|
- les helpers `frontendTrace` / `frontendDebug` / `frontendInfo` / `frontendWarn` / `frontendError` ;
|
|
- un bridge `console.*` pour `trace`, `debug`, `log`, `info`, `warn` et `error` ;
|
|
- 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 :
|
|
|
|
```text
|
|
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é à :
|
|
|
|
```text
|
|
frontend
|
|
main
|
|
splash
|
|
```
|
|
|
|
Rust mappe ces identifiants vers les callsites statiques :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
FrontendLogPayloadDto
|
|
├── level
|
|
├── targetId
|
|
└── message
|
|
```
|
|
|
|
Le binding est généré sous :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```text
|
|
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 `targetId` whitelisté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 :
|
|
|
|
```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
|
|
```
|
|
|
|
Après les tests Rust, vérifier la présence du binding :
|
|
|
|
```text
|
|
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.
|