Files
2026-08-20 14:00:34 +02:00

7.0 KiB
Raw Permalink Blame History

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.wallet exige une extension de ksp-config-lib ;
  • fixe cfg.std.wallet, schema.std.wallet et cfg.composite.ksp-app-wallet-desk ;
  • fixe wallets_directory global avec fallback ${KSP_WALLETS_DIRECTORY:-wallets} et profil Config minimal default pour la composition ;
  • confirme que getBalance stable 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 = null de 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/save ajouté 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.5 fournie 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.py exé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.001 aprè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.