# Delta `0.2.12-pre.006` — Refresh selected/many/all SOL/USD ## 1. Identité ```text release : 0.2.12 tranche : pre.006 version Cargo : 0.2.12-pre.6 base : 0.2.12-pre.5.fix.1 ``` Le gate opérateur de la base est propre : audits Rust/Markdown, `cargo check --workspace`, Clippy, `cargo test -p ksp-app-solprices-desk` et `cargo test --workspace` passent. ## 2. Scope réalisé `pre.006` complète les actions manuelles du SOL Prices Desk sans ajouter de scheduler consommateur : ```text refresh individuel conservé refresh selected/many MarketPriceService::refresh_many refresh all MarketPriceService::refresh_all ordre selected ordre courant des rows / requête ordre all ordre stable provider-id Off-chain DTO batch input IDs opaques uniquement DTO batch result rows + requested_count/refreshed_count cooldown/retry registry Off-chain, aucune réinterprétation app polling/auto-refresh non fallback/consensus/moyenne non ``` ## 3. In-flight et atomicité Avant chaque opération, le backend valide la sélection complète sous le mutex de présentation : - doublons interdits ; - IDs inconnus interdits ; - provider déjà `loading` interdit ; - aucune ligne n'est marquée `loading` avant la fin de cette validation globale. Après validation, toutes les lignes concernées passent `loading = true`, puis le mutex est relâché avant l'appel async au service. En cas d'erreur structurelle du service, les flags `loading` sont nettoyés. Les outcomes réussis ou non éligibles sont appliqués dans l'ordre retourné par Off-chain Transport et conservent la dernière observation réussie lorsqu'aucune nouvelle observation n'est produite. ## 4. Frontend et Logging La vue Prices ajoute : ```text checkbox par ligne compteur selected Refresh selected Refresh all ``` Les IDs sélectionnés sont reconstruits dans l'ordre courant des rows avant l'IPC. Les contrôles batch sont désactivés lorsqu'une opération visible est déjà `loading`. Instrumentation : ```text changement de sélection debug clic Refresh selected debug + selectedCount clic Refresh all debug + providerCount IPC request/completion debug / trace via invokeKsp application résultat batch trace + requested/refreshed counts échec warn ``` Aucun prix, payload provider, URL, header, credential ou DTO complet n'est sérialisé dans les logs. ## 5. Canaris La tranche rend les canaris historiques évolutifs puis ajoute des preuves dédiées `pre.006` : - le refresh individuel reste présent sans interdire les surfaces futures de sa propre release ; - `#[tauri::command]` et `generate_handler!` restent centralisés dans `tauri.rs` ; - exactement sept commandes Tauri sont attendues dans le Desk à cette tranche ; - `refresh_many` et `refresh_all` sont appelés directement sur le service générique ; - doublons et conflits `in_flight` ne provoquent aucune mutation partielle ; - aucun `setInterval`, `setTimeout`, `requestAnimationFrame` ou `tokio::time::sleep` n'est ajouté au chemin prix. ## 6. Hors scope confirmé ```text DataTable/polish final pre.007 hardening/package final pre.008 Wallet Desk prices pre.009+ auto-refresh OUT 0.2.12 prix canonique/fallback/consensus OUT 0.2.12 valorisation USD Wallet OUT 0.2.12 ``` ## 7. Gate À exécuter par l'opérateur : ```bash cargo fmt --all python3 scripts/audit_rust_workspace_rules.py python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.2.12 cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-app-solprices-desk cargo test --workspace (cd crates/ksp-app-solprices-desk && cargo tauri dev) ```