v0.2.11-pre.012

This commit is contained in:
2026-08-26 15:45:02 +02:00
parent b5a1293953
commit 81eb295a09
9 changed files with 303 additions and 93 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md -->
<!-- version: 19 -->
<!-- version: 20 -->
# Validation `0.2.11` — Off-chain price transport SOL/USD
@@ -365,37 +365,55 @@ La tranche `pre.011` ne change aucune logique réseau de production. Elle rend u
Le smoke keyless opérateur de `pre.011` a bien exécuté les sept providers avant assertion finale. Les six adapters Coinbase Exchange, CoinGecko, CoinPaprika, DexScreener, Jupiter et Kraken ont produit une observation valide. CoinMarketCap seul a terminé `TemporarilyUnavailable`. Le réaudit officiel ciblé a identifié un écart déterministe dans le builder KSP : Simple Price V2 attend `id=5426`, alors que l'adapter envoyait `ids=5426`.
| Critère | Statut | Preuve / condition opérateur |
|----------------------------------------------------|---------|----------------------------------------------------------------|
| version workspace `0.2.11-pre.11.fix.1` | PASS | `Cargo.toml` racine |
| endpoint CoinMarketCap V2 inchangé | PASS | `/v2/simple/price` et `/public-api/v2/simple/price` |
| identifiant SOL CoinMarketCap corrigé en `id=5426` | PASS | builder commun Keyless / Basic |
| query V2 exacte canarisée | PASS | `id=5426&convert=USD&include_last_updated=true` |
| parser/rate-limit/auth/sémantique inchangés | PASS | aucun autre contrat runtime modifié |
| six autres providers keyless du smoke initial | PASS | outcomes live `pre.011`, aucun autre échec |
| re-smoke keyless après fix | PENDING | obligatoire avant `pre.012` |
| smoke keyed réel | PENDING | `SKIP opérateur` permis si les quatre credentials sont absents |
| Critère | Statut | Preuve / condition opérateur |
|----------------------------------------------------|--------|-----------------------------------------------------|
| version workspace `0.2.11-pre.11.fix.1` | PASS | `Cargo.toml` racine |
| endpoint CoinMarketCap V2 inchangé | PASS | `/v2/simple/price` et `/public-api/v2/simple/price` |
| identifiant SOL CoinMarketCap corrigé en `id=5426` | PASS | builder commun Keyless / Basic |
| query V2 exacte canarisée | PASS | `id=5426&convert=USD&include_last_updated=true` |
| parser/rate-limit/auth/sémantique inchangés | PASS | aucun autre contrat runtime modifié |
| six autres providers keyless du smoke initial | PASS | outcomes live `pre.011`, aucun autre échec |
| re-smoke keyless après fix | PASS | 7/7 opérateur le 2026-08-26 |
| smoke keyed réel | SKIP | opérateur sans les quatre credentials gratuits |
Ce correctif est technique et appartient toujours à la lane `pre.011`. Il ne transfère aucune responsabilité documentaire à `pre.012`.
## 4. Matrice provider prévue
## 3.16 Réconciliation documentaire `0.2.11-pre.012`
| Provider | SOL/USD V1 | Gratuit V1 | Mode auth prévu | Test déterministe | Smoke live | Statut courant |
|-------------------|------------|------------|----------------------|-------------------|------------------|----------------|
| CoinGecko | Oui | Oui | keyless ou Demo key | PASS | PASS keyless | IMPLEMENTED |
| CoinMarketCap | Oui | Oui | keyless ou Basic key | PASS | PENDING re-smoke | IMPLEMENTED |
| CoinPaprika | Oui | Oui | aucune | PASS | PASS | IMPLEMENTED |
| Kraken | Oui | Oui | aucune | PASS | PASS | IMPLEMENTED |
| Coinbase Exchange | Oui | Oui | aucune | PASS | PASS | IMPLEMENTED |
| Jupiter Price V3 | Oui | Oui | keyless ou Free key | PASS | PASS keyless | IMPLEMENTED |
| Birdeye | Oui | Oui | API key Standard | PASS | PENDING keyed | IMPLEMENTED |
| DexScreener | Oui | Oui | aucune | PASS | PASS | IMPLEMENTED |
La lane technique/live est fermée avant cette tranche : le premier smoke keyless a isolé CoinMarketCap, `pre.011-fix.001` a corrigé le paramètre V2, puis le re-smoke opérateur a passé les sept providers keyless en `7/7`. Le smoke keyed n'a pas été exécuté faute des quatre credentials gratuits simultanés et reste explicitement `SKIP opérateur`.
`AUDITED` signifie uniquement que la documentation officielle actuelle satisfait le gate d'entrée. Ce statut ne vaut pas preuve d'un smoke réseau KSP.
`pre.012` ne modifie aucun comportement Rust, test, schema, Config exécutable, dépendance ou contrat réseau. La rustdoc crate-root est seulement réconciliée pour retirer `pre.010`. La tranche prépare ensuite un dernier gate workspace sans refaire le smoke live ni les graphes Cargo.
Avant la stable, les conditions d'usage et la persistance des offres gratuites doivent être réauditées ; un provider peut rester techniquement supporté tout en nécessitant un plan différent pour certains usages.
| Critère | Statut | Preuve / condition opérateur |
|--------------------------------------------------------|---------|-------------------------------------------------|
| re-smoke keyless après CoinMarketCap fix | PASS | 7/7 le 2026-08-26 |
| smoke keyed avec quatre credentials | SKIP | credentials non disponibles ensemble |
| plan `0.2.11` réconcilié | PASS | statuts techniques/live finalisés |
| matrice provider finale | PASS | huit providers implémentés |
| README/USAGE Off-chain durables | PASS | brouillon `pre.010` supprimé |
| index documentaire réconcilié | PASS | `docs/000-README.md` |
| séquence fonctionnelle `0.2.11` / `0.2.12` réconciliée | PASS | `002-FUNCTIONAL_RELEASE_SEQUENCE.md` |
| aucune responsabilité `CHANGELOG` / `ROADMAP` / prompt | PASS | réservée à `pre.013` |
| gate workspace documentaire final | PENDING | opérateur après application exacte de `pre.012` |
## 5. Contrat public prévu
## 4. Matrice provider finale
| Provider | SOL/USD V1 | Gratuit V1 | Mode auth prévu | Test déterministe | Smoke live | Statut courant |
|-------------------|------------|------------|----------------------|-------------------|--------------|----------------|
| CoinGecko | Oui | Oui | keyless ou Demo key | PASS | PASS keyless | IMPLEMENTED |
| CoinMarketCap | Oui | Oui | keyless ou Basic key | PASS | PASS keyless | IMPLEMENTED |
| CoinPaprika | Oui | Oui | aucune | PASS | PASS | IMPLEMENTED |
| Kraken | Oui | Oui | aucune | PASS | PASS | IMPLEMENTED |
| Coinbase Exchange | Oui | Oui | aucune | PASS | PASS | IMPLEMENTED |
| Jupiter Price V3 | Oui | Oui | keyless ou Free key | PASS | PASS keyless | IMPLEMENTED |
| Birdeye | Oui | Oui | API key Standard | PASS | SKIP keyed | IMPLEMENTED |
| DexScreener | Oui | Oui | aucune | PASS | PASS | IMPLEMENTED |
Le smoke `PASS` signifie qu'un mode keyless de ce provider a été réellement exercé par le harness KSP de clôture. `SKIP keyed` signifie uniquement que Birdeye, qui n'a pas de mode keyless V1, n'a pas reçu de preuve live faute du jeu complet de credentials opérateur ; ses fixtures, parsing, auth et descriptors restent couverts déterministiquement.
Les conditions d'usage et la persistance des offres gratuites ont été réauditées au gate final du `2026-08-26`. Elles restent des propriétés externes susceptibles d'évoluer après la release et ne constituent pas une garantie commerciale KSP.
## 5. Contrat public final
| Invariant | Statut |
|------------------------------------------------------------------------|--------|
@@ -415,20 +433,20 @@ Avant la stable, les conditions d'usage et la persistance des offres gratuites d
## 6. Rate limiting et availability
| Cas | Statut |
|---------------------------------------------------------------|---------|
| cadence locale fixe représentable | PASS |
| burst documenté supérieur à la cadence moyenne représentable | PASS |
| limite dynamique keyless représentable | PASS |
| `429` classé | PASS |
| `Retry-After` honoré lorsqu'exploitable | PASS |
| cooldown expose prochain instant admissible | PASS |
| refresh all ne lance que les providers éligibles | PASS |
| provider en cooldown ne bloque pas les autres | PASS |
| provider down ne rend pas le service global inutilisable | PASS |
| auth rejetée distinguée d'un transport down | PASS |
| quota indisponible distingué d'un transport down | PLANNED |
| quota mensuel local non présenté comme compteur authoritative | PASS |
| Cas | Statut |
|---------------------------------------------------------------|--------|
| cadence locale fixe représentable | PASS |
| burst documenté supérieur à la cadence moyenne représentable | PASS |
| limite dynamique keyless représentable | PASS |
| `429` classé | PASS |
| `Retry-After` honoré lorsqu'exploitable | PASS |
| cooldown expose prochain instant admissible | PASS |
| refresh all ne lance que les providers éligibles | PASS |
| provider en cooldown ne bloque pas les autres | PASS |
| provider down ne rend pas le service global inutilisable | PASS |
| auth rejetée distinguée d'un transport down | PASS |
| état `QuotaUnavailable` distinct représentable | PASS |
| quota mensuel local non présenté comme compteur authoritative | PASS |
## 7. Numeric safety
@@ -446,23 +464,23 @@ Avant la stable, les conditions d'usage et la persistance des offres gratuites d
## 8. HTTP et sécurité
| Invariant | Statut |
|------------------------------------------------|---------|
| `reqwest` seul client provider | PASS |
| aucun SDK provider | PASS |
| endpoint provider officiel fixe en V1 | PASS |
| redirects désactivés | PASS |
| proxy implicite désactivé selon policy KSP | PASS |
| connect timeout borné | PASS |
| request timeout borné | PASS |
| body réponse borné avant parsing | PASS |
| URL retirée des erreurs reqwest | PASS |
| réponse remote brute absente des KspError/logs | PASS |
| API key absente de Debug/log/error | PASS |
| 401/403 classés auth/access | PASS |
| 429 classé rate limit | PASS |
| 5xx classé transient | PASS |
| schema drift classé provider protocol | PLANNED |
| Invariant | Statut |
|------------------------------------------------|--------|
| `reqwest` seul client provider | PASS |
| aucun SDK provider | PASS |
| endpoint provider officiel fixe en V1 | PASS |
| redirects désactivés | PASS |
| proxy implicite désactivé selon policy KSP | PASS |
| connect timeout borné | PASS |
| request timeout borné | PASS |
| body réponse borné avant parsing | PASS |
| URL retirée des erreurs reqwest | PASS |
| réponse remote brute absente des KspError/logs | PASS |
| API key absente de Debug/log/error | PASS |
| 401/403 classés auth/access | PASS |
| 429 classé rate limit | PASS |
| 5xx classé transient | PASS |
| schema drift classé réponse provider invalide | PASS |
## 9. DexScreener V1
@@ -509,23 +527,24 @@ Avant la stable, les conditions d'usage et la persistance des offres gratuites d
Cette section valide l'architecture préparée par `0.2.11`; l'application elle-même reste hors scope et sera testée en `0.2.12`.
## 12. Non-régression et gates finaux prévus
## 12. Non-régression et gates finaux
| Gate | Statut |
|-------------------------------------------------|---------|
| `cargo fmt --all` | PLANNED |
| audit Rust workspace | PLANNED |
| audit Markdown tables | PLANNED |
| `cargo check --workspace` | PLANNED |
| `cargo clippy --workspace --all-targets` | PLANNED |
| `cargo test --workspace` | PLANNED |
| tests `ksp-offchain-transport-lib` | PLANNED |
| tests Config | PLANNED |
| cargo tree Off-chain Transport | PENDING |
| absence de dépendances provider SDK | PENDING |
| smokes keyless gratuits | PENDING |
| smokes keyed gratuits disponibles à l'opérateur | PENDING |
| réconciliation README/USAGE/plan/validation | PLANNED |
| Gate | Statut |
|----------------------------------------------|---------|
| `cargo fmt --all` | PASS |
| audit Rust workspace | PASS |
| audit Markdown tables | PASS |
| `cargo check --workspace` | PASS |
| `cargo clippy --workspace --all-targets` | PASS |
| `cargo test --workspace` sur `pre.011` | PASS |
| tests `ksp-offchain-transport-lib` après fix | PASS |
| tests Config après fix | PASS |
| cargo tree Off-chain Transport | PASS |
| absence de dépendances provider SDK | PASS |
| smoke keyless gratuit final | PASS |
| smoke keyed quatre credentials | SKIP |
| réconciliation README/USAGE/plan/validation | PASS |
| gate workspace de `pre.012` | PENDING |
## 13. Hors scope validé