Files
khadhroony-solana-project/docs/validation/015-V0_2_12_SOL_PRICES_DESK.md

21 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 PASS
Price Desk file_id cfg.composite.ksp-app-solprices-desk PASS
schema schema.composite existant PASS
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 PASS
registry + resources atomiques Config + Config Desk + Wallet Desk + Price Desk même tranche PASS
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é PASS
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 retour opérateur du 27 août 2026 clôt le gate de tranche : cargo fmt --all, installation npm, audits Rust/Markdown, cargo check --workspace, Clippy workspace, cargo test -p ksp-app-solprices-desk et cargo tauri dev passent. Le test applicatif exécute 12 unit tests, 4 canaris desktop_contract, 3 canaris desktop_security et 1 canari public_api, tous PASS.

14. Gate 0.2.12-pre.002-fix.001

Le correctif réaligne le nouveau Desk sur le gabarit desktop commun sans ouvrir le runtime prix :

package frontend commun : tracing + ResizeObserver + Bootstrap/SimpleBar    PASS structurel
ResizeObserver installé avant SimpleBar                                    PASS structurel
getCurrentWindow() utilisé au bootstrap main                               PASS structurel
commande Tauri get_runtime_status                                          PASS structurel
footer commun                                                               PASS structurel
police DOS_Amazigh + manifeste de provenance                               PASS structurel
partials SCSS communs identiques hors headers de fichier                    PASS structurel
_app.scss réutilise le vocabulaire app-runtime-list/app-placeholder         PASS structurel
TRACING_DOMAIN_SHELL réellement consommé                                   PASS structurel
MarketPriceService / composite / refresh / table prix                       absent par contrat

Le gate opérateur du 27 août 2026 sur 0.2.12-pre.2.fix.1 est propre : audits Rust/Markdown, cargo check --workspace, cargo clippy --workspace --all-targets et cargo test -p ksp-app-solprices-desk passent sans les deux warnings précédents. cargo tauri dev démarre Vite sur 1434 puis le backend Rust sans warning. cargo test --workspace n'a pas été rejoué dans ce retour précis et n'est donc pas revendiqué ici.

15. Gate 0.2.12-pre.003

La tranche matérialise uniquement la composition Config et le bootstrap Off-chain provider-neutral :

composite cfg.composite.ksp-app-solprices-desk                         PASS structurel
profils public_keyless / all_free / tests                              PASS structurel
composants logging + offchain_transport par file_id                    PASS structurel
registry Config                                                        11 descriptors
resources Config Desk / Wallet Desk / SOL Prices Desk                  11/11 chacune
Logging SOL Prices Desk résolu depuis le composite                     PASS structurel
ResolvedOffchainTransportConfig construit au bootstrap                 PASS structurel
service provider-neutral public_keyless                                8 entrées attendues par canari
MarketPriceRuntime / rows / observations / refresh commands            absent par contrat pre.003
navigation et contrôles frontend existants journalisés en debug        PASS structurel/canari
IPC frontend request/completion                                        debug / trace

Le contrat de logging frontend est volontairement durable : action utilisateur et transition de vue en debug, étapes techniques fréquentes/fin d'IPC en trace, sans sérialiser prix, credentials, headers ni payloads métier. Les futurs boutons de refresh devront reprendre le même bridge et le même niveau de discipline.

Validations sandbox après matérialisation :

python3 scripts/audit_rust_workspace_rules.py                      PASS
python3 scripts/audit_markdown_tables.py README.md ... deltas      PASS
validation syntaxique des JSON modifiés                            PASS
cargo fmt/check/clippy/test                                        NOT RUN — cargo indisponible dans le sandbox

16. Gate 0.2.12-pre.003-fix.001

Le gate opérateur du 27 août 2026 sur 0.2.12-pre.3 a établi :

cargo fmt --all                                               PASS
python3 scripts/audit_rust_workspace_rules.py                 PASS
python3 scripts/audit_markdown_tables.py ... deltas/0.2.12   PASS
cargo check --workspace                                       PASS
cargo clippy --workspace --all-targets                        FAIL — compilation du test config_composition
cargo test -p ksp-app-solprices-desk                          FAIL — même défaut de compilation

Le défaut est limité au canari solprices_desk_default_composite_builds_provider_neutral_offchain_service : son message assert! formatait {environment:?} sur un Result<ConfigEnvironment, Error>. Comme ConfigEnvironment n'implémente volontairement pas Debug, ce formatage imposait un contrat non requis au type de succès.

pre.003-fix.001 retire uniquement cette interpolation et conserve le is_ok() suivi du match explicite existant. Aucun Debug n'est ajouté à ConfigEnvironment, aucun unwrap/expect/panic n'est introduit, et aucun comportement runtime n'est modifié.

Validations sandbox après matérialisation du fix :

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