v0.2.11-pre.012
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md -->
|
||||
<!-- version: 90 -->
|
||||
<!-- version: 91 -->
|
||||
|
||||
# Séquence des releases fonctionnelles KSP
|
||||
|
||||
@@ -510,7 +510,7 @@ Ces providers ne déplacent pas la séquence active et ne reçoivent ni façade,
|
||||
|
||||
### `0.2.11` / `0.2.12` — Off-chain price + SOL Prices Desk
|
||||
|
||||
`0.2.11` introduit `ksp-offchain-transport-lib` avec une première surface volontairement limitée à SOL/USD. Le gate `pre.001` retient plusieurs providers gratuits accessibles en HTTP REST simple ; leurs adapters utilisent uniquement `reqwest` et des DTOs KSP privés, sans SDK provider. Off-chain Transport possède le registry provider, les capacités/rate limits, les indisponibilités et les refresh individuels/multiples ; aucun consensus ou fallback automatique multi-provider n'est introduit.
|
||||
`0.2.11` introduit `ksp-offchain-transport-lib` avec une première surface volontairement limitée à SOL/USD. La release retient huit adapters REST (`CoinGecko`, `CoinMarketCap`, `CoinPaprika`, `Kraken`, `Coinbase Exchange`, `Jupiter Price V3`, `Birdeye`, `DexScreener`) utilisant `reqwest` et des DTOs KSP privés, sans SDK provider. Off-chain Transport possède le registry, les capacités/rate limits, les indisponibilités et les refresh individuels/multiples séquentiels ; Config construit le service depuis `std.offchain_transport`. Le gate live final keyless passe `7/7` après correction du paramètre CoinMarketCap Simple Price V2. Aucun consensus, fallback automatique ou découverte de pool DexScreener n'est introduit.
|
||||
|
||||
`0.2.12` ajoute `ksp-app-solprices-desk`, HID pure qui ne connaît aucun provider et consomme uniquement les descriptors, observations, états et opérations génériques de `ksp-offchain-transport-lib`. Sa première vue liste les providers/prix et permet refresh individuel/multiple en laissant entièrement les limitations au service. Après stabilisation de cette application spécialisée, la même release doit intégrer la capacité de prix offchain dans `ksp-app-wallet-desk` sans dupliquer la récupération/normalisation appartenant au composant spécialisé.
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!-- file: docs/plans/018-V0_2_11_OFFCHAIN_PRICE_TRANSPORT_PLAN.md -->
|
||||
<!-- version: 20 -->
|
||||
<!-- version: 21 -->
|
||||
|
||||
# Plan `0.2.11` — Off-chain price transport SOL/USD multi-provider
|
||||
|
||||
**Statut courant : `0.2.11-pre.011-fix.001` corrige le contrat de requête CoinMarketCap Simple Price V2 après le premier smoke live. Le gate déterministe de `pre.011` est PASS et six providers keyless sur sept ont répondu correctement ; CoinMarketCap a échoué parce que KSP envoyait encore `ids=5426` alors que la surface V2 officielle exige `id=5426`. Le re-smoke keyless opérateur reste requis avant `pre.012`.**
|
||||
**Statut courant : `0.2.11-pre.012` réconcilie la documentation finale après fermeture de la lane technique/live. Le gate déterministe complet de `pre.011` est PASS ; `pre.011-fix.001` a corrigé CoinMarketCap Simple Price V2 de `ids=5426` vers `id=5426`, puis le re-smoke keyless opérateur a passé les sept providers sans credential. Le smoke keyed commun reste `SKIP opérateur` autorisé faute des quatre credentials gratuits. Aucun changement runtime n'est introduit dans `pre.012`.**
|
||||
|
||||
## 1. Base et autorité
|
||||
|
||||
@@ -805,21 +805,21 @@ Durcissement de la façade publique avec `#[non_exhaustive]` sur les enums évol
|
||||
|
||||
### `pre.011` — Gate technique et live final
|
||||
|
||||
**Statut : implémenté ; gate déterministe et smokes opérateur à exécuter.**
|
||||
**Statut : réalisé ; gate déterministe complet PASS, premier smoke keyless 6/7 puis correctif ciblé.**
|
||||
|
||||
Nouvel audit final des huit contrats provider, ajout de `tests/market_price_live_smoke.rs`, smoke keyless de sept providers, smoke keyed des quatre modes gratuits avec secrets sur `stdin`, vérification des graphes Cargo et reprise du gate workspace complet. Aucun endpoint, parser, rate-limit, Config ou comportement de refresh n'est modifié par cette tranche.
|
||||
|
||||
#### `pre.011-fix.001` — Paramètre CoinMarketCap Simple Price V2
|
||||
|
||||
**Statut : implémenté ; re-smoke keyless opérateur requis.**
|
||||
**Statut : réalisé ; re-smoke keyless 7/7 PASS.**
|
||||
|
||||
Le premier smoke live keyless de `pre.011` a tenté les sept providers et n'a remonté qu'un échec CoinMarketCap. Le réaudit officiel ciblé a confirmé que `GET /v2/simple/price` et son équivalent keyless `/public-api/v2/simple/price` utilisent le paramètre `id`, singulier. L'adapter KSP envoyait encore `ids`, hérité d'une forme préparatoire erronée. Le correctif remplace uniquement `ids=5426` par `id=5426` pour les modes Keyless et Basic et ajoute un canari exact sur la query string. Aucun endpoint, parser, rate-limit, credential, sémantique ou contrat générique de refresh n'est modifié.
|
||||
Le premier smoke live keyless de `pre.011` a tenté les sept providers et n'a remonté qu'un échec CoinMarketCap. Le réaudit officiel ciblé a confirmé que `GET /v2/simple/price` et son équivalent keyless `/public-api/v2/simple/price` utilisent le paramètre `id`, singulier. L'adapter KSP envoyait encore `ids`, hérité d'une forme préparatoire erronée. Le correctif remplace uniquement `ids=5426` par `id=5426` pour les modes Keyless et Basic et ajoute un canari exact sur la query string. Aucun endpoint, parser, rate-limit, credential, sémantique ou contrat générique de refresh n'est modifié. Le gate rejoué sur `pre.011-fix.001` confirme audits Rust/Markdown, `cargo check`, Clippy, tests Off-chain/Config et surtout le smoke keyless réel `7/7` PASS. Le `cargo test --workspace` complet avait déjà passé sur `pre.011` avant ce correctif ciblé ; `pre.012` le rejoue comme gate documentaire final.
|
||||
|
||||
### `pre.012` — Réconciliation documentaire finale
|
||||
|
||||
**Statut : planifié.**
|
||||
**Statut : réalisé ; gate documentaire opérateur à exécuter.**
|
||||
|
||||
Réconciliation finale du plan, de la validation, des README/USAGE, de l'architecture et des références durables après les gates techniques.
|
||||
Réconciliation finale du plan, de la validation, des README/USAGE Off-chain, de la séquence fonctionnelle et de l'index documentaire après fermeture du gate live keyless. Les statuts résiduels `PLANNED/PENDING` du scope V1 sont convertis en contrats réellement livrés, `SKIP opérateur` ou hors-scope explicite. Aucun comportement Rust, test, schema, Config exécutable, endpoint, dépendance ou feature n'est modifié ; seule la rustdoc crate-root retire sa référence obsolète à `pre.010`.
|
||||
|
||||
### `pre.013` — Préparation minimale de publication
|
||||
|
||||
|
||||
@@ -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é
|
||||
|
||||
|
||||
Reference in New Issue
Block a user