v0.2.11-pre.005

This commit is contained in:
2026-08-25 22:32:07 +02:00
parent 5c97a772be
commit 4021d08541
11 changed files with 746 additions and 20 deletions

View File

@@ -1,9 +1,9 @@
<!-- file: docs/plans/018-V0_2_11_OFFCHAIN_PRICE_TRANSPORT_PLAN.md -->
<!-- version: 10 -->
<!-- version: 11 -->
# Plan `0.2.11` — Off-chain price transport SOL/USD multi-provider
**Statut courant : `0.2.11-pre.004-fix.001` corrige le gate statique/Clippy et la fixture CoinMarketCap V2 de `pre.004`; `pre.004` active les primitives `http_*` en production et implémente les trois premiers adapters `market_price_*` — CoinGecko, CoinMarketCap et CoinPaprika — en SOL/USD uniquement, sans SDK provider. Le staging `cfg(test)` de `pre.003-fix.001` disparaît donc structurellement avec leurs premiers consumers de production. CoinMarketCap utilise la surface Simple Price V2 actuelle ; la surface V1 deprecated n'est pas introduite.**
**Statut courant : `0.2.11-pre.005` ajoute les deux providers exchange V1 — Kraken Spot et Coinbase Exchange — en SOL/USD keyless via le socle `http_*` existant. Les deux observations conservent `ExchangeLastTrade` : Kraken utilise le dernier trade du ticker `SOLUSD` sans inventer de timestamp provider, tandis que Coinbase Exchange conserve le timestamp RFC3339 de `/products/SOL-USD/ticker`. Le gate opérateur complet de `pre.004-fix.001` est PASS.**
## 1. Base et autorité
@@ -708,21 +708,21 @@ Correction de l'ordre alphabétique des constantes d'erreur, utilisation systém
### `pre.004` — CoinGecko, CoinMarketCap et CoinPaprika
**Statut : réalisé, gate Cargo opérateur à exécuter.**
**Statut : réalisé.**
Activation en production du socle `http_*` et implémentation des trois adapters d'agrégateurs avec DTOs wire privés, parsing décimal exact via `RawValue`, timestamps provider lorsque fournis, endpoints officiels fixes, auth correspondant aux capacités réelles et limites provider décrites dans leurs descriptors. CoinGecko supporte keyless ou Demo key, CoinMarketCap keyless ou Basic key sur Simple Price V2, CoinPaprika reste keyless. Aucun registry global, Config ou smoke live n'est avancé.
#### `pre.004-fix.001` — Ordre des constantes, Clippy et fixture CoinMarketCap V2
**Statut : réalisé, gate Cargo opérateur à rejouer.**
**Statut : réalisé, gate opérateur complet PASS.**
Correctif strict de `pre.004` : tri alphabétique complet des constantes d'erreur, suppression des deux warnings `clippy::collapsible_if` dans les builders CoinGecko/CoinMarketCap, et correction de la fixture CoinMarketCap V2 dont le JSON concaténé omettait le guillemet ouvrant de `last_updated`. Aucun contrat provider, endpoint, parsing runtime, rate limit ou scope de release n'est modifié. La version technique workspace devient `0.2.11-pre.4.fix.1`.
### `pre.005` — Kraken et Coinbase Exchange
**Statut : planifié.**
**Statut : réalisé, gate Cargo opérateur à exécuter.**
Implémentation des deux adapters exchange, conservation de leur sémantique de marché propre et tests dédiés.
Implémentation des deux adapters exchange keyless avec DTOs wire privés et endpoints HTTPS fixes. Kraken utilise le ticker public `SOLUSD`, retient le dernier trade `c[0]`, applique une cadence locale conservatrice de 1 requête par seconde et ne fabrique aucun timestamp provider absent du ticker. Coinbase Exchange utilise `/products/SOL-USD/ticker`, conserve `price` et `time`, et modélise le token bucket public documenté à 10 requêtes par seconde par IP avec burst 15. Les deux adapters exposent `MarketPriceSemantics::ExchangeLastTrade`; aucun registry global, Config, SDK provider ou smoke live n'est avancé.
### `pre.006` — Jupiter et DexScreener

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md -->
<!-- version: 9 -->
<!-- version: 10 -->
# Validation `0.2.11` — Off-chain price transport SOL/USD
@@ -167,7 +167,7 @@ La version Cargo du correctif est `0.2.11-pre.3.fix.1`. Le gate opérateur du `2
| aucun SDK provider | PASS | manifest + boundary tests |
| Config, registry global et refresh multiple non avancés | PASS | scopes réservés à `pre.007+` / `pre.009` |
| audit Rust sandbox | PASS | clean, 0 candidate export |
| audit Markdown sandbox | PASS | clean, 118 tables / 109 files |
| audit Markdown sandbox | PASS | clean, 119 tables / 110 fichiers |
| gate Cargo complet `pre.004` | FAIL | audit Rust : 1 x RUST-FMT-104 ; Clippy : 2 warnings ; 1 fixture CMC KO |
Les tests déterministes de `pre.004` couvrent les modes d'auth, les headers sans fuite de credential, les URLs/query fixes, le parsing des réponses SOL/USD, le rejet d'identités ou schémas incohérents et le parsing exact des nombres JSON. Aucun smoke réseau n'est revendiqué dans cette tranche.
@@ -180,6 +180,32 @@ L'échec CoinMarketCap provenait uniquement de la fixture : la concaténation pr
La version Cargo du correctif est `0.2.11-pre.4.fix.1`. Aucun endpoint, mode d'auth, descriptor, limite provider ou contrat public n'est modifié.
Le gate opérateur rejoué le `2026-08-25` est intégralement PASS : audit Rust clean avec 0 candidate export, audit Markdown clean à 118 tables / 109 fichiers, `cargo check --workspace` PASS, `cargo clippy --workspace --all-targets` PASS, `cargo test -p ksp-offchain-transport-lib` PASS avec 31 unitaires + 3 boundary + 3 public API, puis `cargo test --workspace` PASS avec uniquement les smokes/timing explicitement ignorés.
## 3.8 Gate `0.2.11-pre.005`
| Critère | Statut | Preuve |
|--------------------------------------------------------|---------|----------------------------------------------------|
| version workspace `0.2.11-pre.5` | PASS | `Cargo.toml` racine |
| Kraken Spot SOL/USD adapter public | PASS | `market_price_kraken.rs` |
| Kraken public keyless sans faux credential | PASS | settings + descriptor |
| Kraken dernier trade conservé avec sémantique exchange | PASS | ticker `SOLUSD` -> `c[0]` -> `ExchangeLastTrade` |
| Kraken ne fabrique aucun timestamp provider absent | PASS | `provider_timestamp = None` |
| Kraken cadence locale conservatrice 1 req/s IP | PASS | descriptor + canari unitaire |
| Coinbase Exchange SOL/USD adapter public | PASS | `market_price_coinbase_exchange.rs` |
| Coinbase Exchange public keyless sans faux credential | PASS | settings + descriptor |
| Coinbase dernier trade et timestamp provider conservés | PASS | `price` + `time` -> `ExchangeLastTrade` |
| Coinbase token bucket public 10 req/s IP, burst 15 | PASS | descriptor + canari unitaire |
| DTOs wire Kraken/Coinbase privés | PASS | structs privées dans les modules providers |
| endpoints provider fixes et HTTPS | PASS | constantes privées + boundary canary |
| prix exchange parsés exactement sans passage par `f64` | PASS | `RawValue` -> `MarketPriceDecimal::parse_json_raw` |
| aucun SDK provider, Config ou registry global avancé | PASS | manifest + dependency boundary |
| audit Rust sandbox | PASS | clean, 0 candidate export |
| audit Markdown sandbox | PASS | clean, 119 tables / 110 fichiers |
| gate Cargo complet | PLANNED | à exécuter par l'opérateur |
Les tests déterministes de `pre.005` couvrent les descriptors exchange, la précision décimale, le timestamp Coinbase, l'absence de timestamp Kraken, le rejet d'une erreur/identité Kraken incohérente et le rejet d'un timestamp Coinbase invalide. Aucun smoke réseau n'est revendiqué dans cette tranche.
## 4. Matrice provider prévue
| Provider | SOL/USD V1 | Gratuit V1 | Mode auth prévu | Test déterministe | Smoke live | Statut courant |
@@ -187,8 +213,8 @@ La version Cargo du correctif est `0.2.11-pre.4.fix.1`. Aucun endpoint, mode d'a
| CoinGecko | Oui | Oui | keyless ou Demo key | PASS | PLANNED | IMPLEMENTED |
| CoinMarketCap | Oui | Oui | keyless ou Basic key | PASS | PLANNED | IMPLEMENTED |
| CoinPaprika | Oui | Oui | aucune | PASS | PLANNED | IMPLEMENTED |
| Kraken | Oui | Oui | aucune | PLANNED | PLANNED | AUDITED |
| Coinbase Exchange | Oui | Oui | aucune | PLANNED | PLANNED | AUDITED |
| Kraken | Oui | Oui | aucune | PASS | PLANNED | IMPLEMENTED |
| Coinbase Exchange | Oui | Oui | aucune | PASS | PLANNED | IMPLEMENTED |
| Jupiter Price V3 | Oui | Oui | keyless ou Free key | PLANNED | PLANNED | AUDITED |
| Birdeye | Oui | Oui | API key Standard | PLANNED | PLANNED | AUDITED |
| DexScreener | Oui | Oui | aucune | PLANNED | PLANNED | AUDITED |