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

7.9 KiB

Delta 0.2.6-pre.018 — candidate finale Wallet Desk, runtime packagé et documentation

Base requise

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 :

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 :

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 :

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 :

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 :

.env
logs/
wallets/
secrets runtime

ksp-config-lib reçoit la dépendance directories ^6.0 et expose :

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 :

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 :

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 :

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 :

crates/ksp-app-wallet-desk/README.md
crates/ksp-app-wallet-desk/USAGE.md

Synchronisés :

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 :

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 :

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 :

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 :

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 :

(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 :

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é.