v0.2.6-pre.012

This commit is contained in:
2026-08-21 16:22:16 +02:00
parent 8ba554306a
commit ecbd6b746d
21 changed files with 634 additions and 94 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md -->
<!-- version: 26 -->
<!-- version: 27 -->
# Plan `0.2.6` — Wallet Desk
@@ -1597,20 +1597,58 @@ nouveau VIEW password accepté
Pubkey / alias / notes / OWNER inchangés
```
Validation opérateur `pre.011` : **verte** le 21 août 2026. `fmt`, audit Rust KSP, `cargo check --workspace`, Clippy sans warning, tests Wallet Desk et workspace complet passent. Le runtime Tauri confirme `view_enabled=true -> strong disable -> false`, puis `strong recreate -> true`; l'ancien credential VIEW est refusé après recreate et le nouveau est accepté.
### `pre.012` — export OWNER fichier
Objectifs :
Cette tranche expose uniquement l'adapter fichier déjà possédé par `WalletOwner`; Wallet Desk ne sérialise jamais lui-même la keypair.
`WalletTransferFormatDto` quitte `wallet_import.rs` pour un module Desk commun `wallet_transfer.rs`, puisque le même contrat est désormais consommé par import et export. Les codes IPC restent inchangés.
Contrat retenu :
```text
plugin Dialog save minimal
choix CLI JSON/Base58
confirmation OWNER
export_transfer_file
no-clobber
aucun export texte/clipboard
leak audit ciblé
OWNER session requise avant ouverture du save picker
frontend -> Rust : format uniquement
Rust -> native save picker : destination locale
Rust -> WalletOwner::export_transfer_file(destination, format)
Wallet -> création atomique no-clobber du fichier secret
Rust -> frontend : wallet_id + format + basename uniquement
```
Formats disponibles :
```text
Solana CLI JSON
Solana keypair Base58 complet
```
Le frontend ne reçoit jamais :
```text
chemin complet de destination
bytes de keypair
Base58 de keypair
JSON de keypair
password OWNER
handle WalletOwner
```
L'opération réutilise `OwnerOperation` afin de déplacer le handle OWNER hors du mutex pendant l'écriture async. Une annulation du picker ne touche pas la session. Une erreur d'I/O ou `destination_exists` restaure la session OWNER ; la primitive Wallet conserve le no-clobber et les permissions privées best-effort sur Unix.
UX :
```text
format CLI JSON / Base58
modal Bootstrap avertissant qu'il s'agit d'une keypair non chiffrée
confirmation -> save picker natif Rust
aucun export texte
aucun clipboard
aucun chemin arbitraire fourni par le frontend
status final avec basename seulement
```
Le nom de destination et le contenu secret ne sont pas journalisés. Les logs persistants ne contiennent que `wallet_id`, format et statut de l'opération.
### `pre.013` — intégration, compliance, sécurité et smoke
Objectifs :