v0.2.12-pre.007
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/015-V0_2_12_SOL_PRICES_DESK.md -->
|
||||
<!-- version: 11 -->
|
||||
<!-- version: 12 -->
|
||||
|
||||
# Validation `0.2.12` — SOL Prices Desk + intégration Wallet Desk
|
||||
|
||||
@@ -51,11 +51,12 @@ NOT RUN commande non exécutée dans le contexte indiqué
|
||||
| splash Price Desk | lifecycle KSP commun | PASS |
|
||||
| main shell Price Desk | header/navigation KSP | PASS |
|
||||
| table providers | registry provider-neutral, ordre stable | PASS |
|
||||
| table responsive UX | sticky/badges/timestamps distincts | PASS |
|
||||
| prix exact | String issue de `MarketPriceDecimal` | PASS |
|
||||
| availability/fraîcheur | état générique + timestamps réels | PASS |
|
||||
| refresh row | `MarketPriceService::refresh` | PASS |
|
||||
| refresh selected/many | `MarketPriceService::refresh_many` | PENDING |
|
||||
| refresh all | `MarketPriceService::refresh_all` | PENDING |
|
||||
| refresh selected/many | `MarketPriceService::refresh_many` | PASS |
|
||||
| refresh all | `MarketPriceService::refresh_all` | PASS |
|
||||
| Diagnostics | profils/counts sûrs seulement | PASS |
|
||||
| Wallet price panel | Dashboard compact provider-neutral | PENDING |
|
||||
| auto-refresh | aucun scheduler/polling | OUT |
|
||||
@@ -63,17 +64,17 @@ NOT RUN commande non exécutée dans le contexte indiqué
|
||||
|
||||
## 4. DTO/command matrix
|
||||
|
||||
| Contrat | Entrée/sortie sûre | Statut |
|
||||
|----------------------------------------|--------------------------------------------------------------------|---------|
|
||||
| `MarketPriceRuntimeStatusDto` | profiles/counts sans secret | PASS |
|
||||
| `MarketPriceProviderRowDto` | ID/display/pair/semantics/auth/availability/price/timestamps/retry | PASS |
|
||||
| single refresh direct | provider_id opaque seulement | PASS |
|
||||
| `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 | PASS |
|
||||
| provider-specific type dans IPC | interdit | OUT |
|
||||
| prix `f64` comme vérité IPC | interdit | OUT |
|
||||
| Contrat | Entrée/sortie sûre | Statut |
|
||||
|----------------------------------------|--------------------------------------------------------------------|--------|
|
||||
| `MarketPriceRuntimeStatusDto` | profiles/counts sans secret | PASS |
|
||||
| `MarketPriceProviderRowDto` | ID/display/pair/semantics/auth/availability/price/timestamps/retry | PASS |
|
||||
| single refresh direct | provider_id opaque seulement | PASS |
|
||||
| `MarketPriceRefreshManyRequestDto` | liste d’IDs opaques ; borne hostile à durcir en `pre.008` | PASS |
|
||||
| `MarketPriceRefreshResultDto` | rows/outcome classifiés | PASS |
|
||||
| runtime/list/refresh/many/all commands | aucun URL/header/API key/body | PASS |
|
||||
| TS-RS exports | bindings générés non versionnés | PASS |
|
||||
| provider-specific type dans IPC | interdit | OUT |
|
||||
| prix `f64` comme vérité IPC | interdit | OUT |
|
||||
|
||||
## 5. Config/composite matrix
|
||||
|
||||
@@ -94,35 +95,36 @@ NOT RUN commande non exécutée dans le contexte indiqué
|
||||
|
||||
## 6. Provider-agnostic boundary matrix
|
||||
|
||||
| Canari | Attendu | Statut |
|
||||
|--------------------------------------------|------------------|---------|
|
||||
| app dépend du service/registry générique | oui | PASS |
|
||||
| branche `coingecko`/`kraken`/etc. dans app | aucune | PASS |
|
||||
| SDK provider dans app | aucun | PASS |
|
||||
| reqwest/provider fetch frontend | aucun | PASS |
|
||||
| endpoint/header/API key dans DTO | aucun | PASS |
|
||||
| rate limiter/sleep/retry provider dans app | aucun | PASS |
|
||||
| refresh many ordre service | préservé | PENDING |
|
||||
| semantics provider-neutral visibles | oui, sans fusion | PASS |
|
||||
| prix canonique/fallback/moyenne | aucun | OUT |
|
||||
| Canari | Attendu | Statut |
|
||||
|--------------------------------------------|------------------|--------|
|
||||
| app dépend du service/registry générique | oui | PASS |
|
||||
| branche `coingecko`/`kraken`/etc. dans app | aucune | PASS |
|
||||
| SDK provider dans app | aucun | PASS |
|
||||
| reqwest/provider fetch frontend | aucun | PASS |
|
||||
| endpoint/header/API key dans DTO | aucun | PASS |
|
||||
| rate limiter/sleep/retry provider dans app | aucun | PASS |
|
||||
| refresh many ordre service | préservé | PASS |
|
||||
| semantics provider-neutral visibles | oui, sans fusion | PASS |
|
||||
| prix canonique/fallback/moyenne | aucun | OUT |
|
||||
|
||||
## 7. Security matrix
|
||||
|
||||
| Risque/canari | Attendu | Statut |
|
||||
|--------------------------------|----------------------------------------------|---------|
|
||||
| URL arbitraire depuis frontend | impossible par contrat command | PASS |
|
||||
| extraction API key/header | aucune projection/log | PASS |
|
||||
| provider_id inconnu | erreur KSP sûre | PASS |
|
||||
| batch duplicate/oversized | rejet avant dispatch | PENDING |
|
||||
| refresh spam | limites/cooldown Off-chain toujours actifs | PASS |
|
||||
| stale observation | timestamps/état distingués | PASS |
|
||||
| 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 | PASS |
|
||||
| Wallet VIEW/OWNER/secrets | non-régression | PENDING |
|
||||
| Risque/canari | Attendu | Statut |
|
||||
|--------------------------------|-------------------------------------------------|---------|
|
||||
| URL arbitraire depuis frontend | impossible par contrat command | PASS |
|
||||
| extraction API key/header | aucune projection/log | PASS |
|
||||
| provider_id inconnu | erreur KSP sûre | PASS |
|
||||
| batch duplicate | rejet avant dispatch | PASS |
|
||||
| batch oversized | borne hostile applicative à durcir en `pre.008` | PENDING |
|
||||
| refresh spam | limites/cooldown Off-chain toujours actifs | PASS |
|
||||
| stale observation | timestamps/état distingués | PASS |
|
||||
| double-click race | in-flight/order contrôlés | PASS |
|
||||
| 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 | PASS |
|
||||
| Wallet VIEW/OWNER/secrets | non-régression | PENDING |
|
||||
|
||||
## 8. Wallet integration matrix
|
||||
|
||||
@@ -529,4 +531,37 @@ python3 scripts/audit_markdown_tables.py README.md ... deltas PASS
|
||||
cargo fmt/check/clippy/test NOT RUN — cargo indisponible dans le sandbox
|
||||
```
|
||||
|
||||
Les lignes `refresh selected/many`, `refresh all`, `MarketPriceRefreshManyRequestDto`, `MarketPriceRefreshResultDto`, ordre many, batch duplicate/oversized et double-click race de la matrice générale restent `PENDING` jusqu'au gate opérateur de cette tranche.
|
||||
Le gate opérateur de `pre.006` fourni le 2026-08-27 ferme ensuite cette tranche : audits, `cargo check`, Clippy, test ciblé et `cargo test --workspace` passent, `cargo tauri dev` démarre correctement et le parcours manuel confirme que le multi-refresh fonctionne. Les lignes `refresh selected/many`, `refresh all`, les deux DTOs batch, l'ordre many, le rejet des doublons et le conflit `in_flight` passent donc à `PASS`. La borne hostile d'une requête batch artificiellement surdimensionnée reste volontairement `PENDING` pour le hardening `pre.008`.
|
||||
|
||||
## 23. Gate `0.2.12-pre.007`
|
||||
|
||||
La tranche finalise l'UX et l'instrumentation sans modifier le moteur Off-chain ni ajouter de nouvelle commande métier :
|
||||
|
||||
```text
|
||||
résumé Providers / Ready / Observed / Attention / Refreshing implémenté
|
||||
header table sticky + scroll horizontal borné implémenté
|
||||
Semantics/Auth secondaires adaptatifs implémenté
|
||||
availability générique par badge implémenté
|
||||
prix exact String inchangée, aucune coercition float
|
||||
timestamp provider absent Not supplied, jamais remplacé par received_at
|
||||
timestamps présents local/ISO + millisecondes exactes visibles
|
||||
select all / clear selection frontend uniquement
|
||||
clics select-all / clear / row / selected / all / navigation debug
|
||||
rendu table + comptes sûrs trace
|
||||
échec command backend command + error_domain + error_code seulement
|
||||
nouvelle command IPC aucune
|
||||
prix/timestamp/payload/URL/header/API key dans les logs aucun
|
||||
auto-refresh / setInterval / setTimeout / requestAnimationFrame absent
|
||||
localStorage / sessionStorage / fetch / XMLHttpRequest absent
|
||||
```
|
||||
|
||||
Canaris statiques ajoutés : table responsive et états génériques, absence de coercition du prix, instrumentation de tous les contrôles, projection sûre des erreurs backend et maintien du fonctionnement exclusivement manuel.
|
||||
|
||||
Validations sandbox après matérialisation :
|
||||
|
||||
```text
|
||||
python3 scripts/audit_rust_workspace_rules.py PASS
|
||||
python3 scripts/audit_markdown_tables.py README.md ... deltas PASS
|
||||
TypeScript syntax transpile main.ts PASS
|
||||
cargo fmt/check/clippy/test NOT RUN — cargo indisponible dans le sandbox
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user