v0.2.12-pre.006

This commit is contained in:
2026-08-27 11:27:39 +02:00
parent a00e485ebb
commit 7d0fe8ac5f
16 changed files with 774 additions and 68 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/015-V0_2_12_SOL_PRICES_DESK.md -->
<!-- version: 10 -->
<!-- version: 11 -->
# Validation `0.2.12` — SOL Prices Desk + intégration Wallet Desk
@@ -50,13 +50,13 @@ 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 | PENDING |
| prix exact | String issue de `MarketPriceDecimal` | PENDING |
| availability/fraîcheur | état générique + timestamps réels | PENDING |
| refresh row | `MarketPriceService::refresh` | PENDING |
| table providers | registry provider-neutral, ordre stable | 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 |
| Diagnostics | profils/counts sûrs seulement | PENDING |
| Diagnostics | profils/counts sûrs seulement | PASS |
| Wallet price panel | Dashboard compact provider-neutral | PENDING |
| auto-refresh | aucun scheduler/polling | OUT |
| Wallet USD valuation | aucun prix canonique | OUT |
@@ -65,13 +65,13 @@ NOT RUN commande non exécutée dans le contexte indiqué
| 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 |
| `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 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 |
| 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 |
@@ -110,12 +110,12 @@ NOT RUN commande non exécutée dans le contexte indiqué
| 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 |
| 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 | PENDING |
| stale observation | timestamps/état distingués | 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 |
@@ -486,3 +486,47 @@ runtime prix / frontend / providers inchangés
```
La version technique devient `0.2.12-pre.5.fix.1`. Le gate attendu doit confirmer le test ciblé puis le workspace complet avant d'ouvrir `pre.006`.
## 22. Gate `0.2.12-pre.006`
Le gate opérateur de `pre.005-fix.001` fourni le 2026-08-27 confirme la fermeture de la tranche précédente :
```text
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 PASS
cargo test -p ksp-app-solprices-desk PASS
cargo test --workspace PASS
```
`pre.006` matérialise ensuite le batch manuel provider-neutral :
```text
MarketPriceRefreshManyRequestDto implémenté, IDs opaques uniquement
MarketPriceRefreshResultDto implémenté, rows + requested/refreshed counts
refresh_market_prices implémenté via MarketPriceService::refresh_many
refresh_all_market_prices implémenté via MarketPriceService::refresh_all
ordre selected ordre courant des rows / requête conservé
ordre all ordre stable provider-id du service
in-flight backend validation atomique avant mutation
doublon / ID inconnu rejet sûr avant état loading partiel
mutex présentation pendant await non
cooldown / retry_at projection Off-chain existante
Refresh selected / Refresh all frontend implémentés
logging clic sélection/selected/all debug, compte/ID opaque seulement
logging résultat batch trace, requested/refreshed counts seulement
polling / setInterval / scheduler / sleep consommateur absent
fallback / consensus / moyenne absent
```
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
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.