Files
khadhroony-solana-project/deltas/0.2.6/pre.001.md
2026-08-20 14:00:34 +02:00

223 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- 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.