v0.2.6-pre.011

This commit is contained in:
2026-08-21 15:22:42 +02:00
parent 6dcd278459
commit 8ba554306a
14 changed files with 572 additions and 30 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md -->
<!-- version: 25 -->
<!-- version: 26 -->
# Plan `0.2.6` — Wallet Desk
@@ -1538,15 +1538,63 @@ Le correctif `pre.010-fix.001` complète ce contrat : la personne déjà autoris
### `pre.011` — strong VIEW disable/recreate
Objectifs :
Cette tranche branche les primitives fortes déjà possédées par `ksp-wallet-lib` sans dupliquer leur cryptographie dans l'application.
Contrat retenu :
```text
disable_view
recreate_view
security status DTO
VIEW enabled/disabled dans DataTable
modals Bootstrap privilégiés
réouverture VIEW vérifiée
OWNER uniquement -> disable_wallet_view
-> WalletOwner::disable_view
-> nouvelle metadata content key
-> suppression du slot/descriptor VIEW
-> session OWNER conservée avec view_enabled=false
OWNER uniquement -> recreate_wallet_view(new VIEW password)
-> WalletOwner::recreate_view
-> nouvelle metadata content key
-> nouveau slot ID VIEW
-> nouveau credential VIEW
-> session OWNER conservée avec view_enabled=true
```
`recreate_wallet_view` est volontairement disponible même lorsque VIEW est déjà enabled : dans ce cas l'opération remplace fortement l'autorité VIEW courante au lieu d'effectuer une simple rotation du password.
Le résultat IPC est un `WalletViewSecurityStatusDto` sûr et minimal :
```text
wallet_id
capability
view_enabled
configured_secret_candidate_count
```
Il ne contient ni Pubkey, ni alias, ni notes, ni password. Les metadata autorisées déjà détenues par la session OWNER restent côté frontend dans leur projection existante et ne sont pas retransmises pour cette opération.
Le lifecycle réutilise `OwnerOperation` et libère le mutex avant persistence/Argon2. `OwnerOperationContext` distingue l'état VIEW réservé avant l'opération de l'état VIEW résultant afin que le contrôle anti-stale continue à comparer l'état original tout en réinstallant la session OWNER avec le nouveau `view_enabled`.
UX :
```text
Strong disable VIEW -> modal Bootstrap destructif
Strong recreate VIEW -> password + confirmation frontend-only -> modal Bootstrap privilégié
aucun window.confirm / alert / prompt
DataTable rafraîchie après succès
VIEW enabled/disabled immédiatement synchronisé
```
La confirmation du password de recreate reste strictement frontend ; un seul nouveau password traverse IPC. Les `KSP_SECRET_WALLET_PASS_*` ne sont jamais modifiés implicitement.
Garantie explicitement affichée : la révocation forte concerne l'état courant et futur du Wallet ; une copie historique déjà détenue reste hors de la garantie de révocation.
Validation runtime attendue :
```text
OWNER -> strong disable VIEW
Lock -> VIEW unlock impossible
OWNER -> strong recreate VIEW avec nouveau password
Lock -> ancien VIEW password refusé
nouveau VIEW password accepté
Pubkey / alias / notes / OWNER inchangés
```
### `pre.012` — export OWNER fichier