# Delta 0.1.4-pre.004 — squelette Rust/Tauri de `ksp-app-config-desk` ## Base requise ```text 0.1.4-pre.003 workspace.package.version = "0.1.4-pre.3" ``` `pre.003` est considéré comme validé et commité. Les validations locales fournies avant cette tranche ont réussi : `cargo fmt --all`, `cargo check --workspace`, `cargo clippy --workspace --all-targets`, `cargo test -p ksp-config-lib` et `cargo tree -p ksp-config-lib`. ## Objectif Créer la première application Tauri KSP sans commencer encore ses panneaux fonctionnels ni son frontend complet. Cette tranche établit les contrats structurels qu'il serait coûteux de modifier plus tard : - crate workspace `crates/ksp-app-config-desk` ; - package Rust mixte `lib` + `bin` ; - `main.rs` launcher mince avec verrou single-instance ; - `tauri.rs` propriétaire du runtime Tauri ; - builder Tauri configuré par étapes courtes ; - fenêtres `splash` et `main` ; - capabilities initiales ; - icône de référence issue du gabarit bot3 ; - destination frontend externe ; - premier couple de ports desk `1430/1431` ; - conventions `frontend/ts`, `frontend/sass` et bindings TS-RS. Le frontend Vite/TypeScript/SCSS et les dépendances npm restent réservés à `pre.005`. ## Version Cargo `workspace.package.version` passe de : ```text 0.1.4-pre.3 ``` à : ```text 0.1.4-pre.4 ``` L'identifiant de livraison est : ```text 0.1.4-pre.004 ``` ## 1. Nouveau membre workspace Le workspace contient désormais : ```text crates/ksp-app-config-desk ``` Le package expose deux cibles distinctes : ```text package : ksp-app-config-desk lib : ksp_app_config_desk_lib bin : ksp-app-config-desk ``` La bibliothèque utilise les crate types Tauri usuels `staticlib`, `cdylib` et `rlib` afin de conserver le gabarit compatible desktop/mobile sans déplacer la logique applicative dans le binaire. ## 2. Dépendances Rust introduites Les versions ont été revérifiées au moment de cette tranche : | Dépendance | Version auditée | Contrainte workspace | Usage immédiat | | ------------- | --------------: | -------------------: | -------------------------- | | `tauri` | `2.11.5` | `^2.11` | runtime/application | | `tauri-build` | `2.6.3` | `^2.6` | build script Tauri | | `fs2` | `0.4.3` | `^0.4` | verrou single-instance | Les contraintes sont déclarées sous `[workspace.dependencies]`; la crate applicative les consomme avec `.workspace = true`. `ksp-core-lib` est la seule dépendance KSP immédiate de cette tranche, pour `Result`/`ErrorCode`/`Error`. `ksp-config-lib`, `ksp-logging-lib`, `tauri-plugin-tracing`, `ts-rs` et les dépendances frontend ne sont pas ajoutés prématurément : ils entreront lorsque leurs premiers usages réels seront développés. ## 3. Launcher `main.rs` `main.rs` reste volontairement mince : 1. construit un lockfile dans le répertoire temporaire système ; 2. acquiert un lock exclusif non bloquant via `fs2` ; 3. refuse une seconde instance ; 4. collecte `std::env::args_os()` ; 5. appelle `ksp_app_config_desk_lib::run(arguments)` ; 6. convertit explicitement le résultat en `ExitCode`. Le launcher ne lit aucune variable `KSP_*`/`KSPB_*` et ne parse pas Config lui-même. Les diagnostics précédant l'initialisation future de Logging restent limités à `stderr`. ## 4. Frontière `tauri.rs` `tauri.rs` possède dès maintenant `run()` et le `tauri::Builder`. La construction suit la convention KSP décidée pendant `pre.001` : ```text let mut builder = tauri::Builder::default(); builder = configure_setup(builder); ... ``` Aucune longue chaîne monolithique n'est introduite. Les prochains plugins, states, setups et handlers seront ajoutés par étapes courtes/réassignées ou helpers ciblés. Le setup initial vérifie uniquement que les fenêtres déclarées `splash` et `main` existent. Il n'existe encore aucune commande Tauri ; lorsqu'elles apparaîtront, leurs annotations `#[tauri::command]` resteront centralisées dans ce module. Une erreur runtime Tauri est convertie vers le type commun `ksp_core_lib::Error` avec le code applicatif `config_desk.tauri_runtime_failed`. ## 5. Configuration Tauri `tauri.conf.json` déclare : - produit `KSP Config Desk` ; - identifiant `com.sasedev.ksp-app-config-desk` ; - version applicative `0.1.4` ; - fenêtre `splash` cachant le shell pendant le lifecycle de démarrage ; - fenêtre `main` initialement invisible ; - icônes `favicon.png` et `favicon.ico` reprises du gabarit bot3 ; - capability initiale `core:default` pour `splash` et `main`. Le plugin tracing n'est volontairement pas déclaré dans cette tranche ; son couple Rust/frontend est introduit avec le gabarit frontend de `pre.005`. ## 6. Destination frontend et ports La destination de build est fixée dès maintenant à : ```text ../../builds/khadhroony-solana-project/ksp-app-config-desk/dist ``` `tauri.conf.json` l'utilise comme `build.frontendDist`. `vite.config.ts` utilisera la même valeur comme `build.outDir` à partir de `pre.005`. Le premier couple de ports desk est réservé : | Usage | Port | | --------- | ---: | | Vite HTTP | 1430 | | Vite HMR | 1431 | Les futures applications desk progressent par paires `1432/1433`, `1434/1435`, etc. `pre.005` configurera Vite avec port strict afin qu'une collision échoue explicitement. ## 7. Convention frontend/TS-RS fixée La structure cible reprend/refond le modèle bot3 : ```text frontend/ ├── ts/ │ └── bindings/ └── sass/ ``` Les bindings TS-RS seront générés sous : ```text frontend/ts/bindings/ksp_app_config_desk/... ``` Ils resteront générés/non versionnés. `ts-rs` n'est pas encore ajouté car aucun DTO Tauri n'existe dans cette tranche. La règle npm est également formalisée : npm sert directement à installer/mettre à jour les dépendances avec `npm i -D ...`; le lancement normal se fait via Tauri, qui exécute les hooks `npm run dev` et `npm run build`. Les lockfiles frontend restent ignorés. ## 8. Règles KSP complétées `docs/rules/RULES_KSP.md` ajoute : - `KSP-APP-022` — builder Tauri progressif ; - `KSP-APP-023` — layout `frontend/ts`, `frontend/sass`, bindings TS-RS générés ; - `KSP-APP-024` — couples de ports desk uniques à partir de `1430/1431` ; - `KSP-APP-025` — npm réservé à la gestion directe des dépendances, cycle dev/build piloté par Tauri. Le plan actif passe en version 5 et enregistre les mêmes décisions pour les tranches suivantes. ## 9. Générés ignorés `.gitignore` ajoute explicitement : ```text bindings/ gen/ ``` afin de couvrir les bindings TS-RS et schemas/capabilities générés par Tauri. ## 10. Tests Un premier test d'intégration `tests/public_api.rs` vérifie que la fonction publique : ```rust ksp_app_config_desk_lib::run ``` est accessible avec la signature attendue sans lancer le runtime graphique. Aucun test frontend n'est attendu avant `pre.005`. ## 11. Fichiers ajoutés/modifiés | Fichier | Action | |--------------------------------------------------------|:-------:| | `.gitignore` | modifié | | `Cargo.toml` | modifié | | `docs/plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md` | modifié | | `docs/rules/RULES_KSP.md` | modifié | | `crates/ksp-app-config-desk/Cargo.toml` | ajouté | | `crates/ksp-app-config-desk/README.md` | ajouté | | `crates/ksp-app-config-desk/TODO.md` | ajouté | | `crates/ksp-app-config-desk/USAGE.md` | ajouté | | `crates/ksp-app-config-desk/build.rs` | ajouté | | `crates/ksp-app-config-desk/capabilities/default.json` | ajouté | | `crates/ksp-app-config-desk/icons/favicon.ico` | ajouté | | `crates/ksp-app-config-desk/icons/favicon.png` | ajouté | | `crates/ksp-app-config-desk/src/errors.rs` | ajouté | | `crates/ksp-app-config-desk/src/lib.rs` | ajouté | | `crates/ksp-app-config-desk/src/main.rs` | ajouté | | `crates/ksp-app-config-desk/src/tauri.rs` | ajouté | | `crates/ksp-app-config-desk/tauri.conf.json` | ajouté | | `crates/ksp-app-config-desk/tests/public_api.rs` | ajouté | | `deltas/0.1.4/pre.004.md` | ajouté | ## 12. Validation demandée avant commit Après application du delta : ```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 test -p ksp-config-lib` est conservé dans cette tranche parce que l'ajout d'une nouvelle crate workspace doit rester compatible avec les audits d'ownership Config qui parcourent toutes les crates. `cargo tauri dev` n'est **pas encore** un critère de validation de `pre.004` : `package.json`, Vite et les fichiers HTML/TypeScript sont volontairement introduits dans `pre.005`. ## 13. Suite Si cette tranche est validée et commitée, `pre.005` introduira le gabarit frontend : - `package.json` et installation des dépendances ; - `vite.config.ts` / `tsconfig.json` ; - `frontend/main.html` / `frontend/splash.html` ; - `frontend/ts` et `frontend/sass` réels ; - Bootstrap, Font Awesome, SimpleBar et `resize-observer-polyfill` ; - `tauri-plugin-tracing` + `@fltsci/tauri-plugin-tracing` ; - Vite strict `1430`, HMR `1431` ; - output `../../builds/khadhroony-solana-project/ksp-app-config-desk/dist` ; - premier `cargo tauri dev` du shell minimal.