223 lines
7.0 KiB
Markdown
223 lines
7.0 KiB
Markdown
<!-- file: deltas/0.2.6/pre.001.md -->
|
||
<!-- version: 1 -->
|
||
|
||
# Delta `0.2.6-pre.001` — audit Wallet Desk, composition, UX, sécurité et sizing
|
||
|
||
## Base requise
|
||
|
||
Release stable attendue :
|
||
|
||
```text
|
||
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
|
||
|
||
```text
|
||
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
|
||
|
||
```text
|
||
cfg.std.wallet
|
||
schema.std.wallet
|
||
cfg.composite.ksp-app-wallet-desk
|
||
component_id = logging / transport / wallet
|
||
```
|
||
|
||
Shape prévu :
|
||
|
||
```text
|
||
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
|
||
|
||
```text
|
||
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
|
||
|
||
```text
|
||
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
|
||
|
||
```text
|
||
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 :
|
||
|
||
```text
|
||
@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
|
||
|
||
```text
|
||
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
|
||
|
||
```text
|
||
docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md
|
||
deltas/0.2.6/pre.001.md
|
||
```
|
||
|
||
## Fichiers modifiés
|
||
|
||
```text
|
||
Cargo.toml
|
||
ROADMAP.md
|
||
docs/000-README.md
|
||
docs/plans/000-README.md
|
||
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
||
```
|
||
|
||
## Fichiers volontairement inchangés
|
||
|
||
```text
|
||
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 :
|
||
|
||
```text
|
||
workspace.package.version = 0.2.6-pre.1
|
||
```
|
||
|
||
L'identifiant de commit reste :
|
||
|
||
```text
|
||
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` :
|
||
|
||
```bash
|
||
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 :
|
||
|
||
```bash
|
||
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.
|