9.4 KiB
0.1.4-pre.008-fix.002 — Clippy Tauri, racine Config, timings splash et header principal
1. Motif du fix
La validation locale de 0.1.4-pre.8.fix.1 confirme que cargo check, les tests de l'application et les tests Config passent, mais cargo clippy --workspace --all-targets révèle encore trois erreurs :
- deux closures de test violent
clippy::implicit_return; - l'expansion générée par Tauri pour la commande async
splash_frontend_readyutilise l'opérateur?, alors que le workspace refuseclippy::question_mark_used.
Le test desktop révèle en parallèle un point runtime plus important : le démarrage utilise toujours le fallback Logging avec json_file_read_failed, alors que config/std.logging.json existe à la racine du workspace. Le même bootstrap résout les timings du splash via ConfigEnvironment; le .env racine peut donc être manqué pour la même raison lorsque Tauri lance cargo run depuis la crate applicative.
Le correctif traite également les remarques UI liées à la tranche pre.008 : identité du header et traçage fin des changements de tabs.
2. Version technique
Le fix touche Rust, TypeScript, HTML et documentation :
workspace.package.version = "0.1.4-pre.8.fix.2"
La version applicative frontend/Tauri reste 0.1.4 selon la politique KSP courante.
3. Clippy sur les closures de test
Les predicates passés à Iterator::any() sont écrits avec le return explicite requis par le workspace :
.any(|field| return field.key() == "maximum_ms" && field.value() == "60000")
et :
.any(|field| return field.key() == "maximum_ms" && field.value() == "10000")
Le test du fallback est en plus renforcé pour verrouiller :
minimum_source = fallback
fade_source = fallback
expected_backend_lifecycle_ms = 1500
4. Exception Clippy strictement bornée au code généré Tauri
Le code source KSP de splash_frontend_ready n'utilise toujours aucun ?.
La violation provient de l'expansion de tauri::generate_handler! pour une commande async. L'exception est donc placée uniquement sur le helper d'assemblage qui invoque ce macro :
#[allow(clippy::question_mark_used)] // Tauri generates `?` internally for async command dispatch.
fn configure_commands(...)
Aucun allow global et aucune détente de clippy::question_mark / clippy::question_mark_used au niveau workspace ne sont introduits.
5. Current working directory du runtime debug
Le workflow KSP lance l'application depuis la racine avec :
cargo tauri dev -c crates/ksp-app-config-desk/tauri.conf.json
Tauri peut néanmoins exécuter le cargo run applicatif depuis la crate Tauri. Les defaults de ksp-config-lib restent volontairement :
config/
config/schemas/
./.env
Afin de conserver ces ressources enracinées au projet sans transférer leur ownership à l'application, main.rs normalise en build debug le current working directory Rust vers :
env!("CARGO_MANIFEST_DIR")/../..
avant d'appeler le bootstrap Config.
Cette adaptation :
- ne lit pas
.env; - ne parse aucune variable
KSP_*/KSPB_*; - ne lit aucun JSON Config ;
- laisse
ConfigBootstrapOptions,ConfigFileRegistry,ConfigManagementetConfigEnvironmenteffectuer toutes les lectures ; - ne s'applique pas au build release, dont le modèle de ressources distribuées sera traité séparément.
Le test desktop doit confirmer que le warning json_file_read_failed disparaît lorsque config/std.logging.json racine est valide.
6. Instrumentation Rust du lifecycle splash
SplashSettings conserve désormais la provenance sûre de chaque valeur :
process
dotenv
fallback
Le runtime journalise en debug :
- les valeurs résolues et leur provenance ;
- la readiness acceptée ;
- la fin de l'attente minimale avec durée configurée et durée réelle ;
- la fin de l'attente du fade-out avec durée configurée et durée réelle ;
- la destruction du splash après activation de
main, avec durée totale attendue/réelle.
Le contrat temporel KSP reste celui fixé par pre.008 :
readiness
-> emit fade_in
-> wait minimum
-> emit fade_out
-> wait fade
-> show/focus main
-> destroy splash
Il n'est pas remplacé par les trois temporisations historiques de bot3. Avec :
KSP_DESK_SPLASH_MINIMUM_MS=12000
KSP_DESK_SPLASH_FADE_MS=3000
le lifecycle backend attendu de readiness à activation de main est donc approximativement :
15000 ms
Les nouveaux logs permettent de distinguer immédiatement un défaut de résolution .env d'un défaut d'attente async.
7. Header principal et tabs
Le logo contenant déjà l'identité visuelle KSP, le header n'affiche plus KSP — Config Desk.
La convention devient :
[logo K] Config Desk — <vue active>
Par exemple :
Config Desk — Vue d'ensemble
Config Desk — Documents
Config Desk — Logging
Le <title> WebView suit la même vue active.
Les cinq commandes principales restent sous forme de pills/tabs alignées à droite, adaptée à cette application monofenêtre compacte. La règle de gabarit prévoit un dropdown lorsque le nombre de commandes devient trop important.
Le frontend trace désormais :
- chaque clic de tab en
trace; - l'état de tab actif après changement en
trace; - l'activation utilisateur significative de la vue en
debug; - les remplacements de contenu restent en
trace.
8. @fltsci/tauri-plugin-tracing et console WebKit
Le plugin Rust tauri-plugin-tracing reste réellement installé ; ce qui n'est pas encore utilisé est la façade JS officielle pour le routing applicatif.
Le bridge KSP actuel fournit :
console/WebView JS
-> affichage dans la console WebKit originale
-> emit_frontend_log
-> ksp-logging-lib
-> runtime Rust
Il ne fournit pas encore le trajet général inverse :
événement tracing Rust
-> console WebKit
Le package officiel expose attachConsole(), interceptConsole() et takeoverConsole(), mais avec le subscriber custom possédé par KSP, le retour Rust -> WebView nécessite que ce subscriber intègre tauri_plugin_tracing::WebviewLayer.
Décision : ne pas appeler artificiellement takeoverConsole() dans ce fix. Une future tranche raccordera éventuellement WebviewLayer à ksp-logging-lib, de façon à pouvoir utiliser attachConsole() sans second subscriber, sans double émission JS -> Rust et sans boucle avec frontend_log.ts.
9. Règles et plan
RULES_KSP.md ajoute :
KSP-APP-028pour l'identité de header et le choix tabs/pills vs dropdown ;KSP-APP-029pour la normalisation du CWD debug avant bootstrap Config dans un workspace Tauri multi-app.
Le plan 0.1.4 passe en version 9 et documente :
- la sémantique temporelle exacte du splash ;
- les métriques
debug; - le CWD runtime debug ;
- la convention du header ;
- l'état réel du bridge console et le besoin futur de
WebviewLayer.
10. Fichiers modifiés
| Fichier | Action |
|---|---|
Cargo.toml |
modifié |
crates/ksp-app-config-desk/src/main.rs |
modifié |
crates/ksp-app-config-desk/src/tauri.rs |
modifié |
crates/ksp-app-config-desk/src/splash.rs |
modifié |
crates/ksp-app-config-desk/src/app_state.rs |
modifié |
crates/ksp-app-config-desk/src/tw_splash.rs |
modifié |
crates/ksp-app-config-desk/unit_tests/splash.rs |
modifié |
crates/ksp-app-config-desk/frontend/main.html |
modifié |
crates/ksp-app-config-desk/frontend/ts/main.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é |
docs/rules/RULES_KSP.md |
modifié |
docs/plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md |
modifié |
deltas/0.1.4/pre.008-fix.002.md |
ajouté |
Aucune dépendance n'est ajoutée et aucun asset binaire n'est modifié.
11. Validations demandées
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
Avec le .env utilisateur :
KSP_DESK_SPLASH_MINIMUM_MS=12000
KSP_DESK_SPLASH_FADE_MS=3000
le lancement doit notamment montrer en debug :
minimum_ms=12000
minimum_source="dotenv"
fade_ms=3000
fade_source="dotenv"
expected_backend_lifecycle_ms=15000
puis deux attentes proches de 12000 ms et 3000 ms, et une durée backend totale proche de 15000 ms avant activation de main.
Le lancement doit également confirmer :
- disparition de
json_file_read_failedsi le document Logging racine est valide ; - chargement du profil Logging
local_devau lieu du fallback startup ; - header
Config Desk — Vue d'ensemblepuis mise à jour du titre lors des changements de tabs ; - logs
tracesur les clics/changements de tabs lorsque le filtre runtime laisse passertrace.
12. Suite
Après validation de ce fix, pre.008 peut être considérée fermée et pre.009 peut commencer la surface Documents + diagnostics.