7.0 KiB
Delta 0.2.6-pre.001 — audit Wallet Desk, composition, UX, sécurité et sizing
Base requise
Release stable attendue :
v0.2.5
L'archive stable fournie confirme workspace.package.version = 0.2.5 avant ouverture, six crates membres et l'absence de ksp-app-wallet-desk/std.wallet.
Type de livraison
ksp-general-0.2.6-pre.001.zip
L'archive d'échange est un delta applicable depuis la racine de v0.2.5. Elle contient uniquement les fichiers ajoutés/modifiés par cette tranche.
Objet
Ouvrir 0.2.6 — Wallet Desk sans commencer l'implémentation UI lourde. Le gate :
- réaudite Config Desk comme template Tauri sans le copier aveuglément ;
- réaudite les APIs finales Config, Wallet, Transport et Logging ;
- confirme qu'un vrai
std.walletexige une extension deksp-config-lib; - fixe
cfg.std.wallet,schema.std.walletetcfg.composite.ksp-app-wallet-desk; - fixe
wallets_directoryglobal avec fallback${KSP_WALLETS_DIRECTORY:-wallets}et profil Config minimaldefaultpour la composition ; - confirme que
getBalancestable fournit lamports + contexte RPC sans nouveau wrapper ; - définit runtime state, screen map, command map et DTO map ;
- définit inventory/path safety, symlink policy et comportement root absent ;
- définit le threat model desktop/password/export/state conflict ;
- retient import, metadata OWNER, rotations, disable/recreate VIEW et export fichier dans
0.2.6; - exclut un écran de signature arbitraire et tout prix offchain ;
- réaudite les dépendances Tauri/frontend actuelles ;
- impose une CSP explicite à Wallet Desk au lieu de recopier
csp = nullde Config Desk ; - regranularise le forecast initial jusqu'à
pre.013.
Décisions principales
Config
cfg.std.wallet
schema.std.wallet
cfg.composite.ksp-app-wallet-desk
component_id = logging / transport / wallet
Shape prévu :
wallets_directory global
+ default_profile = default
+ profiles = [{ profile_id = default }]
Le profil minimal est requis par le moteur composite réel ; aucune donnée Wallet sensible n'entre dans Config.
Inventory
root = ResolvedWalletConfig::wallets_directory
non récursif
.kspwallet exact
regular file only
symlink excluded
root missing = état explicite, aucune création silencieuse
wallet_id = filename validé mono-composant
aucun alias dérivé du filename
Lifecycle
NoSelection -> Locked -> ViewOpen/OwnerOpen
WalletView/WalletOwner restent en Rust. Lock/deselect/state conflict drop le handle et purgent les projections protégées frontend.
Balance
authorized Wallet handle
-> Pubkey Rust
-> HttpTransportPool::get_balance(role=default, config=None)
-> lamports + slot + api_version
-> safe DTO
Sécurité Tauri
- CSP locale restrictive obligatoire ;
- capabilities minimales ;
- aucun password dans storage/log/Debug ordinaire ;
- aucun export secret IPC/clipboard ;
- export fichier OWNER uniquement ;
- native Dialog
open/saveajouté seulement lorsqu'il est consommé ; - Bootstrap modals pour confirmations privilégiées ;
- aucun plugin filesystem nécessaire.
Audit externe au 2026-08-20
Constats courants :
@tauri-apps/api 2.11.1
@tauri-apps/plugin-dialog 2.7.2
@fltsci/tauri-plugin-tracing 0.3.4
Bootstrap 5.3.8
Les ranges existants de Config Desk restent cohérents, mais Wallet Desk démarre sans DataTables/SimpleBar/resize polyfill. Le plugin Dialog sera réaudité au moment exact de son ajout.
Prévision souple révisée
pre.001 audit + Config/Wallet/Transport/Tauri + UX + threat model + sizing
pre.002 crate Tauri + frontend shell + splash/main + logging bridge + CSP + ports
pre.003 cfg.std.wallet + schema + ResolvedWalletConfig + composite Wallet Desk
pre.004 runtime state + inventory/path safety + locked inspection + DTO foundation
pre.005 create .kspwallet + OWNER session + explicit root-directory flow
pre.006 unlock VIEW/OWNER + lock/deselect + authorized details + purge guarantees
pre.007 Transport pool from composite + getBalance + diagnostics/refresh
pre.008 native Dialog open + inspect/import CLI JSON/Base58 + destination no-clobber
pre.009 OWNER metadata administration alias/notes + state_conflict UX
pre.010 rotations OWNER/VIEW + disable/recreate VIEW + capability/security UX
pre.011 OWNER file export + save picker + privileged confirmation + leak audit
pre.012 deterministic integration tests + frontend security checks + Devnet smoke opt-in + compliance
pre.013 README/USAGE/docs/graphs + dependency audit + production Tauri build candidate + prompt 0.2.7
rel.001 publication stable stricte
Le plan détaillé est docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md.
Fichiers ajoutés
docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md
deltas/0.2.6/pre.001.md
Fichiers modifiés
Cargo.toml
ROADMAP.md
docs/000-README.md
docs/plans/000-README.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
Fichiers volontairement inchangés
CHANGELOG.md
.env.example
config/**
crates/**
docs/architecture/**
docs/formats/**
docs/validation/**
std.wallet, le composite et la crate Tauri sont planifiés mais non créés dans le gate documentaire.
Version technique
Conformément à VERSION_WORKFLOW.md, le non-fix prerelease ouvre :
workspace.package.version = 0.2.6-pre.1
L'identifiant de commit reste :
v0.2.6-pre.001
Aucun tag Git n'est créé avant la release stable finale.
Validations exécutées avant modification
- archive stable
v0.2.5fournie extraite et auditée ; - documents internes obligatoires relus ;
- APIs Config/Wallet/Transport/Logging/Config Desk réauditées ;
- archive bot3 inspectée uniquement comme référence historique ;
python3 scripts/audit_rust_workspace_rules.pyexécuté sur la base stable :General Rust rule audit: clean,KSP workspace Rust rule audit: clean;- le même audit structurel réexécuté sur l’état candidat
pre.001après matérialisation :General Rust rule audit: clean,KSP workspace Rust rule audit: clean; - audit externe Tauri/frontend actuel réalisé.
Validations tentées mais impossibles dans le sandbox
Le binaire cargo n'est pas installé dans le sandbox. Les trois commandes suivantes ont été tentées et ont échoué avec code 127 :
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
Aucune de ces commandes n'est déclarée réussie.
Validation opérateur requise avant commit
Après application du delta :
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
cargo check --workspace
cargo clippy --workspace --all-targets
Comme pre.001 ne crée aucune crate/frontend, aucun npm ni build Tauri n'est requis dans cette tranche.
Le gate pre.001 n'est fermé qu'après réception de ces preuves opérateur vertes. Aucun travail pre.002 ne doit être engagé avant ce checkpoint.