v0.2.6-pre.013
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/000-README.md -->
|
||||
<!-- version: 48 -->
|
||||
<!-- version: 49 -->
|
||||
|
||||
# Plans KSP
|
||||
|
||||
@@ -21,7 +21,7 @@ Un plan décrit le périmètre, les décisions déjà acquises, les questions ou
|
||||
- [`010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md`](010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md) — plan historique clôturé de la release stable `0.2.3 — HTTP Transactions`, ouvert par `pre.001`, exécuté jusqu'à `pre.009` puis publié par `rel.001`; il couvre les 11 méthodes, la classification `8 Read / 2 WriteSubmission / 1 Simulation`, `KSP-TRANSPORT-007`, le no-resend et la préparation de `0.2.4`.
|
||||
- [`011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md`](011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md) — plan historique clôturé de la release stable `0.2.4`, ouvert par `pre.001`, exécuté jusqu’à `pre.009`, complété par le fix documentaire Wallet `pre.009-fix.001` puis publié par `rel.001`; il couvre les 10 Blocks + 5 Economics et la compliance finale `52/52 + 14/14` sous `KSP-TRANSPORT-007`.
|
||||
- [`012-V0_2_5_WALLET_FOUNDATION_PLAN.md`](012-V0_2_5_WALLET_FOUNDATION_PLAN.md) — plan historique clôturé de la release stable `0.2.5 — Wallet foundation`, ouvert par `pre.001`, livré jusqu’à `pre.010`, renforcé par `pre.010-fix.001`–`fix.003` pour Dalek 3 et la normalisation Rust/audit structurel, puis publié par `rel.001`; il couvre `.kspwallet` V1, VIEW/OWNER, crypto, persistence, administration, transfer et compliance.
|
||||
- [`013-V0_2_6_WALLET_DESK_PLAN.md`](013-V0_2_6_WALLET_DESK_PLAN.md) — plan actif de `0.2.6 — Wallet Desk`, ouvert par `pre.001`; `pre.002` matérialise le shell Tauri et `pre.003` la composition `std.wallet`/composite ainsi que la préparation des répertoires. Le plan fixe aussi secrets `KSP_SECRET_WALLET_PASS_*`, inventory DataTables/path safety, lifecycle VIEW/OWNER, screen/command/DTO maps, balance HTTP, administration retenue et forecast souple détaillé jusqu’à `pre.014`, incluant la documentation finale et le prompt `0.2.7`.
|
||||
- [`013-V0_2_6_WALLET_DESK_PLAN.md`](013-V0_2_6_WALLET_DESK_PLAN.md) — plan actif de `0.2.6 — Wallet Desk`, ouvert par `pre.001`; `pre.002` matérialise le shell Tauri et `pre.003` la composition `std.wallet`/composite ainsi que la préparation des répertoires. Le plan fixe aussi secrets `KSP_SECRET_WALLET_PASS_*`, inventory DataTables/path safety, lifecycle VIEW/OWNER, screen/command/DTO maps, balance HTTP, administration retenue et forecast souple détaillé jusqu’à `pre.015`, avec `pre.014` réservé au polish Bootstrap/splashscreen puis `pre.015` à la documentation finale, au prompt `0.2.7` et au build Tauri final.
|
||||
|
||||
Le `pre.001` de chaque release fonctionnelle peut introduire son propre plan détaillé lorsque la release s'ouvre.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md -->
|
||||
<!-- version: 27 -->
|
||||
<!-- version: 28 -->
|
||||
|
||||
# Plan `0.2.6` — Wallet Desk
|
||||
|
||||
@@ -1651,21 +1651,24 @@ Le nom de destination et le contenu secret ne sont pas journalisés. Les logs pe
|
||||
|
||||
### `pre.013` — intégration, compliance, sécurité et smoke
|
||||
|
||||
Objectifs :
|
||||
Cette tranche consolide les preuves transversales sans ajouter de nouvelle capacité Wallet Desk métier. Elle matérialise :
|
||||
|
||||
```text
|
||||
tests déterministes de composition Config -> Wallet -> Transport
|
||||
inventory/path adversarial
|
||||
dto/debug/log secret audit
|
||||
frontend state purge/security checks
|
||||
capabilities audit
|
||||
cargo tree / inverse tree pertinents
|
||||
Devnet smoke opt-in
|
||||
validation/009 ou numéro courant dédié à 0.2.6
|
||||
tests déterministes de composition et de frontières release-wide
|
||||
inventory/path adversarial renforcé : non récursif, suffixe exact, traversal/absolute/nested rejetés
|
||||
audit DTO/IPC : aucun secret, keypair, endpoint URL ou path arbitraire projeté vers le frontend
|
||||
audit frontend : aucun filesystem/dialog plugin guest, aucun fetch/WebSocket, aucun storage/clipboard secret
|
||||
audit capabilities : core:default + tracing:default uniquement
|
||||
audit dependency firewall Wallet Desk : pas de dépendance Solana/protocole directe hors crates KSP
|
||||
smoke Devnet opt-in Config -> Wallet -> Transport -> getBalance depuis la surface Wallet Desk
|
||||
matrice docs/validation/009-V0_2_6_WALLET_DESK_COMPLIANCE.md
|
||||
cargo tree / inverse tree opérateur
|
||||
workspace checkpoint complet
|
||||
```
|
||||
|
||||
Cette tranche doit produire la preuve que les surfaces ajoutées fonctionnent ensemble avant la documentation de clôture.
|
||||
Le smoke live est volontairement `ignored` dans `cargo test --workspace`. Il doit être déclenché explicitement avec un `KSP_WALLETS_DIRECTORY` dédié ; le test charge ce paramètre uniquement via `ConfigEnvironment`, crée un `.kspwallet` réel dans le répertoire effectif du profil composite, ouvre VIEW, exécute `getBalance` via le Transport composite puis supprime le wallet canari. Ainsi le smoke cross-crates vit dans la surface d'orchestration Wallet Desk et non dans Config ou Transport.
|
||||
|
||||
Cette tranche doit produire la preuve que les surfaces ajoutées fonctionnent ensemble avant le polish visuel `pre.014` et la documentation finale `pre.015`.
|
||||
|
||||
### `pre.014` — polish gabarit Bootstrap et splashscreen
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/000-README.md -->
|
||||
<!-- version: 14 -->
|
||||
<!-- version: 15 -->
|
||||
|
||||
# Validations KSP
|
||||
|
||||
@@ -18,3 +18,5 @@ Documents :
|
||||
- [`006-V0_2_3_HTTP_TRANSACTIONS.md`](006-V0_2_3_HTTP_TRANSACTIONS.md) — matrice finale validée de `0.2.3`, 11 wrappers Transactions, sécurité write/simulation, réaudit 52+14, `KSP-TRANSPORT-007` 37/37, graphes Cargo et deux smokes Devnet passés avant publication stable.
|
||||
- [`007-V0_2_4_HTTP_FINAL_COMPLIANCE.md`](007-V0_2_4_HTTP_FINAL_COMPLIANCE.md) — matrice finale validée de `0.2.4`, inventaire exact 52 current + 14 Deprecated, preuve typed 52/52, audit SIMD final, `KSP-TRANSPORT-007`, workspace complet et deux smokes Devnet passés avant publication stable.
|
||||
- [`008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md) — matrice finale validée de la release stable `0.2.5`, threat model V1, canaris adversariaux, reproduction externe des vecteurs, audit de frontières, normalisation Rust/audit structurel, graphes Cargo et checkpoint final `pre.010-fix.003` vert.
|
||||
|
||||
- [`009-V0_2_6_WALLET_DESK_COMPLIANCE.md`](009-V0_2_6_WALLET_DESK_COMPLIANCE.md) — matrice de compliance ouverte en `0.2.6-pre.013`, couvrant composition Config/Wallet/Transport, frontières DTO/IPC/frontend, path/inventory adversarial, capabilities Tauri, dependency firewall, graphes Cargo et smoke Devnet Wallet Desk opt-in.
|
||||
|
||||
234
docs/validation/009-V0_2_6_WALLET_DESK_COMPLIANCE.md
Normal file
234
docs/validation/009-V0_2_6_WALLET_DESK_COMPLIANCE.md
Normal file
@@ -0,0 +1,234 @@
|
||||
<!-- file: docs/validation/009-V0_2_6_WALLET_DESK_COMPLIANCE.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Validation `0.2.6` — Wallet Desk integration / compliance / security
|
||||
|
||||
## 1. Objet
|
||||
|
||||
Cette matrice est ouverte par `0.2.6-pre.013` comme preuve durable de composition et de conformité de `ksp-app-wallet-desk`. Elle sera complétée en `pre.015` avec les résultats finaux, le polish visuel de `pre.014`, la documentation de clôture et le dernier build Tauri.
|
||||
|
||||
Elle ne remplace ni le plan [`../plans/013-V0_2_6_WALLET_DESK_PLAN.md`](../plans/013-V0_2_6_WALLET_DESK_PLAN.md), ni la matrice Wallet V1 [`008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md`](008-V0_2_5_WALLET_SECURITY_COMPLIANCE.md), ni les deltas `0.2.6`.
|
||||
|
||||
Le gate `pre.013` porte sur :
|
||||
|
||||
```text
|
||||
composition Config -> Wallet -> Transport
|
||||
inventory/path adversarial
|
||||
DTO / IPC / frontend secret boundaries
|
||||
capabilities Tauri
|
||||
KSP dependency ownership
|
||||
smoke Devnet opt-in Wallet Desk
|
||||
Cargo tree / inverse tree
|
||||
workspace checkpoint complet
|
||||
```
|
||||
|
||||
## 2. Surface intégrée auditée
|
||||
|
||||
Au démarrage de `pre.013`, Wallet Desk a déjà validé en runtime :
|
||||
|
||||
```text
|
||||
Config composite logging + wallet + transport
|
||||
répertoire Wallet effectif Config-owned
|
||||
inventory locked .kspwallet
|
||||
create
|
||||
import Solana CLI JSON / Base58
|
||||
unlock manuel et Config-owned VIEW / OWNER
|
||||
getBalance via Transport
|
||||
alias / notes OWNER
|
||||
rotation OWNER
|
||||
rotation VIEW par OWNER
|
||||
self-rotation VIEW
|
||||
strong disable/recreate VIEW
|
||||
export OWNER Solana CLI JSON / Base58
|
||||
no-clobber export
|
||||
```
|
||||
|
||||
Le checkpoint opérateur `pre.012` du 21 août 2026 est vert : `cargo fmt`, audit Python, `cargo check`, Clippy sans warning, tests Wallet Desk, tests workspace complets et parcours `cargo tauri dev`. Le runtime confirme aussi l'export des deux formats, le refus `wallet.destination_exists` sans invalidation de la session OWNER et l'annulation du save picker sans effet.
|
||||
|
||||
## 3. Matrice de frontières
|
||||
|
||||
| Frontière | Contrat `0.2.6` | Preuve durable |
|
||||
|---|---|---|
|
||||
| Frontend -> Config | aucun accès direct env/.env | `release_compliance::backend_keeps_config_wallet_transport_and_logging_ownership_boundaries` + ownership Config |
|
||||
| Frontend -> Wallet secret | passwords uniquement request-only ; jamais de keypair en IPC | `desktop_security` + `release_compliance::response_dtos_keep_secret_key_material_out_of_ipc` |
|
||||
| Frontend -> filesystem | aucun path arbitraire ; picker natif Rust | tests import/export + capability audit |
|
||||
| Frontend -> réseau Solana | aucun `fetch`/WebSocket/RPC direct | `release_compliance::frontend_has_no_direct_filesystem_network_or_secret_persistence_surface` |
|
||||
| Wallet Desk -> Solana crates | aucune dépendance protocole directe | `release_compliance::wallet_desk_dependency_firewall_and_tauri_capabilities_are_minimal` |
|
||||
| Wallet Desk -> HTTP | `ksp-onchain-transport-lib` uniquement | manifest + smoke Devnet |
|
||||
| Wallet Desk -> Wallet crypto | `ksp-wallet-lib` uniquement | manifest + feature canaries |
|
||||
| Wallet Desk -> logging | façade `ksp-logging-lib` + adapter `tauri-plugin-tracing` | source audit + workspace logging canary |
|
||||
| locked -> frontend | format/version/VIEW enabled seulement | `desktop_security` |
|
||||
| VIEW/OWNER handles | Rust-only `AppState` | session/security tests |
|
||||
| export | OWNER-only, file direct, no-clobber | `desktop_security` + runtime `pre.012` |
|
||||
|
||||
## 4. Inventory / path adversarial
|
||||
|
||||
`pre.013` renforce le canari déterministe d'inventory :
|
||||
|
||||
```text
|
||||
seuls les fichiers réguliers directs *.kspwallet sont candidats
|
||||
suffixe exact et sensible à la casse
|
||||
backup.kspwallet.bak ignoré
|
||||
upper.KSPWALLET ignoré
|
||||
nested/hidden.kspwallet ignoré
|
||||
répertoire nommé *.kspwallet ignoré
|
||||
symlink *.kspwallet ignoré
|
||||
sélection ../... rejetée
|
||||
sélection ..\... rejetée
|
||||
sélection absolue rejetée
|
||||
sélection nested/... rejetée
|
||||
sélection suffixe non exact rejetée
|
||||
sélection vide rejetée
|
||||
```
|
||||
|
||||
La sélection continue de réinspecter le fichier verrouillé au moment de l'ouverture de session ; l'inventory n'est jamais utilisé comme autorité de sécurité durable.
|
||||
|
||||
## 5. DTO / IPC / frontend audit
|
||||
|
||||
Les réponses IPC auditées ne doivent jamais contenir :
|
||||
|
||||
```text
|
||||
password
|
||||
secret_key
|
||||
private_key
|
||||
keypair_bytes
|
||||
ciphertext
|
||||
```
|
||||
|
||||
Les projections import/export ne contiennent aucun path complet. `WalletAuthorizedDto` peut exposer Pubkey/alias/notes uniquement après VIEW/OWNER ; le locked inventory ne peut jamais les exposer.
|
||||
|
||||
Le frontend doit rester sans :
|
||||
|
||||
```text
|
||||
@tauri-apps/plugin-dialog
|
||||
@tauri-apps/plugin-fs
|
||||
window.alert / confirm / prompt
|
||||
localStorage / sessionStorage
|
||||
navigator.clipboard pour secret
|
||||
fetch / XMLHttpRequest / WebSocket / EventSource
|
||||
KSP_SECRET_WALLET_PASS_* concret
|
||||
sourcePath / destinationPath
|
||||
```
|
||||
|
||||
Les opérations natives import/export utilisent le plugin Dialog côté Rust, sans permission Dialog/FS accordée au guest frontend.
|
||||
|
||||
## 6. Capabilities Tauri
|
||||
|
||||
La capability Wallet Desk doit rester exactement :
|
||||
|
||||
```text
|
||||
core:default
|
||||
tracing:default
|
||||
```
|
||||
|
||||
Aucune permission `dialog:*` ou `fs:*` n'est accordée au frontend. La CSP reste `null` tant qu'un besoin concret n'impose pas une politique spécifique ; `pre.013` n'ajoute aucune ressource réseau frontend.
|
||||
|
||||
## 7. Dependency firewall
|
||||
|
||||
Dépendances KSP directes attendues de Wallet Desk :
|
||||
|
||||
```text
|
||||
ksp-config-lib
|
||||
ksp-core-lib
|
||||
ksp-logging-lib
|
||||
ksp-onchain-transport-lib
|
||||
ksp-wallet-lib
|
||||
```
|
||||
|
||||
Aucune dépendance directe `solana-*`, `reqwest` ou `tracing` n'est admise dans le manifest Wallet Desk. `tauri-plugin-tracing` reste l'adapter Tauri justifié ; l'émission applicative reste via `ksp-logging-lib`.
|
||||
|
||||
Commandes opérateur `pre.013` :
|
||||
|
||||
```bash
|
||||
cargo tree -p ksp-app-wallet-desk --depth 1
|
||||
cargo tree -p ksp-app-wallet-desk -d
|
||||
cargo tree -i ksp-wallet-lib
|
||||
cargo tree -i ksp-onchain-transport-lib
|
||||
cargo tree -i tauri-plugin-dialog
|
||||
```
|
||||
|
||||
Le résultat attendu est qu'aucune nouvelle dépendance Solana/protocole directe ne soit introduite par `pre.013`; le seul changement de feature est `tokio/macros` requis pour le smoke opt-in de la crate application.
|
||||
|
||||
## 8. Smoke Devnet Wallet Desk
|
||||
|
||||
Le smoke live est :
|
||||
|
||||
```text
|
||||
Config composite devnet
|
||||
-> resolve Wallet profile Composite
|
||||
-> ConfigEnvironment
|
||||
-> répertoire Wallet effectif
|
||||
-> create .kspwallet réel VIEW+OWNER
|
||||
-> inspect locked
|
||||
-> open VIEW
|
||||
-> resolve Transport profile Composite
|
||||
-> HttpTransportPool
|
||||
-> getBalance(confirmed) sur la Pubkey du wallet créé
|
||||
-> suppression du .kspwallet canari
|
||||
```
|
||||
|
||||
Il est volontairement `ignored` dans la suite déterministe afin d'éviter une dépendance réseau lors de `cargo test --workspace`.
|
||||
|
||||
Commande recommandée :
|
||||
|
||||
```bash
|
||||
KSP_WALLETS_DIRECTORY=var/wallet-desk-pre013-smoke \
|
||||
cargo test -p ksp-app-wallet-desk \
|
||||
--test wallet_desk_devnet_smoke \
|
||||
-- --ignored --nocapture
|
||||
```
|
||||
|
||||
Ce placement est intentionnel : le smoke cross-crates `Config -> Wallet -> Transport -> Devnet getBalance` appartient à la surface d'orchestration Wallet Desk. Il ne doit pas migrer dans `ksp-config-lib` ou `ksp-onchain-transport-lib`.
|
||||
|
||||
Un solde `0` est un succès valide ; le gate vérifie l'exécution RPC et un contexte de slot non nul, pas un montant particulier.
|
||||
|
||||
## 9. Gate déterministe `pre.013`
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
python3 scripts/audit_rust_workspace_rules.py
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo test -p ksp-app-wallet-desk
|
||||
cargo test --workspace
|
||||
```
|
||||
|
||||
Attendus :
|
||||
|
||||
```text
|
||||
audit structurel clean
|
||||
aucun warning check/Clippy
|
||||
release_compliance vert
|
||||
wallet_desk_devnet_smoke présent mais ignored dans workspace
|
||||
inventory adversarial renforcé vert
|
||||
aucune régression Config/Core/Logging/Transport/Wallet
|
||||
```
|
||||
|
||||
## 10. Checkpoint runtime `pre.012` déjà acquis
|
||||
|
||||
Le runtime communiqué avant ouverture de `pre.013` confirme notamment :
|
||||
|
||||
```text
|
||||
export Base58 OWNER : OK
|
||||
export Solana CLI JSON OWNER : OK
|
||||
destination existante : wallet.destination_exists, session OWNER conservée
|
||||
annulation save picker : aucun export, session conservée
|
||||
VIEW : export indisponible
|
||||
aucun secret/path complet observé dans les logs frontend/backend fournis
|
||||
```
|
||||
|
||||
Ce checkpoint n'est pas rejoué automatiquement par `pre.013`; la tranche ajoute les canaries transversaux qui rendent ces frontières durables.
|
||||
|
||||
## 11. Résultats `pre.013`
|
||||
|
||||
À compléter après exécution opérateur :
|
||||
|
||||
```text
|
||||
fmt / audit / check / clippy : PENDING
|
||||
cargo test -p ksp-app-wallet-desk : PENDING
|
||||
cargo test --workspace : PENDING
|
||||
cargo tree / inverse tree : PENDING
|
||||
smoke Devnet Wallet Desk opt-in : PENDING
|
||||
```
|
||||
|
||||
La matrice reste ouverte jusqu'à `pre.015`, où seront ajoutés le résultat du polish `pre.014`, le parcours fonctionnel final, les docs README/USAGE et le build Tauri exécuté en toute dernière opération.
|
||||
Reference in New Issue
Block a user