21 KiB
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 à 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 | 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 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 |
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