v0.2.6-pre.010-fix.001

This commit is contained in:
2026-08-21 14:53:50 +02:00
parent 4dcdbfaa55
commit 6dcd278459
13 changed files with 280 additions and 45 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md -->
<!-- version: 24 -->
<!-- version: 25 -->
# Plan `0.2.6` — Wallet Desk
@@ -1515,14 +1515,16 @@ Objectifs réalisés :
```text
rotate OWNER password depuis une session OWNER
rotate VIEW password depuis une session OWNER lorsque VIEW est activé
self-rotate VIEW password depuis une session VIEW autorisée
double saisie/confirmation uniquement dans le frontend
un seul nouveau password traverse IPC vers Rust
conversion immédiate en OwnerPassword / ViewPassword
réutilisation du lifecycle OwnerOperation hors mutex pendant Argon2 + persistence
wallet.state_conflict => purge du handle stale + retour Locked + re-unlock OWNER
session OWNER conservée après succès ou échec non conflictuel
wallet.state_conflict => purge du handle stale + retour Locked + re-unlock de la capacité initiatrice
session OWNER ou VIEW conservée après succès ou échec non conflictuel
Pubkey, alias, notes et identité Solana inchangés
VIEW rotation sans ancien password VIEW conformément au contrat WalletOwner
VIEW rotation administrative sans ancien password VIEW conformément au contrat WalletOwner
VIEW self-rotation conformément au contrat WalletView
secrets Config volontairement inchangés après rotation
message UI explicite avant Lock/unlock configuré
redaction/canaries request-only
@@ -1530,7 +1532,9 @@ redaction/canaries request-only
La rotation ne choisit ni ne modifie implicitement un `KSP_SECRET_WALLET_PASS_*`. Plusieurs candidats Config peuvent viser le même filename et leur politique de maintenance appartient à Config/opérateur. Wallet Desk expose donc seulement le compteur sûr déjà existant et avertit qu'un candidat contenant l'ancien password cessera de fonctionner après Lock tant qu'il n'aura pas été mis à jour.
Les deux commandes retournent la projection OWNER autorisée après succès afin de conserver une session cohérente sans réexposer de credential. Le password de confirmation reste strictement local au frontend et n'est jamais envoyé à Rust.
`rotate_owner_password` retourne une projection OWNER. `rotate_view_password` conserve la capacité initiatrice : projection OWNER pour l'administration OWNER, projection VIEW pour la self-rotation VIEW. Aucun credential n'est réexposé. Le password de confirmation reste strictement local au frontend et n'est jamais envoyé à Rust.
Le correctif `pre.010-fix.001` complète ce contrat : la personne déjà autorisée en VIEW peut changer son propre password VIEW via `WalletView::rotate_view_password`, tandis qu'OWNER conserve le pouvoir administratif de remplacer le password VIEW sans connaître l'ancien. Wallet Desk réserve `ViewOperation` pendant l'Argon2/persistence async, refuse les complétions stale et applique au chemin VIEW la même politique de recovery `wallet.state_conflict` que pour OWNER.
### `pre.011` — strong VIEW disable/recreate