# Delta `0.2.6-pre.014` — polish desktop partagé, splash kbot3 et lancement Tauri multi-app ## Base requise ```text 0.2.6-pre.013-fix.002 appliquée workspace.package.version = 0.2.6-pre.13.fix.2 ``` La validation opérateur de la base est intégralement verte : ```text cargo fmt --all OK python3 scripts/audit_rust_workspace_rules.py clean cargo check --workspace OK cargo clippy --workspace --all-targets OK ksp-logging-lib ownership 2/2 OK Wallet Desk release_compliance 4/4 OK cargo test -p ksp-app-wallet-desk OK cargo test --workspace OK smoke Wallet Desk Devnet de pre.013 déjà validé sur fix.001 ``` ## Type de livraison ```text ksp-general-0.2.6-pre.014.zip ``` Le signal technique devient : ```text workspace.package.version = 0.2.6-pre.14 commit = v0.2.6-pre.014 ``` `ksp-app-config-desk/package.json`, `ksp-app-config-desk/tauri.conf.json`, `ksp-app-wallet-desk/package.json` et `ksp-app-wallet-desk/tauri.conf.json` suivent `0.2.6-pre.14`. Aucun tag prerelease. ## Objectifs Cette tranche ne change aucun contrat Wallet métier. Elle ferme les défauts de gabarit desktop remontés avant la documentation finale : ```text en-têtes HTML Khadhroony normalisés splash sans scrollbars fenêtre splash avec fade-in / minimum / fade-out distincts messages généraux défilants en bas messages debug défilants en haut nom/titre central du splash non sélectionnable navigation Config Desk déplacée du header vers une sidebar palette Wallet Desk réalignée sur la référence claire Config Desk lancement Tauri multi-app corrigé et rendu durable prompt 0.2.7 intercalé pour le conteneur binaire .kspwallet ``` ## En-têtes HTML Les quatre fichiers HTML des deux applications possèdent désormais les deux premières lignes normalisées : ```html ``` Les Wallet HTML, qui n'en possédaient pas, démarrent à `version: 1`. ## Splash partagé Le comportement reprend les fonctionnalités génériques éprouvées dans kbot3 sans reprendre ses constantes codées en dur. Les deux Desks utilisent : ```text KSP_DESK_SPLASH_FADE_IN_MS KSP_DESK_SPLASH_MINIMUM_MS KSP_DESK_SPLASH_FADE_OUT_MS ``` Fallbacks : ```text fade-in = 300 ms minimum = 1200 ms pleinement visible fade-out = 300 ms ``` Bornes : ```text fade-in / fade-out <= 10 000 ms minimum <= 60 000 ms ``` La provenance continue d'être résolue uniquement par `ksp-config-lib` : process > `.env` > fallback. Le lifecycle backend devient additif et explicite : ```text frontend ready -> fade-in + attente fade-in -> messages init + minimum pleinement visible -> fade-out + attente fade-out -> show/focus main -> destroy splash ``` `expected_backend_lifecycle_ms` vaut donc : ```text fade_in + minimum + fade_out ``` ## Messages splash Comme dans kbot3 : - le bas du splash contient un feed de messages généraux avec statuts `info/warning/error/success` ; - le haut contient un feed diagnostic uniquement lorsque Rust est compilé avec `debug_assertions` ; - les deux zones auto-scrollent vers le dernier élément ; - leurs scrollbars internes sont masquées visuellement. Le frontend ne reçoit aucun secret dans ces messages. ## Scrollbars et sélection Wallet Desk chargeait auparavant `splash.scss` depuis le module TypeScript, alors que Config Desk le chargeait directement dans ``. Le style pouvait donc arriver après le premier rendu WebView et laisser apparaître momentanément les scrollbars natives. Les deux applications chargent maintenant `sass/splash.scss` directement dans le HTML avant JavaScript. Le CSS fixe également : ```text html/body width/height 100% overflow hidden dès le premier rendu box-sizing border-box container max-width/max-height 100% overflow hidden sur le container scrolling borné aux feeds internes ``` Le logo/image et le nom central appliquent `user-select: none`, `-webkit-user-select: none`, `-webkit-user-drag: none` et `pointer-events: none`. ## Harmonisation du main La navigation Config Desk n'est plus placée horizontalement dans le header. Elle reprend le pattern apprécié de Wallet Desk : ```text header : identité + vue active main : sidebar pills verticale + contenu scrollable footer : inchangé ``` Wallet Desk conserve sa sidebar mais son header revient sur la palette claire de référence de Config Desk au lieu du header sombre divergent. Les `data-view` historiques de Config Desk restent inchangés ; aucune logique d'activation TypeScript n'est réécrite. ## Correction Tauri multi-app Le défaut suivant a été reproduit conceptuellement à partir de la configuration actuelle : ```text commande lancée depuis la racine avec -c Config Desk -> Vite Config Desk démarre sur 1430 -> backend Tauri découvert peut être Wallet Desk ``` La cause est que Tauri v2 traite `-c/--config` comme une configuration **fusionnée avec la configuration par défaut déjà résolue** ; cette option n'est pas un sélecteur de crate/projet. Le workflow KSP devient donc crate-local : ```bash (cd crates/ksp-app-config-desk && cargo tauri dev) (cd crates/ksp-app-wallet-desk && cargo tauri dev) ``` et pour le build : ```bash (cd crates/ && cargo tauri build) ``` Les hooks Tauri sont aussi explicités sous forme objet : ```json { "script": "npm run dev", "cwd": "." } ``` et équivalent pour `npm run build`. Les canaris vérifient maintenant le port, le hook/cwd et le nom du package Rust propre à l'application. `KSP-APP-026`, `KSP-APP-029` et `KSP-APP-034` sont corrigées. Le lancement racine avec `-c crates//tauri.conf.json` est désormais interdit comme méthode de sélection multi-app. Config Desk abandonne aussi son script standalone `check` afin d'aligner les deux applications sur la règle actuelle : l'opérateur n'exécute directement npm que pour installer/mettre à jour les dépendances ; Tauri possède les scripts dev/build. ## Intercalation de `0.2.7` — conteneur binaire `.kspwallet` La question du JSON V1 lisible dans un éditeur est dissociée de `0.2.6` et du futur WebSocket. Décision de cadrage : ```text Base64 seul NON conteneur binaire versionné à auditer/implémenter en 0.2.7 compatibilité lecture JSON V1 obligatoire Wallet Desk modifié fonctionnellement NON attendu ``` Base64 seul reste textuel, trivialement réversible, sans gain cryptographique et avec surcharge de taille. `0.2.7` doit séparer : ```text container_version != format_version logique/cryptographique ``` Ainsi V1 conserve ses semantics VIEW/OWNER et un futur `format_version >= 2` reste disponible pour de vraies évolutions d'autorisation/crypto. Le prompt ajouté est : ```text prompts/012-V0_2_7_START_PROMPT.md ``` WebSocket et les releases suivantes sont décalés d'un numéro dans le roadmap/inventaire/séquence fonctionnelle globale. ## Futur second facteur `docs/IDEAS.md` précise : - `ksp-wallet-lib` restera propriétaire du format, des challenges et de la vérification ; - Wallet Desk devra évoluer lorsqu'un facteur est interactif : OTP, enrollment/recovery, hardware/WebAuthn, consentement externe ; - un seed TOTP stocké uniquement dans le même fichier ne doit pas être assimilé automatiquement à un second facteur indépendant contre un attaquant possédant ce fichier. Aucun V2/OTP/2FA n'est implémenté dans cette tranche. ## Documentation globale Exception justifiée à la règle « ROADMAP seulement au début/à la fin » : l'insertion d'une nouvelle release `0.2.7` change réellement la séquence globale. Sont donc mis à jour : ```text ROADMAP.md docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md docs/architecture/004-COMPONENT_INVENTORY.md ``` `CHANGELOG.md` reste inchangé et sera traité à la clôture. ## Fichiers ajoutés ```text deltas/0.2.6/pre.014.md prompts/012-V0_2_7_START_PROMPT.md ``` ## Fichiers modifiés ```text .env.example Cargo.toml ROADMAP.md crates/ksp-app-config-desk/README.md crates/ksp-app-config-desk/USAGE.md crates/ksp-app-config-desk/frontend/main.html crates/ksp-app-config-desk/frontend/sass/_app.scss crates/ksp-app-config-desk/frontend/sass/splash.scss crates/ksp-app-config-desk/frontend/splash.html crates/ksp-app-config-desk/frontend/ts/splash.ts crates/ksp-app-config-desk/package.json crates/ksp-app-config-desk/src/app_state.rs crates/ksp-app-config-desk/src/splash.rs crates/ksp-app-config-desk/src/tw_splash.rs crates/ksp-app-config-desk/tauri.conf.json crates/ksp-app-config-desk/tests/desktop_contract.rs crates/ksp-app-config-desk/unit_tests/splash.rs crates/ksp-app-wallet-desk/frontend/main.html crates/ksp-app-wallet-desk/frontend/sass/splash.scss crates/ksp-app-wallet-desk/frontend/splash.html crates/ksp-app-wallet-desk/frontend/ts/main.ts crates/ksp-app-wallet-desk/frontend/ts/splash.ts crates/ksp-app-wallet-desk/package.json crates/ksp-app-wallet-desk/src/app_state.rs crates/ksp-app-wallet-desk/src/splash.rs crates/ksp-app-wallet-desk/src/tw_splash.rs crates/ksp-app-wallet-desk/tauri.conf.json crates/ksp-app-wallet-desk/tests/desktop_contract.rs crates/ksp-app-wallet-desk/unit_tests/splash.rs docs/IDEAS.md docs/architecture/004-COMPONENT_INVENTORY.md docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md docs/plans/006-V0_1_4_CONFIG_DESKTOP_PLAN.md docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md docs/rules/RULES_KSP.md prompts/000-README.md prompts/011-V0_2_6_START_PROMPT.md ``` ## Fichiers supprimés ```text aucun ``` ## Contrôles assistant ```text General Rust rule audit clean Rust export completeness audit 0 candidate KSP workspace Rust rule audit clean TOML / JSON parse clean HTML parse + IDs uniques splash TypeScript aucun diagnostic syntaxique local (imports non résolus attendus sans node_modules/bindings) CHANGELOG inchangé ``` Cargo n'est pas disponible dans l'environnement de génération ; compilation, Clippy et tests restent autoritatifs côté opérateur. ## Validation opérateur requise ```bash cargo fmt --all python3 scripts/audit_rust_workspace_rules.py cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-app-config-desk cargo test -p ksp-app-wallet-desk cargo test --workspace ``` Validation visuelle Config Desk : ```bash KSP_DESK_SPLASH_FADE_IN_MS=1500 \ KSP_DESK_SPLASH_MINIMUM_MS=6000 \ KSP_DESK_SPLASH_FADE_OUT_MS=1500 \ bash -lc 'cd crates/ksp-app-config-desk && cargo tauri dev' ``` Vérifier : ```text backend = ksp-app-config-desk Vite = 1430 / HMR = 1431 aucune scrollbar splash fenêtre fade-in puis minimum puis fade-out observables messages généraux en bas diagnostics en haut en debug titre central non sélectionnable navigation verticale dans le main ``` Validation visuelle Wallet Desk : ```bash KSP_DESK_SPLASH_FADE_IN_MS=1500 \ KSP_DESK_SPLASH_MINIMUM_MS=6000 \ KSP_DESK_SPLASH_FADE_OUT_MS=1500 \ KSP_WALLETS_DIRECTORY=var/wallet-desk-pre014 \ bash -lc 'cd crates/ksp-app-wallet-desk && cargo tauri dev' ``` Vérifier : ```text backend = ksp-app-wallet-desk Vite = 1432 / HMR = 1433 aucune scrollbar splash fenêtre mêmes trois phases/messages titre central non sélectionnable header clair cohérent avec Config Desk fonctionnalités Wallet pre.013 non régressées ``` **Ne pas exécuter `cargo tauri build` en `pre.014`.** Le build final reste réservé à `pre.015` et doit rester l'absolue dernière opération de validation de `0.2.6`.