# Delta `0.2.11-pre.012` — réconciliation documentaire finale Off-chain price ## 1. Base ```text 0.2.11-pre.011-fix.001 ``` Cette tranche est exclusivement le couloir de réconciliation documentaire finale. Elle ne modifie aucun comportement Rust, test, schema, Config exécutable, endpoint provider, dépendance ou feature. Le seul fichier `.rs` touché est la rustdoc crate-root, afin de retirer une référence obsolète à `pre.010`. ## 2. Fermeture de la lane technique/live Le gate `pre.011` a passé les validations déterministes complètes et les graphes Cargo. Son premier smoke keyless a tenté les sept providers et a isolé CoinMarketCap comme seul échec. `pre.011-fix.001` a corrigé le builder CoinMarketCap Simple Price V2 : ```text ids=5426 -> id=5426 ``` Le re-smoke opérateur du `2026-08-26` a ensuite confirmé : ```text keyless_market_price_providers_live_smoke 1/1 PASS providers keyless réellement couverts 7/7 PASS ``` Les sept adapters couverts sont Coinbase Exchange, CoinGecko, CoinMarketCap, CoinPaprika, DexScreener, Jupiter et Kraken. Le smoke keyed Birdeye/CoinGecko Demo/CoinMarketCap Basic/Jupiter Free n'a pas été exécuté faute des quatre credentials gratuits simultanés. Son statut final reste donc explicitement : ```text SKIP opérateur ``` Il n'est jamais converti en PASS fictif. ## 3. Version technique ```text workspace.package.version = 0.2.11-pre.12 commit attendu = v0.2.11-pre.012 aucun tag prerelease ``` Le changement Cargo est mécanique ; aucune sémantique runtime ne change. ## 4. Documents réconciliés ```text docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md docs/plans/018-V0_2_11_OFFCHAIN_PRICE_TRANSPORT_PLAN.md docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md crates/ksp-offchain-transport-lib/README.md crates/ksp-offchain-transport-lib/USAGE.md crates/ksp-offchain-transport-lib/src/lib.rs — rustdoc seulement docs/000-README.md ``` Les README/USAGE Config ont été relus mais ne nécessitent aucun changement : le document `std.offchain_transport`, les règles de provenance Secret/Public et la direction `Config -> Off-chain Transport` y sont déjà décrits durablement. ## 5. Réconciliation finale du contrat `0.2.11` La release candidate porte exactement : ```text SOL/USD uniquement 8 adapters REST V1 reqwest sans SDK provider MarketPriceDecimal exact sans vérité canonique f64 MarketPriceObservation avec sémantique/provenance/timestamps registry + availability provider-neutral rate limits/cooldowns possédés par Off-chain Transport refresh / refresh_many / refresh_all génériques refresh multiple V1 séquentiel et déterministe Config std.offchain_transport origines provider fixes DexScreener pair address explicite, aucune discovery aucun fallback, consensus ou moyenne KSP ``` Le statut `QuotaUnavailable` est documenté comme état générique représentable. `0.2.11` ne prétend pas disposer d'un compteur quota live authoritative pour chaque provider. Les erreurs de schema/wire provider sont déjà classées par le code `market_price.provider_response_invalid`; la validation finale ne les laisse plus artificiellement `PLANNED`. ## 6. Références durables `crates/ksp-offchain-transport-lib/README.md` devient la référence de responsabilité/architecture de la crate et `USAGE.md` la référence d'utilisation de la façade `market_price` ainsi que des commandes de smoke opt-in. Le statut de brouillon `pre.010` est supprimé. Le README enregistre le résultat live final keyless `7/7` et le statut keyed `SKIP opérateur` sans transformer les conditions commerciales des providers en garantie KSP. La séquence fonctionnelle conserve la release suivante : ```text 0.2.12 — ksp-app-solprices-desk + intégration prix dans Wallet Desk ``` `0.2.12` reste HID : aucune logique provider, endpoint, credential, rate-limit ou normalisation prix ne doit migrer dans Tauri/frontend. ## 7. Frontière avec `pre.013` Cette tranche ne touche pas : ```text CHANGELOG.md ROADMAP.md prompt 0.2.12 ``` Ces surfaces appartiennent exclusivement à `pre.013`, en plus de son bump Cargo mécanique et de son delta. Si un défaut technique ou documentaire durable est découvert après le gate de `pre.012`, il ne doit pas être glissé dans `pre.013`; une nouvelle prerelease du couloir approprié doit être ouverte. ## 8. Fichiers ajoutés/modifiés ```text Cargo.toml docs/000-README.md docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md docs/plans/018-V0_2_11_OFFCHAIN_PRICE_TRANSPORT_PLAN.md docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md crates/ksp-offchain-transport-lib/README.md crates/ksp-offchain-transport-lib/USAGE.md crates/ksp-offchain-transport-lib/src/lib.rs deltas/0.2.11/pre.012.md ``` ## 9. Gate opérateur Comme `pre.012` ne modifie aucune surface technique : ```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.11 cargo check --workspace cargo clippy --workspace --all-targets cargo test --workspace ``` Aucun smoke live ni `cargo tree` n'est à rejouer si le delta est appliqué exactement : le smoke keyless `7/7` et les graphes Cargo appartiennent à la lane technique/live déjà fermée. ## 10. Suite Si ce gate est vert : ```text 0.2.11-pre.013 — préparation minimale de publication ``` `pre.013` reste limitée au prompt de `0.2.12`, à `CHANGELOG.md`, à `ROADMAP.md`, au bump Cargo mécanique et à son delta.