# Validation `0.2.12` — SOL Prices Desk + intégration Wallet Desk ## 1. Objet Cette matrice est ouverte par `0.2.12-pre.001`. Elle suit la création de `ksp-app-solprices-desk`, sa composition Config/Off-chain Transport puis l'intégration provider-neutral dans Wallet Desk. Statuts utilisés : ```text PASS preuve acquise PENDING attendu dans une tranche ultérieure OUT explicitement hors scope NOT RUN commande non exécutée dans le contexte indiqué ``` ## 2. Gate `0.2.12-pre.001` | Critère | Statut | Preuve | |-------------------------------------------------|--------|--------------------------------------------------------------------| | archive stable `v0.2.11` utilisée | PASS | archive Gitea opérateur fournie | | `workspace.package.version = 0.2.11` à l’entrée | PASS | inspection `Cargo.toml` | | `deltas/0.2.11/rel.001.md` présent | PASS | inspection archive | | prompt `017-V0_2_12_START_PROMPT.md` présent | PASS | inspection archive | | metadata `.git` disponible | OUT | archive source sans `.git`; tag non revérifiable localement | | baseline Cargo stable | PASS | preuve opérateur 2026-08-26: fmt/check/clippy/test workspace verts | | audits Python sandbox sur archive | PASS | Rust rules clean; Markdown tables clean avant modification | | règles/architecture obligatoires relues | PASS | audit `pre.001` + plan 019 | | surface Off-chain réelle inventoriée | PASS | plan 019 sections 3/9/10 | | surface Config/composite/packaging inventoriée | PASS | plan 019 section 4 | | gabarits Config/Wallet Desk inventoriés | PASS | plan 019 section 5 | | sources officielles Tauri/TS-RS réauditées | PASS | plan 019 section 6 | | screen map Price Desk + Wallet | PASS | plan 019 section 8 | | DTO/command map | PASS | plan 019 sections 9/10 | | état de présentation décidé | PASS | backend mémoire uniquement; plan 019 section 7 | | Config/composite map | PASS | nouveau composite + extension Wallet; plan 019 section 4 | | threat model desktop | PASS | plan 019 section 16 | | Wallet integration map | PASS | plan 019 section 12 | | auto-refresh | OUT | hors scope confirmé | | valorisation USD du solde | OUT | aucun prix canonique; hors scope confirmé | | forecast souple recalibré | PASS | 15 prereleases + rel; plan 019 section 19 | | scope clôturable | PASS | pas de redécoupage requis avant `pre.002` | | code/scaffold fonctionnel ajouté en `pre.001` | OUT | interdit par le gate | ## 3. Screen/feature matrix | Surface | Contrat | Statut | |------------------------|-----------------------------------------|---------| | splash Price Desk | lifecycle KSP commun | PENDING | | main shell Price Desk | header/navigation KSP | PENDING | | table providers | registry provider-neutral, ordre stable | PENDING | | prix exact | String issue de `MarketPriceDecimal` | PENDING | | availability/fraîcheur | état générique + timestamps réels | PENDING | | refresh row | `MarketPriceService::refresh` | PENDING | | refresh selected/many | `MarketPriceService::refresh_many` | PENDING | | refresh all | `MarketPriceService::refresh_all` | PENDING | | Diagnostics | profils/counts sûrs seulement | PENDING | | Wallet price panel | Dashboard compact provider-neutral | PENDING | | auto-refresh | aucun scheduler/polling | OUT | | Wallet USD valuation | aucun prix canonique | OUT | ## 4. DTO/command matrix | Contrat | Entrée/sortie sûre | Statut | |----------------------------------------|--------------------------------------------------------------------|---------| | `MarketPriceRuntimeStatusDto` | profiles/counts sans secret | PENDING | | `MarketPriceProviderRowDto` | ID/display/pair/semantics/auth/availability/price/timestamps/retry | PENDING | | `MarketPriceRefreshRequestDto` | provider_id opaque seulement | PENDING | | `MarketPriceRefreshManyRequestDto` | liste bornée d’IDs opaques | PENDING | | `MarketPriceRefreshResultDto` | rows/outcome classifiés | PENDING | | runtime/list/refresh/many/all commands | aucun URL/header/API key/body | PENDING | | TS-RS exports | bindings générés non versionnés | PENDING | | provider-specific type dans IPC | interdit | OUT | | prix `f64` comme vérité IPC | interdit | OUT | ## 5. Config/composite matrix | Contrat | Valeur attendue | Statut | |---------------------------------------|--------------------------------------------------------------|---------| | Price Desk composite file | `config/composite.ksp-app-solprices-desk.json` | PENDING | | Price Desk file_id | `cfg.composite.ksp-app-solprices-desk` | PENDING | | schema | `schema.composite` existant | PENDING | | components | `logging`, `offchain_transport` | PENDING | | default profile | `public_keyless` | PENDING | | optional profile | `all_free` | PENDING | | test profile | `tests` -> offchain `public_keyless` | PENDING | | Wallet composite | ajoute offchain `public_keyless` à devnet/temporary/tests | PENDING | | registry/resource count | 11 après nouveau composite | PENDING | | registry + resources atomiques | Config + Config Desk + Wallet Desk + Price Desk même tranche | PENDING | | nouveau schema Config | inutile | OUT | | modification `std.offchain_transport` | pas de lacune identifiée | OUT | ## 6. Provider-agnostic boundary matrix | Canari | Attendu | Statut | |--------------------------------------------|------------------|---------| | app dépend du service/registry générique | oui | PENDING | | branche `coingecko`/`kraken`/etc. dans app | aucune | PENDING | | SDK provider dans app | aucun | PENDING | | reqwest/provider fetch frontend | aucun | PENDING | | endpoint/header/API key dans DTO | aucun | PENDING | | rate limiter/sleep/retry provider dans app | aucun | PENDING | | refresh many ordre service | préservé | PENDING | | semantics provider-neutral visibles | oui, sans fusion | PENDING | | prix canonique/fallback/moyenne | aucun | OUT | ## 7. Security matrix | Risque/canari | Attendu | Statut | |--------------------------------|----------------------------------------------|---------| | URL arbitraire depuis frontend | impossible par contrat command | PENDING | | extraction API key/header | aucune projection/log | PENDING | | provider_id inconnu | erreur KSP sûre | PENDING | | batch duplicate/oversized | rejet avant dispatch | PENDING | | refresh spam | limites/cooldown Off-chain toujours actifs | PENDING | | stale observation | timestamps/état distingués | PENDING | | double-click race | in-flight/order contrôlés | PENDING | | close pendant refresh | aucune persistance/sûreté frontend requise | PENDING | | CWD/resource confusion | canaris propres à chaque app | PENDING | | Price Desk capabilities | `core:default`, `tracing:default` uniquement | PENDING | | plugin dialog Price Desk | absent | PENDING | | frontend sensitive logging | action/ID/count/code seulement | PENDING | | Wallet VIEW/OWNER/secrets | non-régression | PENDING | ## 8. Wallet integration matrix | Contrat | Attendu | Statut | |----------------------------|-----------------------------------------------------------------|---------| | Cargo dependency | Wallet Desk -> `ksp-offchain-transport-lib` | PENDING | | Config component | Wallet composite -> `cfg.std.offchain_transport/public_keyless` | PENDING | | runtime | ResolvedOffchainTransportConfig -> MarketPriceService | PENDING | | commands/DTO | provider-neutral | PENDING | | UI | petit panneau Dashboard | PENDING | | balance HTTP On-chain | inchangée | PENDING | | WalletSession VIEW/OWNER | inchangée | PENDING | | Wallet secret projections | aucune nouvelle | PENDING | | USD balance multiplication | hors scope | OUT | ## 9. Tauri/package matrix | Contrat | Attendu | Statut | |------------------------------------|------------------------------------|---------| | Price Desk ports | 1434/1435 strict | PENDING | | windows | splash + main | PENDING | | Rust package | lib + bin; `main.rs` mince | PENDING | | commands | centralisées `tauri.rs` | PENDING | | frontendDist | hors source, path Price Desk dédié | PENDING | | hooks | npm dev/build cwd crate | PENDING | | backend cross-app | aucune référence Wallet par erreur | PENDING | | resources | registry complet packagé | PENDING | | bundle | targets/icons cohérents | PENDING | | Tauri production build Price Desk | crate-local PASS attendu | PENDING | | Tauri production build Wallet Desk | crate-local PASS attendu | PENDING | ## 10. Gates techniques/live finaux | Gate | Statut | |--------------------------------------------------------------|---------| | `cargo fmt --all` | PENDING | | `python3 scripts/audit_rust_workspace_rules.py` | PENDING | | `python3 scripts/audit_markdown_tables.py ... deltas/0.2.12` | PENDING | | `cargo check --workspace` | PENDING | | `cargo clippy --workspace --all-targets` | PENDING | | `cargo test --workspace` | PENDING | | Price Desk functional dev path | PENDING | | Wallet Desk functional price path | PENDING | | keyless app-composition live smoke | PENDING | | Price Desk `cargo tauri build` | PENDING | | Wallet Desk `cargo tauri build` | PENDING | Le live `0.2.12` valide la composition applicative générique; il ne répète pas l'audit provider `7/7` de `0.2.11` sans raison. ## 11. Validations exécutées pour `pre.001` ```text inspection archive/version/rel/prompt PASS python3 scripts/audit_rust_workspace_rules.py PASS python3 scripts/audit_markdown_tables.py README.md ... crates PASS sources officielles Tauri/TS-RS PASS audit cargo fmt/check/clippy/test dans sandbox NOT RUN — cargo indisponible cargo fmt/check/clippy/test opérateur sur base stable fournie PASS ``` Après écriture du présent delta, les audits Rust structurel et Markdown ont été rejoués avec `deltas/0.2.12` inclus et sont propres. ## 12. Forecast de clôture Les responsabilités finales restent séparées : ```text pre.013 gate technique/live + builds finaux pre.014 réconciliation documentaire finale pre.015 prompt suivant + CHANGELOG + ROADMAP uniquement rel.001 publication stable ```