349 lines
13 KiB
Markdown
349 lines
13 KiB
Markdown
<!-- file: deltas/0.1.4/pre.005.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.1.4-pre.005 — gabarit frontend Vite/TypeScript/SCSS et tracing Tauri
|
|
|
|
## Base requise
|
|
|
|
```text
|
|
0.1.4-pre.004-fix.001
|
|
workspace.package.version = "0.1.4-pre.4.fix.1"
|
|
```
|
|
|
|
`pre.004-fix.001` 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-app-config-desk` et `cargo tree -p ksp-app-config-desk`.
|
|
|
|
## Objectif
|
|
|
|
Rendre le squelette Tauri créé en `pre.004` réellement équipé de son gabarit frontend sans encore ouvrir les surfaces métier Config.
|
|
|
|
Cette tranche introduit :
|
|
|
|
- `package.json` ;
|
|
- `vite.config.ts` et `tsconfig.json` ;
|
|
- `frontend/main.html` et `frontend/splash.html` ;
|
|
- TypeScript minimal pour les deux fenêtres ;
|
|
- SCSS/Bootstrap/Font Awesome ;
|
|
- SimpleBar et `resize-observer-polyfill` ;
|
|
- les assets visuels de référence issus du gabarit bot3 ;
|
|
- `tauri-plugin-tracing` côté Rust ;
|
|
- `@fltsci/tauri-plugin-tracing` côté frontend ;
|
|
- la permission Tauri `tracing:default` ;
|
|
- Vite HTTP strict sur `1430` et WebSocket de développement sur `1431` ;
|
|
- la destination de build frontend externe demandée.
|
|
|
|
`AppState`, Config, Logging, le bridge `frontend_log.ts` KSP et le lifecycle splash configurable restent hors scope de cette tranche.
|
|
|
|
## Version Cargo
|
|
|
|
`workspace.package.version` passe de :
|
|
|
|
```text
|
|
0.1.4-pre.4.fix.1
|
|
```
|
|
|
|
à :
|
|
|
|
```text
|
|
0.1.4-pre.5
|
|
```
|
|
|
|
L'identifiant documentaire de livraison est :
|
|
|
|
```text
|
|
0.1.4-pre.005
|
|
```
|
|
|
|
## 1. Dépendance Rust tracing Tauri
|
|
|
|
Le workspace ajoute :
|
|
|
|
```toml
|
|
tauri-plugin-tracing = { version = "^0.3" }
|
|
```
|
|
|
|
La version actuelle auditée est `0.3.4`.
|
|
|
|
`ksp-app-config-desk` consomme la dépendance avec :
|
|
|
|
```toml
|
|
tauri-plugin-tracing.workspace = true
|
|
```
|
|
|
|
`tauri.rs` conserve un builder progressif :
|
|
|
|
```text
|
|
Builder::default
|
|
-> configure_plugins
|
|
-> configure_setup
|
|
-> run
|
|
```
|
|
|
|
`configure_plugins()` construit le plugin avec `tauri_plugin_tracing::Builder::new()` puis l'ajoute au builder. Aucun `with_default_subscriber()` n'est appelé : cette tranche ne crée donc pas de second runtime tracing et ne prend pas l'ownership réservé à `ksp-logging-lib`.
|
|
|
|
`tauri-plugin-log` n'est pas ajouté.
|
|
|
|
## 2. Capability tracing
|
|
|
|
`capabilities/default.json` contient désormais :
|
|
|
|
```text
|
|
core:default
|
|
tracing:default
|
|
```
|
|
|
|
La permission tracing entre dans le même delta que le plugin, conformément à la décision prise après `pre.004`.
|
|
|
|
## 3. Dépendances frontend
|
|
|
|
Les générations actuelles ont été revérifiées avant rédaction du manifest :
|
|
|
|
| Dépendance | Version actuelle auditée | Contrainte déclarée |
|
|
| ---------------------------------- | -----------------------: | ------------------: |
|
|
| `@fltsci/tauri-plugin-tracing` | `0.3.4` | `^0.3` |
|
|
| `@fortawesome/fontawesome-free` | `7.3.1` | `^7.3` |
|
|
| `@tauri-apps/api` | `2.11.1` | `^2.11` |
|
|
| `@types/node` | `26.1.2` | `^26.1` |
|
|
| `bootstrap` | `5.3.8` | `^5.3` |
|
|
| `resize-observer-polyfill` | `1.5.1` | `^1.5` |
|
|
| `sass-embedded` | `1.102.0` | `^1.102` |
|
|
| `simplebar` | `6.3.3` | `^6.3` |
|
|
| `typescript` | `7.0.2` | `^7.0` |
|
|
| `vite` | `8.2.0` | `^8.2` |
|
|
|
|
Ces dépendances sont placées sous `devDependencies`, conformément à l'usage `npm i -D` retenu pour les applications desk : elles participent au build du bundle desktop et ne constituent pas un runtime Node déployé séparément.
|
|
|
|
`@tauri-apps/cli` n'est pas ajouté : le workflow retenu utilise la CLI Cargo/Tauri et npm uniquement pour la gestion des dépendances et pour les scripts internes appelés par Tauri.
|
|
|
|
Le lockfile npm reste ignoré.
|
|
|
|
## 4. Politique npm
|
|
|
|
`package.json` ne fournit que les scripts utilisés par Tauri :
|
|
|
|
```text
|
|
dev -> vite
|
|
build -> tsc && vite build
|
|
```
|
|
|
|
Première installation après application du delta :
|
|
|
|
```bash
|
|
cd crates/ksp-app-config-desk
|
|
npm i -D
|
|
```
|
|
|
|
Le cycle normal reste ensuite :
|
|
|
|
```bash
|
|
cargo tauri dev
|
|
```
|
|
|
|
ou le build Tauri correspondant. Il n'est pas demandé de lancer directement `npm run dev` ou `npm run build` dans le workflow utilisateur.
|
|
|
|
L'environnement de préparation a tenté l'installation npm afin de vérifier le workflow, mais l'accès registry du sandbox a expiré avant téléchargement. Aucun `node_modules` ni `package-lock.json` n'est livré. Les versions ci-dessus ont donc été vérifiées depuis les registres/sources officielles, et l'installation effective doit être faite sur le poste de développement.
|
|
|
|
## 5. Vite 8 actualisé
|
|
|
|
Le gabarit bot3 utilisait encore `build.rollupOptions` et la configuration historique `server.hmr`. Avec Vite 8, le nouveau gabarit utilise :
|
|
|
|
```text
|
|
build.rolldownOptions
|
|
server.ws
|
|
```
|
|
|
|
afin de ne pas introduire dès la première application KSP des options désormais dépréciées.
|
|
|
|
Le serveur est configuré ainsi :
|
|
|
|
| Usage | Port | Politique |
|
|
| ------------------------ | ---: | --------- |
|
|
| Vite HTTP | 1430 | strict |
|
|
| WebSocket dev/HMR | 1431 | dédié |
|
|
|
|
`strictPort = true` interdit le basculement silencieux du serveur HTTP vers un autre port.
|
|
|
|
## 6. Destination frontend hors workspace source
|
|
|
|
`tauri.conf.json` possédait déjà :
|
|
|
|
```text
|
|
../../builds/khadhroony-solana-project/ksp-app-config-desk/dist
|
|
```
|
|
|
|
`vite.config.ts` part maintenant de la racine de la crate puis résout **le même chemin contractuel** :
|
|
|
|
```text
|
|
../../builds/khadhroony-solana-project/ksp-app-config-desk/dist
|
|
```
|
|
|
|
Le `root` Vite reste `frontend/`, mais l'utilisation d'un path absolu résolu depuis la crate évite que `build.outDir` ne soit accidentellement interprété relativement à `frontend/`.
|
|
|
|
Cette disposition place le `dist` à côté de la hiérarchie d'artefacts Rust définie par `.cargo/config.toml`, et non dans le workspace source.
|
|
|
|
## 7. Layout frontend
|
|
|
|
Le gabarit concret est :
|
|
|
|
```text
|
|
frontend/
|
|
├── imgs/
|
|
│ ├── logo.png
|
|
│ └── splash.png
|
|
├── sass/
|
|
│ ├── _app.scss
|
|
│ ├── _bootswatch.scss
|
|
│ ├── _fontawesome.scss
|
|
│ ├── _simplebar.scss
|
|
│ ├── _variables.scss
|
|
│ ├── main.scss
|
|
│ └── splash.scss
|
|
├── ts/
|
|
│ ├── main.ts
|
|
│ └── splash.ts
|
|
├── main.html
|
|
└── splash.html
|
|
```
|
|
|
|
Les assets, le thème Pulse, les bases SimpleBar, le splash et l'iconographie reprennent/refondent le gabarit audité de khadhroony-bot3.
|
|
|
|
Le shell `main` ne charge aucun `README.md` et aucun `PRESENTATION.md` n'est créé.
|
|
|
|
## 8. SimpleBar et resize observer
|
|
|
|
Le frontend importe :
|
|
|
|
```text
|
|
resize-observer-polyfill
|
|
simplebar
|
|
```
|
|
|
|
et installe le `ResizeObserver` de compatibilité sur `window` avant l'utilisation effective du shell scrollable.
|
|
|
|
La zone principale utilise `data-simplebar`, ce qui conserve le scrolling visuel du gabarit au lieu de retomber sur la scrollbar WebKitGTK native.
|
|
|
|
## 9. TypeScript et API Tauri
|
|
|
|
`main.ts` et `splash.ts` utilisent `getCurrentWindow()` depuis `@tauri-apps/api/window` afin de valider que les scripts sont bien exécutés dans leur fenêtre Tauri respective.
|
|
|
|
Aucune commande métier n'est encore invoquée.
|
|
|
|
Les futurs bindings TS-RS restent destinés à :
|
|
|
|
```text
|
|
frontend/ts/bindings/ksp_app_config_desk/...
|
|
```
|
|
|
|
`ts-rs` n'est toujours pas ajouté artificiellement : il entrera en `pre.006` avec les premiers DTO réels de bootstrap/state.
|
|
|
|
## 10. Frontend tracing : intégration sans faux contrat KSP
|
|
|
|
Le package officiel associé `@fltsci/tauri-plugin-tracing` est présent avec le plugin Rust, mais cette tranche n'appelle pas encore directement ses helpers `trace/debug/info/...` comme façade applicative KSP.
|
|
|
|
Cette décision évite de faire du target vide actuellement utilisé par le bridge générique un contrat de routage KSP. La tranche `pre.007` introduira le bridge `frontend_log.ts` repris/refondu depuis bot3 avec :
|
|
|
|
- targets KSP whitelistés ;
|
|
- commande centralisée dans `tauri.rs` ;
|
|
- émission finale via `ksp-logging-lib` ;
|
|
- intégration des fonctionnalités console du plugin uniquement lorsqu'elles restent compatibles avec cette ownership.
|
|
|
|
## 11. Splash/main à ce stade
|
|
|
|
Les deux pages sont maintenant bundlables.
|
|
|
|
La fenêtre `splash` reste la fenêtre visible au démarrage et `main` reste initialement invisible comme déclaré depuis `pre.004`. Cette tranche **ne code pas une temporisation splash temporaire** uniquement pour montrer `main` : le lifecycle réel et configurable reste réservé à `pre.008`.
|
|
|
|
Le premier `cargo tauri dev` doit donc au minimum prouver :
|
|
|
|
- lancement du serveur Vite sur `1430` ;
|
|
- WebSocket de développement réservé `1431` ;
|
|
- chargement de `splash.html` dans la WebView ;
|
|
- styles/assets visibles ;
|
|
- absence d'erreur de capability pour le plugin tracing.
|
|
|
|
## 12. Fichiers modifiés
|
|
|
|
| Fichier | Version précédente | Nouvelle version |
|
|
|--------------------------------------------------------|-------------------:|-----------------:|
|
|
| `Cargo.toml` | 66 | 67 |
|
|
| `crates/ksp-app-config-desk/Cargo.toml` | 1 | 2 |
|
|
| `crates/ksp-app-config-desk/src/tauri.rs` | 1 | 2 |
|
|
| `crates/ksp-app-config-desk/capabilities/default.json` | n/a | n/a |
|
|
| `crates/ksp-app-config-desk/README.md` | 1 | 2 |
|
|
| `crates/ksp-app-config-desk/USAGE.md` | 1 | 2 |
|
|
| `crates/ksp-app-config-desk/TODO.md` | 1 | 2 |
|
|
|
|
## 13. Fichiers ajoutés
|
|
|
|
```text
|
|
crates/ksp-app-config-desk/package.json
|
|
crates/ksp-app-config-desk/tsconfig.json
|
|
crates/ksp-app-config-desk/vite.config.ts
|
|
crates/ksp-app-config-desk/frontend/main.html
|
|
crates/ksp-app-config-desk/frontend/splash.html
|
|
crates/ksp-app-config-desk/frontend/ts/main.ts
|
|
crates/ksp-app-config-desk/frontend/ts/splash.ts
|
|
crates/ksp-app-config-desk/frontend/sass/_app.scss
|
|
crates/ksp-app-config-desk/frontend/sass/_bootswatch.scss
|
|
crates/ksp-app-config-desk/frontend/sass/_fontawesome.scss
|
|
crates/ksp-app-config-desk/frontend/sass/_simplebar.scss
|
|
crates/ksp-app-config-desk/frontend/sass/_variables.scss
|
|
crates/ksp-app-config-desk/frontend/sass/main.scss
|
|
crates/ksp-app-config-desk/frontend/sass/splash.scss
|
|
crates/ksp-app-config-desk/frontend/imgs/logo.png
|
|
crates/ksp-app-config-desk/frontend/imgs/splash.png
|
|
deltas/0.1.4/pre.005.md
|
|
```
|
|
|
|
## 14. Fichiers supprimés
|
|
|
|
Aucun.
|
|
|
|
## 15. Contrôles exécutés pendant la préparation
|
|
|
|
- comparaison du scope avec `pre.004-fix.001` ;
|
|
- parsing TOML du workspace et de la crate ;
|
|
- parsing JSON de `package.json`, `tsconfig.json`, `tauri.conf.json` et de la capability ;
|
|
- vérification de `workspace.package.version = "0.1.4-pre.5"` ;
|
|
- vérification de l'absence de `tauri-plugin-log` ;
|
|
- vérification de `tracing:default` dans la capability ;
|
|
- vérification de `1430` strict et `1431` dédié dans Vite ;
|
|
- vérification que le `frontendDist` Tauri et le `frontendDist` résolu par Vite désignent le même répertoire physique ;
|
|
- vérification des headers `file:` / `version:` sur les nouveaux fichiers texte KSP concernés ;
|
|
- vérification de la limite 160 colonnes sur le Rust modifié ;
|
|
- tentative de `npm i -D`, interrompue par timeout réseau du sandbox avant installation.
|
|
|
|
Le sandbox de préparation ne fournit pas Cargo. L'installation npm effective et les validations runtime sont donc à exécuter localement.
|
|
|
|
## 16. Validation locale demandée
|
|
|
|
Après application du delta :
|
|
|
|
```bash
|
|
cd crates/ksp-app-config-desk
|
|
npm i -D
|
|
cd ../..
|
|
|
|
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 -p ksp-app-config-desk
|
|
```
|
|
|
|
Si la syntaxe locale de la CLI Tauri installée ne prend pas `-p`, lancer la commande depuis `crates/ksp-app-config-desk` avec la forme habituelle du poste de développement. Le point important est que Tauri, et non une commande `npm run dev` lancée manuellement, pilote le serveur frontend.
|
|
|
|
À l'écran, le splash doit charger le visuel KSP et afficher son statut frontend. Le passage automatique vers `main` n'est pas encore attendu avant `pre.008`.
|
|
|
|
## 17. Suite
|
|
|
|
Après validation/commit de `pre.005`, `pre.006` introduira le bootstrap backend et `AppState` :
|
|
|
|
- arguments -> `ConfigBootstrapOptions` / registre / management ;
|
|
- première utilisation réelle de `ksp-config-lib` ;
|
|
- initialisation de `ksp-logging-lib` ;
|
|
- ownership durable de `LoggingGuard` ;
|
|
- fallback sûr si Logging Config est invalide ;
|
|
- premiers DTO applicatifs et bindings TS-RS réels.
|