257 lines
7.9 KiB
Markdown
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é.
|