386 lines
12 KiB
Markdown
386 lines
12 KiB
Markdown
<!-- file: deltas/0.2.6/pre.014.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# 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
|
|
<!-- file: ... -->
|
|
<!-- version: N -->
|
|
```
|
|
|
|
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 `<head>`. 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/<app> && 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/<app>/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`.
|