v0.2.11-pre.001
This commit is contained in:
210
docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md
Normal file
210
docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md
Normal file
@@ -0,0 +1,210 @@
|
||||
<!-- file: docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Validation `0.2.11` — Off-chain price transport SOL/USD
|
||||
|
||||
## 1. Objet
|
||||
|
||||
Cette matrice suit la release `0.2.11 — Off-chain price transport` ouverte par `pre.001`.
|
||||
|
||||
Le contrat fonctionnel V1 est :
|
||||
|
||||
```text
|
||||
SOL/USD uniquement
|
||||
plusieurs providers gratuits admis
|
||||
HTTP REST reqwest uniquement
|
||||
aucun SDK provider
|
||||
provider/rate-limit/availability possédés par ksp-offchain-transport-lib
|
||||
Config -> Off-chain Transport sans dépendance inverse
|
||||
future ksp-app-solprices-desk purement HID et provider-agnostic
|
||||
```
|
||||
|
||||
Les statuts `PLANNED` restent non validés tant que la tranche correspondante n'est pas exécutée.
|
||||
|
||||
## 2. Gate `0.2.11-pre.001`
|
||||
|
||||
| Critère | Statut | Preuve |
|
||||
|---------------------------------------------------------------|--------|-----------------------------------------------------------------------------------------|
|
||||
| archive stable `v0.2.10` utilisée | PASS | archive Gitea fournie par l'opérateur |
|
||||
| `workspace.package.version = 0.2.10` à l'entrée | PASS | inspection `Cargo.toml` |
|
||||
| `deltas/0.2.10/rel.001.md` présent | PASS | inspection archive |
|
||||
| `prompts/016-V0_2_11_START_PROMPT.md` présent | PASS | inspection archive |
|
||||
| `.git` absent de l'archive | PASS | inspection filesystem |
|
||||
| `ksp-offchain-transport-lib` absent à l'entrée | PASS | inventaire workspace |
|
||||
| primitives reqwest/serde/serde_json/tokio/http déjà présentes | PASS | inventaire `[workspace.dependencies]` |
|
||||
| audit providers gratuit/live actuel | PASS | sources officielles CoinGecko, CMC, CoinPaprika, Kraken, Coinbase, Jupiter, Birdeye, DS |
|
||||
| conditions d'usage gratuites distinguées du transport | PASS | plan 018, gratuité technique distincte de licence commerciale durable |
|
||||
| SOL/USD retenu comme seule paire V1 | PASS | décision opérateur + plan 018 |
|
||||
| aucun SDK provider retenu | PASS | décision opérateur + plan 018 |
|
||||
| huit providers retenus pour implémentation | PASS | plan 018 section provider |
|
||||
| DexScreener V1 limité à une paire SOL/USD configurée | PASS | décision opérateur + plan 018 |
|
||||
| future `ksp-app-solprices-desk` purement HID | PASS | décision opérateur + architecture |
|
||||
| ownership rate limits/availability dans Off-chain Transport | PASS | décision opérateur + plan 018 |
|
||||
| threat model V1 établi | PASS | plan 018 |
|
||||
| forecast prereleases établi | PASS | plan 018 |
|
||||
| code runtime provider ajouté en `pre.001` | N/A | interdit par le gate, aucune crate créée |
|
||||
|
||||
## 3. Matrice provider prévue
|
||||
|
||||
| Provider | SOL/USD V1 | Gratuit V1 | Mode auth prévu | Test déterministe | Smoke live | Statut courant |
|
||||
|-------------------|------------|------------|----------------------|-------------------|------------|----------------|
|
||||
| CoinGecko | Oui | Oui | keyless ou Demo key | PLANNED | PLANNED | AUDITED |
|
||||
| CoinMarketCap | Oui | Oui | keyless ou Basic key | PLANNED | PLANNED | AUDITED |
|
||||
| CoinPaprika | Oui | Oui | aucune | PLANNED | PLANNED | AUDITED |
|
||||
| Kraken | Oui | Oui | aucune | PLANNED | PLANNED | AUDITED |
|
||||
| Coinbase Exchange | Oui | Oui | aucune | PLANNED | PLANNED | AUDITED |
|
||||
| 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 |
|
||||
|
||||
`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.
|
||||
|
||||
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.
|
||||
|
||||
## 4. Contrat public prévu
|
||||
|
||||
| Invariant | Statut |
|
||||
|------------------------------------------------------------------------|---------|
|
||||
| surface publique limitée à SOL/USD dans V1 | PLANNED |
|
||||
| identifiants provider opaques pour les consumers | PLANNED |
|
||||
| provenance provider toujours observable | PLANNED |
|
||||
| sémantique de prix observable sans prétendre à une équivalence | PLANNED |
|
||||
| timestamp requête/réception KSP présents | PLANNED |
|
||||
| timestamp provider optionnel seulement lorsqu'il est réellement fourni | PLANNED |
|
||||
| absence de prix distincte de zéro | PLANNED |
|
||||
| `f64` non utilisé comme canon public | PLANNED |
|
||||
| aucune structure wire provider exportée | PLANNED |
|
||||
| aucune URL/header/asset id provider requis côté app | PLANNED |
|
||||
| registry provider et état runtime possédés par Off-chain Transport | PLANNED |
|
||||
| refresh provider par identifiant générique | PLANNED |
|
||||
| refresh multiple sans connaissance provider côté consumer | PLANNED |
|
||||
|
||||
## 5. Rate limiting et availability
|
||||
|
||||
| Cas | Statut |
|
||||
|---------------------------------------------------------------|---------|
|
||||
| cadence locale fixe représentable | PLANNED |
|
||||
| burst documenté représentable | PLANNED |
|
||||
| limite dynamique keyless représentable | PLANNED |
|
||||
| `429` classé | PLANNED |
|
||||
| `Retry-After` honoré lorsqu'exploitable | PLANNED |
|
||||
| cooldown expose prochain instant admissible | PLANNED |
|
||||
| refresh all ne lance que les providers éligibles | PLANNED |
|
||||
| provider en cooldown ne bloque pas les autres | PLANNED |
|
||||
| provider down ne rend pas le service global inutilisable | PLANNED |
|
||||
| auth manquante distinguée d'un transport down | PLANNED |
|
||||
| quota indisponible distingué d'un transport down | PLANNED |
|
||||
| quota mensuel local non présenté comme compteur authoritative | PLANNED |
|
||||
|
||||
## 6. Numeric safety
|
||||
|
||||
| Cas | Statut |
|
||||
|-----------------------------------------------------|---------|
|
||||
| décimal string valide | PLANNED |
|
||||
| JSON number valide sans passage canonique par `f64` | PLANNED |
|
||||
| notation scientifique bornée | PLANNED |
|
||||
| coefficient/scale overflow rejeté | PLANNED |
|
||||
| valeur négative rejetée | PLANNED |
|
||||
| zéro rejeté pour une observation réussie | PLANNED |
|
||||
| NaN/Inf impossibles dans le type canonique | PLANNED |
|
||||
| serialization canonique sans perte | PLANNED |
|
||||
| round-trip public déterministe | PLANNED |
|
||||
|
||||
## 7. HTTP et sécurité
|
||||
|
||||
| Invariant | Statut |
|
||||
|------------------------------------------------|---------|
|
||||
| `reqwest` seul client provider | PLANNED |
|
||||
| aucun SDK provider | PLANNED |
|
||||
| endpoint provider officiel fixe en V1 | PLANNED |
|
||||
| redirects désactivés | PLANNED |
|
||||
| proxy implicite désactivé selon policy KSP | PLANNED |
|
||||
| connect timeout borné | PLANNED |
|
||||
| request timeout borné | PLANNED |
|
||||
| body réponse borné avant parsing | PLANNED |
|
||||
| URL retirée des erreurs reqwest | PLANNED |
|
||||
| réponse remote brute absente des KspError/logs | PLANNED |
|
||||
| API key absente de Debug/log/error | PLANNED |
|
||||
| 401/403 classés auth/access | PLANNED |
|
||||
| 429 classé rate limit | PLANNED |
|
||||
| 5xx classé transient | PLANNED |
|
||||
| schema drift classé provider protocol | PLANNED |
|
||||
|
||||
## 8. DexScreener V1
|
||||
|
||||
| Invariant | Statut |
|
||||
|----------------------------------------------|---------|
|
||||
| pair address SOL/USD explicite dans settings | PLANNED |
|
||||
| `chainId = solana` vérifié | PLANNED |
|
||||
| identité SOL de la paire vérifiée | PLANNED |
|
||||
| `priceUsd` utilisé comme prix commun | PLANNED |
|
||||
| aucune recherche automatique de pool | PLANNED |
|
||||
| aucun tri automatique par liquidité | PLANNED |
|
||||
| aucune moyenne/consensus entre pools | PLANNED |
|
||||
|
||||
## 9. Config -> Off-chain Transport
|
||||
|
||||
| Invariant | Statut |
|
||||
|------------------------------------------------------------------|---------|
|
||||
| Off-chain Transport ne dépend pas de Config | PLANNED |
|
||||
| document standard offchain dédié | PLANNED |
|
||||
| branches provider conditionnelles dans schema | PLANNED |
|
||||
| CoinGecko keyless/Demo représentés | PLANNED |
|
||||
| CoinMarketCap keyless/Basic représentés | PLANNED |
|
||||
| Jupiter keyless/Free représentés | PLANNED |
|
||||
| Birdeye exige credential lorsqu'activé | PLANNED |
|
||||
| DexScreener exige pair address lorsqu'activé | PLANNED |
|
||||
| providers sans auth n'exposent pas de faux champ API key | PLANNED |
|
||||
| secrets via Config uniquement | PLANNED |
|
||||
| `.env.example` synchronisé pour les secrets réellement ajoutés | PLANNED |
|
||||
| aucune cadence provider configurable au-dessus de la limite sûre | PLANNED |
|
||||
|
||||
## 10. Frontière future `ksp-app-solprices-desk`
|
||||
|
||||
| Invariant | Statut |
|
||||
|--------------------------------------------------------------------|---------|
|
||||
| nom de l'application fixé à `ksp-app-solprices-desk` | DECIDED |
|
||||
| rôle HID uniquement | DECIDED |
|
||||
| aucun enum/provider spécifique requis dans l'UI | PLANNED |
|
||||
| aucun endpoint/header/provider id propriétaire dans l'app | PLANNED |
|
||||
| table construite depuis l'inventaire générique Off-chain Transport | PLANNED |
|
||||
| refresh row appelle une opération générique | PLANNED |
|
||||
| refresh multiple appelle une opération générique | PLANNED |
|
||||
| cooldown/availability affichables depuis état générique | PLANNED |
|
||||
| aucune logique de rate limiting dans Tauri/frontend | PLANNED |
|
||||
|
||||
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`.
|
||||
|
||||
## 11. Non-régression et gates finaux prévus
|
||||
|
||||
| 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 | PLANNED |
|
||||
| absence de dépendances provider SDK | PLANNED |
|
||||
| smokes keyless gratuits | PLANNED |
|
||||
| smokes keyed gratuits disponibles à l'opérateur | PLANNED |
|
||||
| réconciliation README/USAGE/plan/validation | PLANNED |
|
||||
|
||||
## 12. Hors scope validé
|
||||
|
||||
```text
|
||||
SOL/EUR et autres quotes
|
||||
SPL token price générique
|
||||
OHLCV/historique
|
||||
streaming price
|
||||
fallback automatique
|
||||
consensus/moyenne/médiane
|
||||
pool discovery DexScreener
|
||||
Price Desk dans 0.2.11
|
||||
Wallet Desk dans 0.2.11
|
||||
Pyth V1
|
||||
Binance SOL/USDT assimilé à SOL/USD
|
||||
```
|
||||
Reference in New Issue
Block a user