Files
khadhroony-solana-project/deltas/0.1.4/pre.008-fix.001.md

4.3 KiB

0.1.4-pre.008-fix.001 — Contextes splash numériques et réexports de labels inutiles

1. Motif du fix

pre.008 a introduit le lifecycle réel splash -> main, les modules tw_splash / tw_main et la validation des timings du splash, mais la première validation locale a révélé deux défauts Rust bloquants ou bruyants :

  • Error::with_context() reçoit deux bornes numériques (u64 et u32) alors que son contrat exige une valeur convertible en String, ce qui provoque deux erreurs E0277 dans splash.rs ;
  • lib.rs réexporte WINDOW_LABEL_MAIN et WINDOW_LABEL_SPLASH alors que ces constantes ne sont utilisées qu'à l'intérieur de leurs modules propriétaires, ce qui provoque deux warnings unused_imports.

Le correctif ne modifie ni la séquence fonctionnelle du splash, ni les labels de fenêtres, ni les contrats frontend introduits en pre.008.

2. Version technique

Le fix touche du Rust compilé. Le signal Cargo devient :

workspace.package.version = "0.1.4-pre.8.fix.1"

La version applicative frontend/Tauri reste 0.1.4 selon la politique KSP actuelle.

3. Contextes d'erreur numériques

Le contrat Core est :

pub fn with_context(mut self, key: &'static str, value: impl Into<String>) -> Self

Les bornes applicatives du splash ne peuvent donc pas être passées directement comme entiers.

Les deux branches deviennent explicitement :

.with_context("maximum_ms", maximum.to_string())

Cela concerne :

  • parse_u64_setting() pour KSP_DESK_SPLASH_MINIMUM_MS ;
  • parse_u32_setting() pour KSP_DESK_SPLASH_FADE_MS.

Aucune modification de ksp-core-lib::Error n'est nécessaire : la représentation textuelle du contexte reste le contrat commun voulu par Core.

4. Ownership des labels de fenêtre

L'audit des usages confirme :

tw_main::WINDOW_LABEL_MAIN
  -> utilisé uniquement dans tw_main.rs

tw_splash::WINDOW_LABEL_SPLASH
  -> utilisé uniquement dans tw_splash.rs

Les deux lignes suivantes sont donc supprimées de lib.rs :

pub(crate) use self::tw_main::WINDOW_LABEL_MAIN;
pub(crate) use self::tw_splash::WINDOW_LABEL_SPLASH;

Il serait artificiel de modifier tw_main.rs / tw_splash.rs pour consommer crate::WINDOW_LABEL_* uniquement afin de rendre ces réexports utilisés. Chaque module conserve légitimement la propriété et l'usage direct de son label.

Les réexports réellement utilisés restent inchangés :

pub(crate) use self::tw_main::show_and_focus as show_main_window;
pub(crate) use self::tw_splash::frontend_ready as splash_frontend_ready_service;

5. Test renforcé

Le test unitaire splash_duration_parser_rejects_invalid_or_unbounded_values couvre désormais explicitement les deux types de bornes :

u64 -> maximum_ms = "60000"
u32 -> maximum_ms = "10000"

Il vérifie que les erreurs bornées conservent bien ces valeurs dans Error::context() sous forme textuelle.

6. Fichiers modifiés

Fichier Action
Cargo.toml modifié
crates/ksp-app-config-desk/src/lib.rs modifié
crates/ksp-app-config-desk/src/splash.rs modifié
crates/ksp-app-config-desk/unit_tests/splash.rs modifié
deltas/0.1.4/pre.008-fix.001.md ajouté

7. 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

Les validations doivent confirmer :

  • disparition des deux erreurs E0277 sur maximum_ms ;
  • absence des warnings unused import pour WINDOW_LABEL_MAIN / WINDOW_LABEL_SPLASH ;
  • maintien des tests du lifecycle splash ;
  • transition réelle splash -> main toujours fonctionnelle.

8. Suite

Après validation de ce fix, la suite reste celle de pre.008 : pre.009 doit introduire la surface Documents + diagnostics sans réouvrir le lifecycle de fenêtres, sauf défaut runtime découvert pendant la validation desktop.