Files
khadhroony-solana-project/deltas/0.2.6/pre.018.md
2026-08-22 10:56:26 +02:00

257 lines
7.9 KiB
Markdown

<!-- file: deltas/0.2.6/pre.018.md -->
<!-- version: 1 -->
# Delta `0.2.6-pre.018` — candidate finale Wallet Desk, runtime packagé et documentation
## Base requise
```text
0.2.6-pre.017 appliquée
workspace.package.version = 0.2.6-pre.17
```
Le checkpoint opérateur du 22 août 2026 est intégralement vert :
```text
cargo fmt --all OK
python3 scripts/audit_rust_workspace_rules.py clean
cargo check --workspace OK
cargo clippy --workspace --all-targets OK
cargo test --workspace OK
ksp-wallet-lib 84 passed / 1 ignored
Wallet Desk desktop_contract 17/17 OK
Wallet Desk desktop_security 12/12 OK
Wallet Desk release_compliance 4/4 OK
smokes réseau / benchmark ignored comme prévu
```
Le parcours manuel Tauri crate-local est également acquis : avec un `KSP_WALLETS_DIRECTORY` isolé, Wallet Desk importe une keypair Solana CLI JSON, `ksp-wallet-lib` journalise la création native `format_version=2`, la session OWNER s'ouvre, l'inventory retrouve le V2 et `getBalance` Devnet réussit avec un slot non nul.
`pre.017` est donc accepté comme base de la candidate finale.
## Signal technique
Cette tranche modifie le bootstrap release, les resources Tauri, Config et la documentation :
```text
workspace.package.version = 0.2.6-pre.18
package.json Config Desk = 0.2.6-pre.18
package.json Wallet Desk = 0.2.6-pre.18
tauri.conf Config Desk = 0.2.6-pre.18
tauri.conf Wallet Desk = 0.2.6-pre.18
commit = v0.2.6-pre.018
```
Aucun tag prerelease.
## Objectifs de la candidate
`pre.018` n'ajoute aucune nouvelle capacité Wallet métier. La tranche ferme :
```text
runtime distribué indépendant du checkout source
resources Config/Schemas packagées
racine runtime KSP user-writable commune aux Desks
README/USAGE Wallet Desk
synchronisation docs/règles/compliance/prompt 0.2.7
versions applicatives finales de prerelease
canaris packaging/resources
ordre du gate final et build Tauri absolu dernier
```
## Runtime packagé : ownership Config
Le parcours debug existant reste inchangé : Tauri est lancé crate-local, puis `main.rs` normalise le CWD Rust vers la racine du workspace avant Config.
Le parcours release ne dépend plus de ce checkout.
Les deux `tauri.conf.json` embarquent exactement les huit resources actuellement connues du `ConfigFileRegistry` :
```text
config/composite.ksp-app-wallet-desk.json
config/std.logging.json
config/std.transport.json
config/std.wallet.json
config/schemas/composite.schema.json
config/schemas/std.logging.schema.json
config/schemas/std.transport.schema.json
config/schemas/std.wallet.schema.json
```
Ne sont jamais embarqués :
```text
.env
logs/
wallets/
secrets runtime
```
`ksp-config-lib` reçoit la dépendance `directories ^6.0` et expose :
```rust
prepare_packaged_runtime(resource_root)
PackagedRuntimeLayout
ERROR_CODE_PACKAGED_RUNTIME_PREPARATION_FAILED
```
La racine writable commune est résolue par `directories::ProjectDirs` avec l'identité projet KSP, sans path user codé en dur dans les applications.
Politique de préparation :
```text
Config documents package-owned defaults
-> seed uniquement si la destination utilisateur est absente
-> une Config existante n'est jamais écrasée silencieusement
JSON Schemas
-> package-owned current authority
-> synchronisés depuis les resources à chaque lancement
.env
-> jamais packagé / jamais seedé
-> reste possédé et géré par Config dans la racine runtime writable
```
La persistence réutilise la primitive atomique Config existante et rejette les destinations symlink/non-file.
## Bootstrap Tauri release
`src/tauri.rs` des deux applications suit désormais :
```text
generate_context
-> configure_packaged_runtime(context)
-> AppState::initialize(arguments)
-> Builder/run
```
`configure_packaged_runtime` compile dans tous les profils afin que `cargo check`/Clippy debug vérifient également les APIs Tauri utilisées par le parcours release. En debug, il retourne immédiatement sans modifier le comportement acquis.
En release :
```text
tauri::utils::platform::resource_dir
-> ksp_config_lib::prepare_packaged_runtime
-> std::env::set_current_dir(runtime_root)
-> AppState::initialize
```
Le guest frontend ne reçoit aucune capability filesystem supplémentaire.
## Canaris Config / desktop
`ksp-config-lib` ajoute des tests déterministes qui prouvent :
- premier seed des Config packagées ;
- conservation d'une Config utilisateur déjà modifiée ;
- resynchronisation d'un schema mis à jour dans le package ;
- layout runtime/cfg/schema cohérent ;
- rejet d'une destination symlink sous Unix ;
- exposition du contrat public depuis la racine de crate.
Les deux `desktop_contract.rs` vérifient les mappings `bundle.resources` et l'appel de préparation du runtime packagé.
`release_compliance.rs` Wallet Desk vérifie en plus qu'aucune resource `.env`, `logs`, `wallets`, `secret` ou `private` n'entre dans le bundle.
## Documentation candidate
Créés :
```text
crates/ksp-app-wallet-desk/README.md
crates/ksp-app-wallet-desk/USAGE.md
```
Synchronisés :
```text
crates/ksp-app-config-desk/README.md
crates/ksp-app-config-desk/USAGE.md
docs/rules/RULES_KSP.md
docs/architecture/010-APPS_SERVICES_SCENARIOS_AND_CONTROL.md
docs/validation/009-V0_2_6_WALLET_DESK_COMPLIANCE.md
docs/validation/000-README.md
docs/formats/000-README.md
docs/plans/013-V0_2_6_WALLET_DESK_PLAN.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
docs/plans/000-README.md
docs/000-README.md
docs/IDEAS.md
ROADMAP.md état global uniquement
prompts/011-V0_2_6_START_PROMPT.md
prompts/012-V0_2_7_START_PROMPT.md
```
`prompts/012-V0_2_7_START_PROMPT.md` reste dédié à `0.2.7 — WebSocket Solana standard` sur base stable `v0.2.6`.
`CHANGELOG.md` est audité mais **volontairement inchangé** dans la prerelease. L'entrée stable `0.2.6` appartient à `rel.001` après validation du build final.
## Dépendances
Nouvelle dépendance externe :
```text
directories = ^6.0
```
Elle est déclarée uniquement sous `[workspace.dependencies]` et consommée par `ksp-config-lib` via `directories.workspace = true`.
`tempfile`, déjà possédé par le workspace, est ajouté aux dev-dependencies de Config pour les fixtures packaging isolées.
Aucune dépendance Solana, réseau, filesystem Tauri guest ou cryptographique supplémentaire n'est ajoutée.
## Validation opérateur candidate
Après application du delta :
```bash
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-config-lib
cargo test -p ksp-wallet-lib
cargo test -p ksp-app-config-desk
cargo test -p ksp-app-wallet-desk
cargo test --workspace
```
Puis réaudit de dépendances si nécessaire :
```bash
cargo tree -p ksp-config-lib --depth 1
cargo tree -p ksp-app-wallet-desk --depth 1
cargo tree -p ksp-app-wallet-desk -d
```
Le parcours fonctionnel final et les smokes live retenus sont exécutés avant le build. Exemple :
```bash
KSP_WALLETS_DIRECTORY=var/wallet-desk-pre018 \
bash -lc 'cd crates/ksp-app-wallet-desk && cargo tauri dev'
```
Le smoke Devnet opt-in peut être rejoué avant le build si souhaité.
## Build final
L'absolue dernière opération de validation est :
```bash
(cd crates/ksp-app-wallet-desk && cargo tauri build)
```
Ne lancer ensuite ni fmt, ni check, ni test, ni autre build avant d'enregistrer le résultat du gate. Si une correction est requise, produire `pre.018-fix.NNN`, rejouer les validations depuis le début, puis refaire le build en dernière opération.
Si le gate complet est vert, la prochaine étape est uniquement :
```text
0.2.6-rel.001
workspace.package.version -> 0.2.6
CHANGELOG stable -> 0.2.6
tag final -> v0.2.6
```
`rel.001` n'introduit aucune nouvelle fonctionnalité.