241 lines
8.0 KiB
Markdown
241 lines
8.0 KiB
Markdown
<!-- file: deltas/0.1.4/pre.006.md -->
|
|
<!-- version: 2 -->
|
|
|
|
# `0.1.4-pre.006` — Bootstrap backend, `AppState` et runtime Logging initial
|
|
|
|
## 1. Objectif
|
|
|
|
Cette tranche raccorde pour la première fois `ksp-app-config-desk` aux fondations Config et Logging qu'elle doit valider. Elle reste volontairement bornée au bootstrap backend et au premier contrat Tauri/TS-RS ; les services Documents/Environment/Logging éditable et le bridge frontend logging restent dans les tranches suivantes.
|
|
|
|
La base `0.1.4-pre.5.fix.1` a été validée localement avec installation npm, `cargo fmt`, check workspace, Clippy, tests de l'application, tests Config, `cargo tree` et lancement réel :
|
|
|
|
```bash
|
|
cargo tauri dev -c crates/ksp-app-config-desk/tauri.conf.json
|
|
```
|
|
|
|
Vite a démarré sur `1430` et le binaire Tauri a été lancé depuis le target externe du workspace.
|
|
|
|
## 2. Version technique
|
|
|
|
La tranche modifie le runtime Rust et les dépendances de la crate :
|
|
|
|
```text
|
|
workspace.package.version = "0.1.4-pre.6"
|
|
```
|
|
|
|
Les versions frontend/Tauri applicatives restent `0.1.4` selon la politique courante.
|
|
|
|
## 3. Bootstrap Config
|
|
|
|
`src/bootstrap.rs` construit exclusivement à travers `ksp-config-lib` :
|
|
|
|
```text
|
|
argv complet
|
|
-> ConfigBootstrapOptions::from_args(...)
|
|
-> ConfigFileRegistry::from_args(...)
|
|
-> ConfigDocumentEngine
|
|
-> ConfigManagement
|
|
```
|
|
|
|
L'application ne parse donc pas elle-même `--cfgpath`, `--schemapath` ou `--filemap`, ne lit aucun `KSP_*` directement et ne résout aucun chemin physique Config en dehors de la façade Config.
|
|
|
|
`ConfigManagement` est conservé durablement dans `AppState` pour les services des tranches suivantes.
|
|
|
|
## 4. Bootstrap Logging et fallback de réparation
|
|
|
|
Le chemin nominal est :
|
|
|
|
```text
|
|
ConfigEnvironment::load()
|
|
-> load_resolved_logging_config(None, env)
|
|
-> ResolvedLoggingConfig::into_settings()
|
|
-> ksp_logging_lib::initialize(...)
|
|
-> LoggingGuard
|
|
```
|
|
|
|
`None` sélectionne le `default_profile` du document `std.logging.json`.
|
|
|
|
Pour respecter l'exigence de réparation de Config Desk, une erreur lors du chargement/résolution Logging ou de la préparation du runtime configuré ne condamne pas automatiquement l'application. Tant qu'aucun subscriber global n'a pu être installé, Config Desk tente un fallback transitoire en mémoire :
|
|
|
|
```text
|
|
default_filter : Info
|
|
span_events : Off
|
|
console : stderr / Human
|
|
files : aucun
|
|
persistence : aucune
|
|
```
|
|
|
|
Le fallback :
|
|
|
|
- n'est jamais écrit dans `std.logging.json` ;
|
|
- ne modifie aucun profil utilisateur ;
|
|
- conserve un diagnostic frontend borné ;
|
|
- permet à l'application de rester utilisable pour réparer la configuration ;
|
|
- installe toujours le subscriber via `ksp-logging-lib`, jamais via l'application ou `tauri-plugin-tracing`.
|
|
|
|
Si le fallback lui-même ne peut pas installer le runtime global, le bootstrap échoue explicitement avec `config_desk.logging_bootstrap_failed`.
|
|
|
|
## 5. Ownership `AppState`
|
|
|
|
L'état backend devient :
|
|
|
|
```text
|
|
AppState
|
|
├── ConfigManagement
|
|
└── Mutex<LoggingRuntimeState>
|
|
├── LoggingGuard
|
|
├── active_profile_id
|
|
├── generation = 1
|
|
├── fallback_active
|
|
└── startup_diagnostic
|
|
```
|
|
|
|
Le `LoggingGuard` vit donc avec l'application et prépare le futur `reinitialize()` transactionnel. Le guard et les métadonnées runtime sont regroupés sous le même mutex afin que les futures mutations restent atomiques au niveau applicatif.
|
|
|
|
## 6. Premier contrat Tauri + TS-RS
|
|
|
|
La crate introduit `ts-rs = "^12.0"` au niveau workspace et les premiers DTO applicatifs :
|
|
|
|
```text
|
|
CommandErrorDto
|
|
AppSnapshotDto
|
|
```
|
|
|
|
Les exports sont générés sous :
|
|
|
|
```text
|
|
frontend/ts/bindings/ksp_app_config_desk/dto_common/
|
|
```
|
|
|
|
`CommandErrorDto` projette uniquement :
|
|
|
|
```text
|
|
domain
|
|
code
|
|
message
|
|
```
|
|
|
|
Il ne sérialise jamais automatiquement `Error::context()` ni la chaîne des sources.
|
|
|
|
La première commande réelle est :
|
|
|
|
```text
|
|
get_app_snapshot
|
|
```
|
|
|
|
Elle retourne notamment la version applicative, le nombre de descripteurs Config, le profil Logging actif éventuel, la génération runtime, l'état fallback et le diagnostic de bootstrap sûr.
|
|
|
|
Toutes les annotations `#[tauri::command]` restent centralisées dans `tauri.rs`.
|
|
|
|
## 7. Builder Tauri
|
|
|
|
Le builder reste volontairement découpé :
|
|
|
|
```text
|
|
configure_state
|
|
configure_plugins
|
|
configure_commands
|
|
configure_setup
|
|
```
|
|
|
|
Le plugin tracing conserve `Builder::new()` sans `with_default_subscriber()`. `ksp-logging-lib::initialize()` reste le seul propriétaire de l'installation du subscriber global KSP.
|
|
|
|
## 8. Police du splash bot3
|
|
|
|
L'audit du gabarit bot3 confirme une seule police locale spécifique au splash :
|
|
|
|
```text
|
|
DOS_Amazigh.ttf
|
|
font-family: Dos Amazigh
|
|
```
|
|
|
|
Source auditée :
|
|
|
|
```text
|
|
kb-app-demo-desktop/frontend/fonts/DOS_Amazigh.ttf
|
|
```
|
|
|
|
Destination KSP :
|
|
|
|
```text
|
|
crates/ksp-app-config-desk/frontend/fonts/DOS_Amazigh.ttf
|
|
```
|
|
|
|
Empreinte de la copie bot3 auditée :
|
|
|
|
```text
|
|
SHA-256 a01ff4b5a0d699db7cefcf5336bf0e379ff6fbf0d096087571a13c8782f9aa02
|
|
```
|
|
|
|
Le répertoire `frontend/fonts/` et son manifeste sont ajoutés dès cette tranche. Le style `@font-face` et l'animation/lifecycle final restent associés à `pre.008`, afin de ne pas coupler le bootstrap backend à la finition du splash.
|
|
|
|
## 9. Tests ajoutés
|
|
|
|
Tests unitaires hors `src/` :
|
|
|
|
- le fallback Logging est console-only, stderr, `Info`, sans fichier et sans span lifecycle ;
|
|
- le DTO d'erreur commun ne reprend pas les champs de contexte KSP arbitraires.
|
|
|
|
Les dérives `#[ts(export)]` ajoutent également les tests d'export TS-RS au package.
|
|
|
|
## 10. Dépendances
|
|
|
|
Nouvelles dépendances directes de `ksp-app-config-desk` :
|
|
|
|
```text
|
|
ksp-config-lib
|
|
ksp-logging-lib
|
|
serde
|
|
ts-rs
|
|
```
|
|
|
|
`ts-rs` est centralisé dans `[workspace.dependencies]` avec une contrainte `^12.0`. Aucune dépendance Solana/protocole supplémentaire n'est introduite.
|
|
|
|
## 11. Fichiers
|
|
|
|
| Fichier | Action |
|
|
|-------------------------------------------------------|--------:|
|
|
| `Cargo.toml` | modifié |
|
|
| `crates/ksp-app-config-desk/Cargo.toml` | modifié |
|
|
| `crates/ksp-app-config-desk/src/app_state.rs` | ajouté |
|
|
| `crates/ksp-app-config-desk/src/bootstrap.rs` | ajouté |
|
|
| `crates/ksp-app-config-desk/src/constants.rs` | ajouté |
|
|
| `crates/ksp-app-config-desk/src/dto_common.rs` | ajouté |
|
|
| `crates/ksp-app-config-desk/src/errors.rs` | modifié |
|
|
| `crates/ksp-app-config-desk/src/lib.rs` | modifié |
|
|
| `crates/ksp-app-config-desk/src/tauri.rs` | modifié |
|
|
| `crates/ksp-app-config-desk/unit_tests/bootstrap.rs` | ajouté |
|
|
| `crates/ksp-app-config-desk/unit_tests/dto_common.rs` | ajouté |
|
|
| `crates/ksp-app-config-desk/frontend/fonts/README.md` | ajouté |
|
|
| `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/plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md` | modifié |
|
|
| `deltas/0.1.4/pre.006.md` | ajouté |
|
|
|
|
## 12. Validations à exécuter
|
|
|
|
Depuis la racine du workspace :
|
|
|
|
```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 tauri dev -c crates/ksp-app-config-desk/tauri.conf.json
|
|
```
|
|
|
|
Après `cargo test -p ksp-app-config-desk`, vérifier également que les bindings ont été générés sous :
|
|
|
|
```text
|
|
crates/ksp-app-config-desk/frontend/ts/bindings/ksp_app_config_desk/dto_common/
|
|
```
|
|
|
|
Le lancement desktop nominal doit utiliser le profil Logging par défaut de `config/std.logging.json`. Le diagnostic de fallback sera validé plus profondément avec les écrans Documents/Logging des tranches suivantes.
|
|
|
|
## 13. Suite
|
|
|
|
Après validation, `pre.007` reprend/refond le bridge `frontend_log.ts` de bot3 : targets KSP whitelistés, commande `emit_frontend_log` centralisée dans `tauri.rs` et émission finale exclusivement via `ksp-logging-lib`.
|