v0.2.11-pre.012
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
# file: Cargo.toml
|
||||
# version: 283
|
||||
# version: 284
|
||||
|
||||
[workspace]
|
||||
resolver = "3"
|
||||
members = ["crates/ksp-app-config-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.2.11-pre.11.fix.1"
|
||||
version = "0.2.11-pre.12"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: crates/ksp-offchain-transport-lib/README.md -->
|
||||
<!-- version: 1 -->
|
||||
<!-- version: 2 -->
|
||||
|
||||
# ksp-offchain-transport-lib
|
||||
|
||||
@@ -135,4 +135,12 @@ URL provider configurable
|
||||
- [`../../docs/plans/018-V0_2_11_OFFCHAIN_PRICE_TRANSPORT_PLAN.md`](../../docs/plans/018-V0_2_11_OFFCHAIN_PRICE_TRANSPORT_PLAN.md) — plan de release ;
|
||||
- [`../../docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md`](../../docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md) — matrice de validation.
|
||||
|
||||
Ce README est un **brouillon technique de `pre.010`**. La réconciliation documentaire finale reste la responsabilité de `pre.012`, après le gate technique/live de `pre.011`.
|
||||
## Validation de release `0.2.11`
|
||||
|
||||
La candidate finale a été validée sur les huit adapters par tests déterministes. Le smoke live keyless de clôture a réellement rafraîchi les sept modes ne nécessitant aucun credential : Coinbase Exchange, CoinGecko, CoinMarketCap, CoinPaprika, DexScreener, Jupiter et Kraken. Un premier passage a révélé le paramètre CoinMarketCap V2 erroné `ids`; `pre.011-fix.001` l'a corrigé en `id=5426`, puis le re-smoke a passé les sept providers.
|
||||
|
||||
Birdeye n'expose pas de mode keyless V1. Le smoke keyed commun Birdeye/CoinGecko Demo/CoinMarketCap Basic/Jupiter Free reste opt-in et peut être `SKIP opérateur` lorsque les quatre credentials gratuits ne sont pas disponibles. KSP ne transforme jamais cette absence de credentials en preuve live fictive.
|
||||
|
||||
Les offres gratuites, quotas et conditions d'usage appartiennent aux providers et peuvent évoluer indépendamment du contrat KSP. Les descriptors représentent le snapshot audité pour `0.2.11`; un changement commercial ou de quota futur peut rendre un provider indisponible sans modifier la façade provider-neutral.
|
||||
|
||||
Ce README est la documentation durable de la surface `0.2.11`. Les détails de construction et les commandes de smoke sont conservés dans [`USAGE.md`](USAGE.md), tandis que le plan et la matrice de validation enregistrent les décisions et preuves de release.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!-- file: crates/ksp-offchain-transport-lib/USAGE.md -->
|
||||
<!-- version: 1 -->
|
||||
<!-- version: 2 -->
|
||||
|
||||
# Usage de ksp-offchain-transport-lib
|
||||
|
||||
Cette page montre la surface technique disponible à `0.2.11-pre.010`. Les credentials et documents runtime doivent normalement être résolus par `ksp-config-lib`; les constructions directes ci-dessous servent surtout aux tests, outils bas niveau et compositions programmatiques maîtrisées.
|
||||
Cette page documente la surface stable préparée pour `0.2.11`. Les credentials et documents runtime doivent normalement être résolus par `ksp-config-lib`; les constructions directes ci-dessous servent surtout aux tests, outils bas niveau et compositions programmatiques maîtrisées.
|
||||
|
||||
## 1. Construire un service programmatique
|
||||
|
||||
@@ -147,6 +147,35 @@ payload de Config secret
|
||||
|
||||
`ksp-offchain-transport-lib` utilise `ksp-logging-lib` et son `TRACING_TARGET` propriétaire ; une application ne doit pas ajouter un bypass direct `tracing` pour obtenir les payloads rejetés.
|
||||
|
||||
## 10. Statut documentaire
|
||||
## 10. Smokes live de release
|
||||
|
||||
Ce document est un **brouillon technique de `pre.010`**. Il ne vaut ni smoke live, ni garantie commerciale sur les plans gratuits des providers. `pre.011` porte les contrôles techniques/live finaux ; `pre.012` porte la réconciliation documentaire finale.
|
||||
Le smoke keyless final ne requiert aucun secret et couvre les sept modes V1 concernés :
|
||||
|
||||
```bash
|
||||
cargo test -p ksp-offchain-transport-lib \
|
||||
--test market_price_live_smoke \
|
||||
keyless_market_price_providers_live_smoke \
|
||||
-- --ignored --exact --nocapture --test-threads=1
|
||||
```
|
||||
|
||||
Le gate `0.2.11-pre.011-fix.001` a passé ce smoke en `7/7`. Le test ne compare jamais les providers à un prix exact commun : il valide l'identité, la paire SOL/USD, la sémantique, un prix canonique positif et la cohérence des timestamps disponibles.
|
||||
|
||||
Le smoke keyed reste volontairement distinct. Il lit quatre clés sur `stdin`, dans l'ordre Birdeye, CoinGecko Demo, CoinMarketCap Basic et Jupiter Free :
|
||||
|
||||
```bash
|
||||
printf '%s\n%s\n%s\n%s\n' \
|
||||
"$KSP_SECRET_BIRDEYE_API_KEY" \
|
||||
"$KSP_SECRET_COINGECKO_DEMO_API_KEY" \
|
||||
"$KSP_SECRET_COINMARKETCAP_API_KEY" \
|
||||
"$KSP_SECRET_JUPITER_API_KEY" \
|
||||
| cargo test -p ksp-offchain-transport-lib \
|
||||
--test market_price_live_smoke \
|
||||
keyed_market_price_providers_live_smoke \
|
||||
-- --ignored --exact --nocapture --test-threads=1
|
||||
```
|
||||
|
||||
Ce second smoke peut être omis si l'opérateur ne possède pas les quatre credentials ; l'absence de credentials doit alors rester explicitement `SKIP opérateur`.
|
||||
|
||||
## 11. Statut documentaire
|
||||
|
||||
Ce document est la référence d'usage durable de la surface `market_price` livrée par `0.2.11`. Il ne promet ni prix identique entre providers, ni disponibilité permanente de leurs plans gratuits, ni compatibilité avec une surface provider qui changerait après la release.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-offchain-transport-lib/src/lib.rs
|
||||
// version: 11
|
||||
// version: 12
|
||||
|
||||
#![warn(missing_docs)]
|
||||
#![deny(unreachable_pub)]
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
//! KSP-owned off-chain transport foundation.
|
||||
//!
|
||||
//! `0.2.11-pre.010` hardens the complete SOL/USD V1 surface over eight providers. The crate owns exact decimal normalization, provider adapters, hardened
|
||||
//! `0.2.11` delivers the complete SOL/USD V1 surface over eight providers. The crate owns exact decimal normalization, provider adapters, hardened
|
||||
//! HTTP, non-blocking rate-limit/cooldown handling, provider-neutral registry/availability and individual/multiple/all refresh operations. Provider-specific
|
||||
//! setup remains confined to composition while runtime consumers can operate on opaque provider identifiers, registry projections and normalized outcomes.
|
||||
//! Config integration is implemented externally by `ksp-config-lib`; this crate remains independent from Config and never reads KSP environment variables
|
||||
|
||||
154
deltas/0.2.11/pre.012.md
Normal file
154
deltas/0.2.11/pre.012.md
Normal file
@@ -0,0 +1,154 @@
|
||||
<!-- file: deltas/0.2.11/pre.012.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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.
|
||||
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