v0.2.6-pre.001

This commit is contained in:
2026-08-20 14:00:34 +02:00
parent 8c65096f4c
commit 136ea6d76e
9 changed files with 1371 additions and 13 deletions

222
deltas/0.2.6/pre.001.md Normal file
View File

@@ -0,0 +1,222 @@
<!-- 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.