5.6 KiB
Delta 0.2.6-pre.005 — création Wallet et lifecycle de session Rust
Base requise
0.2.6-pre.004-fix.001 appliquée
workspace.package.version = 0.2.6-pre.4.fix.1
Les preuves opérateur de pre.004-fix.001 sont vertes : cargo fmt --all, audit structurel Python, cargo check --workspace, cargo clippy --workspace --all-targets, cargo test -p ksp-app-wallet-desk, cargo test --workspace et cargo tauri dev -c crates/ksp-app-wallet-desk/tauri.conf.json, sans les warnings unused_imports corrigés par le fix.
Type de livraison
ksp-general-0.2.6-pre.005.zip
Cette tranche modifie le runtime Rust/frontend ; le signal technique devient :
workspace.package.version = 0.2.6-pre.5
commit = v0.2.6-pre.005
Aucun tag stable.
Objet
Rendre enfin possible la création d'un vrai .kspwallet depuis Wallet Desk et poser le lifecycle de session backend avant les unlock VIEW/OWNER de wallets existants.
Session Rust durable
AppState possède désormais :
Mutex<WalletSession>
avec les états actuellement matérialisés :
NoSelection
Locked { wallet_id, path, locked_info }
Owner { wallet_id, path, view_enabled, wallet: WalletOwner }
Le chemin complet et WalletOwner restent exclusivement en Rust.
Transitions pre.005 :
select_wallet -> drop session précédente -> inspect -> Locked
create_wallet -> drop session précédente -> create file -> Owner
deselect_wallet -> drop handle/path -> NoSelection
lock_wallet -> drop Owner -> inspect file -> Locked
refresh_wallets -> deselect backend -> refresh inventory
Les unlock VIEW/OWNER de fichiers existants restent hors scope et arrivent en pre.006.
Création native
Le formulaire Create transmet :
filename
OWNER password
VIEW password optionnel
alias interne optionnel
note initiale optionnelle
Rust valide le filename root-scoped puis appelle exclusivement :
ksp_wallet_lib::create_wallet_file_v1
La publication reste no-clobber et la destination reste sous ResolvedWalletConfig::effective_wallets_directory().
Le String OWNER est immédiatement déplacé dans OwnerPassword; le String VIEW optionnel est immédiatement déplacé dans ViewPassword. Les request DTOs de password ne dérivent ni Debug ni Clone.
Après succès, le WalletOwner retourné est conservé dans WalletSession::Owner. La réponse WalletAuthorizedDto expose seulement les informations autorisées nécessaires à l'UI :
wallet_id / filename
capability = owner
format_version
view_enabled
Pubkey
alias optionnel
notes protégées
Aucun password, seed, keypair, secret bytes ou path complet n'est sérialisé.
Frontend et purge
La carte Wallet courant sait maintenant afficher l'état OWNER après création avec fa-lock-open, Pubkey, alias et notes. Le formulaire Create est fonctionnel ; le bouton VIEW active/désactive son champ password.
Les opérations suivantes purgent les inputs password/alias/note et toute projection autorisée devenue invalide :
sélection d'un autre wallet
Lock
Deselect
Refresh
échec de transition
Après une création réussie, l'inventory est relu par list_wallets sans détruire la session OWNER. Un Refresh utilisateur appelle au contraire refresh_wallets, qui purge d'abord la session backend pour garder UI et Rust synchronisés.
Les logs frontend/backend n'incluent ni password, ni alias, ni note. Ils peuvent inclure le filename/root-scoped wallet id et les états/capabilities.
Commandes Tauri
Ajouts :
create_wallet
deselect_wallet
lock_wallet
select_wallet installe désormais réellement la session Locked au lieu de retourner seulement une projection éphémère.
DTOs
Ajouts :
WalletCreateRequestDto
WalletAuthorizedDto
WalletNoteDto
WalletSessionDto
WalletSessionStateDto
WalletCreateRequestDto est strictement frontend -> Rust. Les autres DTOs ne transportent aucun password.
Tests et canaris
La tranche ajoute/étend des canaris pour :
NoSelection sans identité
request de création non Clone/Debug par conception
create/session backend owned
commands create/deselect/lock présentes
form Create présente
passwords absents de WalletAuthorizedDto
purge frontend explicite
inventory locked toujours sans identité protégée
Les tests existants de ksp-wallet-lib restent l'autorité pour la cryptographie, le no-clobber, la persistance et les garanties VIEW/OWNER du format V1.
Dépendances
Aucune dépendance Cargo ou npm n'est ajoutée/modifiée dans cette tranche.
Aucune commande npm directe n'est nécessaire.
Validation opérateur requise
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-app-wallet-desk
cargo test --workspace
KSP_WALLETS_DIRECTORY=var/wallet-desk-pre005 cargo tauri dev -c crates/ksp-app-wallet-desk/tauri.conf.json
Vérification UI recommandée :
Create / Import
-> choisir un filename *.kspwallet neuf
-> saisir OWNER password
-> activer ou non VIEW et saisir son password si activé
-> alias/note optionnels
-> Create wallet
-> vérifier session OWNER + fa-lock-open + Pubkey
-> vérifier apparition dans DataTable
-> Lock -> fa-lock + purge Pubkey/alias/notes
-> Deselect -> NoSelection
-> recréer même filename -> échec no-clobber
-> Refresh pendant OWNER -> session purgée
Toujours aucun cargo tauri build à ce stade.
Suite
Après validation de pre.005, pre.006 ajoutera l'unlock manuel VIEW/OWNER et le provider Config KSP_SECRET_WALLET_PASS_*, sans auto-unlock silencieux.