Files
khadhroony-solana-project/deltas/0.1.4/pre.004.md
2026-08-17 16:05:58 +02:00

260 lines
9.6 KiB
Markdown

<!-- file: deltas/0.1.4/pre.004.md -->
<!-- version: 2 -->
# 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.