Files
khadhroony-solana-project/docs/validation/015-V0_2_12_SOL_PRICES_DESK.md
2026-08-27 08:38:22 +02:00

16 KiB
Raw Blame History

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 :

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 à lentré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 PASS
main shell Price Desk header/navigation KSP PASS
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 dIDs 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 PASS
plugin dialog Price Desk absent PASS
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 PASS
windows splash + main PASS
Rust package lib + bin; main.rs mince PASS
commands centralisées tauri.rs PASS
frontendDist hors source, path Price Desk dédié PASS
hooks npm dev/build cwd crate PASS
backend cross-app aucune référence Wallet par erreur PASS
resources registry complet packagé PENDING
bundle targets/icons cohérents PASS
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

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 :

pre.013  gate technique/live + builds finaux
pre.014  réconciliation documentaire finale
pre.015  prompt suivant + CHANGELOG + ROADMAP uniquement
rel.001  publication stable

13. Gate 0.2.12-pre.002

Le scaffold strict est matérialisé sans avancer la composition Off-chain :

crate mixte lib/bin ksp-app-solprices-desk       PASS
ports Vite/HMR 1434/1435 strict                  PASS
fenêtres splash + main                            PASS
frontendDist/hook/backend propres                 PASS
bridge Logging + tauri-plugin-tracing             PASS
capabilities core:default + tracing:default       PASS
plugin dialog/fs/http/shell frontend               absent
resources Config                                  10/10 registry courant; 11e composite réservé à pre.003
MarketPriceService / refresh / table prix          absent par contrat pre.002

Validations sandbox après matérialisation :

python3 scripts/audit_rust_workspace_rules.py                      PASS
python3 scripts/audit_markdown_tables.py README.md ... deltas      PASS
cargo fmt/check/clippy/test                                        NOT RUN — cargo indisponible dans le sandbox

Le statut de pre.002 reste donc « implémenté ; gate opérateur à confirmer » jusqu'au retour du gate Cargo de l'opérateur.