v0.2.11-pre.001
This commit is contained in:
311
deltas/0.2.11/pre.001.md
Normal file
311
deltas/0.2.11/pre.001.md
Normal file
@@ -0,0 +1,311 @@
|
||||
<!-- file: deltas/0.2.11/pre.001.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.2.11-pre.001` — audit/sizing Off-chain price SOL/USD multi-provider
|
||||
|
||||
## 1. Base requise et vérifiée
|
||||
|
||||
Archive autoritaire fournie :
|
||||
|
||||
```text
|
||||
khadhroony-solana-project-v0.2.10-full-from-gitea.zip
|
||||
```
|
||||
|
||||
État vérifié :
|
||||
|
||||
```text
|
||||
workspace.package.version = 0.2.10
|
||||
deltas/0.2.10/rel.001.md présent
|
||||
prompts/016-V0_2_11_START_PROMPT.md présent
|
||||
ksp-offchain-transport-lib absente
|
||||
metadata .git absente de l'archive Gitea
|
||||
```
|
||||
|
||||
Cette livraison ouvre :
|
||||
|
||||
```text
|
||||
workspace.package.version = 0.2.11-pre.1
|
||||
commit attendu = v0.2.11-pre.001
|
||||
aucun tag prerelease
|
||||
```
|
||||
|
||||
## 2. Objet
|
||||
|
||||
`pre.001` exécute exclusivement le gate de cadrage obligatoire :
|
||||
|
||||
```text
|
||||
lecture base/règles/architecture
|
||||
inventaire primitives HTTP existantes
|
||||
réaudit actuel des providers de prix
|
||||
comparaison des sémantiques
|
||||
scope SOL/USD
|
||||
choix multi-provider gratuit
|
||||
absence de SDK provider
|
||||
numeric safety
|
||||
provider registry et availability
|
||||
rate limiting et refresh multiple
|
||||
Config provider-capability-aware
|
||||
cas DexScreener SOL/USD
|
||||
frontière future ksp-app-solprices-desk
|
||||
threat model
|
||||
sizing et forecast
|
||||
```
|
||||
|
||||
Aucun client provider, crate Off-chain Transport, Config runtime ou secret n'est ajouté dans cette tranche.
|
||||
|
||||
## 3. Décisions opérateur supersédant le prompt préparatoire
|
||||
|
||||
Le prompt `016` préparait SOL/USD + SOL/EUR et laissait le provider initial ouvert. Le brainstorming d'ouverture fixe désormais :
|
||||
|
||||
```text
|
||||
V1 = SOL/USD uniquement
|
||||
0.2.11 peut et doit implémenter plusieurs providers gratuits
|
||||
HTTP REST via reqwest uniquement
|
||||
aucun SDK provider
|
||||
SOL/EUR reporté
|
||||
aucun consensus/fallback automatique
|
||||
future app = ksp-app-solprices-desk
|
||||
future app = HID pure sans connaissance provider
|
||||
Off-chain Transport possède limits/exceptions/availability
|
||||
DexScreener V1 = paire SOL/USD explicite uniquement
|
||||
```
|
||||
|
||||
Ces décisions sont répercutées dans le plan, la validation, l'architecture durable, la séquence fonctionnelle et le ROADMAP global d'ouverture.
|
||||
|
||||
## 4. Providers retenus
|
||||
|
||||
Audit officiel du 2026-08-25 :
|
||||
|
||||
| Provider | Gratuit V1 | Auth possible V1 | Contrainte principale | Verdict |
|
||||
|-------------------|------------|----------------------|---------------------------------------------|---------|
|
||||
| CoinGecko | Oui | keyless ou Demo key | dynamic IP ou Demo 100/min et 10k/mois | IN |
|
||||
| CoinMarketCap | Oui | keyless ou Basic key | dynamic IP ou Basic 50/min et 15k/mois | IN |
|
||||
| CoinPaprika | Oui | aucune | 10/s IP, 20k/mois, refresh Free moyen 5 min | IN |
|
||||
| Kraken | Oui | aucune | 1/s ou moins recommandé sur public REST | IN |
|
||||
| Coinbase Exchange | Oui | aucune | 10/s IP, burst 15 | IN |
|
||||
| Jupiter Price V3 | Oui | keyless ou Free key | 0.5 RPS keyless, 1 RPS Free | IN |
|
||||
| Birdeye | Oui | API key | Standard 1 RPS, 30k CU, Price Single 3 CU | IN |
|
||||
| DexScreener | Oui | aucune | 300/min endpoints pair/token | IN |
|
||||
|
||||
Pyth est écarté de V1 à cause de la transition d'accès imminente et de l'absence de gratuité durable confirmée après trial. Binance est écarté tant que KSP n'a pas retenu un vrai marché SOL/USD ; SOL/USDT n'est pas assimilé à SOL/USD.
|
||||
|
||||
## 5. Sémantique et numérique
|
||||
|
||||
Décisions :
|
||||
|
||||
```text
|
||||
une observation conserve provider + sémantique + timestamps KSP
|
||||
provider update timestamp reste optionnel
|
||||
aucune fraîcheur provider inventée
|
||||
f64 n'est pas le canon public
|
||||
prix canonique = décimal KSP borné sans nouvelle crate decimal
|
||||
wire JSON number/string -> parser textuel sûr
|
||||
zéro/négatif/overflow/forme invalide rejetés
|
||||
```
|
||||
|
||||
Les classes de sémantique distingueront notamment agrégateur, exchange last trade, heuristique Solana, spot Solana et paire DEX.
|
||||
|
||||
## 6. Registry, availability et refresh
|
||||
|
||||
`ksp-offchain-transport-lib` sera propriétaire de :
|
||||
|
||||
```text
|
||||
inventory/registry provider
|
||||
descriptors/capabilities
|
||||
adapters/wires privés
|
||||
rate limits/cooldowns
|
||||
classification 401/403/429/5xx/transport/schema
|
||||
état provider ready/unavailable/misconfigured/quota/auth
|
||||
refresh provider générique
|
||||
refresh multiple/all générique
|
||||
```
|
||||
|
||||
Un refresh multiple lance les providers actuellement éligibles sans attendre ceux en cooldown et retourne un outcome par provider. La future UI ne contient aucune logique de scheduling.
|
||||
|
||||
## 7. DexScreener V1
|
||||
|
||||
Décision :
|
||||
|
||||
```text
|
||||
pair address Solana configurée
|
||||
endpoint pair direct
|
||||
chain et identité SOL validées
|
||||
lecture de priceUsd uniquement pour le contrat commun
|
||||
aucune découverte/selection automatique de pool
|
||||
aucun tri liquidité
|
||||
aucun consensus entre pools
|
||||
```
|
||||
|
||||
Cette policy pourra être changée dans une release ultérieure sans exposer DexScreener à l'application.
|
||||
|
||||
## 8. Config et sécurité
|
||||
|
||||
Config reste propriétaire des fichiers/env/secrets et adaptera un document standard Off-chain Transport futur.
|
||||
|
||||
Les branches seront provider-capability-aware :
|
||||
|
||||
```text
|
||||
providers keyless sans faux credential obligatoire
|
||||
modes keyless/keyed représentés quand les deux existent
|
||||
Birdeye credential obligatoire si activé
|
||||
DexScreener pair address obligatoire si activé
|
||||
origines HTTP provider fixes en V1
|
||||
aucun base_url arbitraire
|
||||
aucune limite provider librement augmentable par Config/UI
|
||||
```
|
||||
|
||||
Le threat model couvre credential exfiltration, SSRF, redirects, proxy implicite, body non borné, numeric abuse, wrong pair, stale data, rate limit, provider outage et schema drift.
|
||||
|
||||
## 9. Future `ksp-app-solprices-desk`
|
||||
|
||||
Architecture fixée pour `0.2.12` :
|
||||
|
||||
```text
|
||||
HID pure
|
||||
aucune connaissance provider
|
||||
aucune requête HTTP provider
|
||||
aucun rate limit provider côté UI
|
||||
liste issue du registry générique
|
||||
prix/état/cooldown issus du service générique
|
||||
refresh row générique
|
||||
refresh multiple générique
|
||||
```
|
||||
|
||||
`0.2.11` ne crée pas l'application.
|
||||
|
||||
## 10. Forecast
|
||||
|
||||
Chemin souple retenu :
|
||||
|
||||
```text
|
||||
pre.001 audit/sizing
|
||||
pre.002 crate + contrats + décimal
|
||||
pre.003 HTTP commun + errors + rate limiter
|
||||
pre.004 CoinGecko + CMC + CoinPaprika
|
||||
pre.005 Kraken + Coinbase
|
||||
pre.006 Jupiter + DexScreener
|
||||
pre.007 Birdeye + registry availability
|
||||
pre.008 refresh single/multiple cross-provider
|
||||
pre.009 Config std.offchain_transport
|
||||
pre.010 hardening/API/tests + docs techniques draft
|
||||
pre.011 gate technique/live final
|
||||
pre.012 réconciliation documentaire finale
|
||||
pre.013 publication minimale prompt 0.2.12 + CHANGELOG + ROADMAP
|
||||
rel.001 stable
|
||||
```
|
||||
|
||||
## 11. Fichiers ajoutés
|
||||
|
||||
```text
|
||||
docs/plans/018-V0_2_11_OFFCHAIN_PRICE_TRANSPORT_PLAN.md
|
||||
docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md
|
||||
deltas/0.2.11/pre.001.md
|
||||
```
|
||||
|
||||
## 12. Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
ROADMAP.md
|
||||
docs/000-README.md
|
||||
docs/architecture/002-LAYERS_AND_DEPENDENCIES.md
|
||||
docs/architecture/003-COMPONENT_CONTRACTS.md
|
||||
docs/architecture/004-COMPONENT_INVENTORY.md
|
||||
docs/architecture/005-DEPENDENCY_GRAPH.md
|
||||
docs/plans/000-README.md
|
||||
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
|
||||
docs/validation/000-README.md
|
||||
```
|
||||
|
||||
## 13. Fichiers supprimés
|
||||
|
||||
```text
|
||||
aucun
|
||||
```
|
||||
|
||||
## 14. Fichiers volontairement inchangés
|
||||
|
||||
```text
|
||||
CHANGELOG.md
|
||||
prompts/016-V0_2_11_START_PROMPT.md
|
||||
.env.example
|
||||
config/**
|
||||
crates/**
|
||||
README/USAGE de crates existantes
|
||||
```
|
||||
|
||||
Le prompt d'ouverture reste historique ; les supersessions sont portées par le plan/delta de la release active.
|
||||
|
||||
## 15. Sources externes réauditées
|
||||
|
||||
```text
|
||||
CoinGecko keyless/simple-price/pricing
|
||||
CoinMarketCap keyless/simple-price/pricing
|
||||
CoinPaprika REST/ticker/plans
|
||||
Kraken public market REST/rate limits
|
||||
Coinbase Exchange ticker/rate limits
|
||||
Jupiter Developer Platform/Price V3
|
||||
Birdeye pricing/rate limiting/Price Single
|
||||
DexScreener API reference
|
||||
Pyth Core transition pour décision OUT V1
|
||||
```
|
||||
|
||||
Les URLs détaillées sont conservées dans le plan 018.
|
||||
|
||||
Le gate distingue désormais explicitement accès gratuit technique et conditions d'usage : CoinGecko/CMC keyless sont orientés évaluation/prototypage selon leurs documents actuels et CoinPaprika Free est annoncé pour usage personnel. Ces points n'empêchent pas l'implémentation V1 mais seront réaudités avant la stable ; KSP ne promet aucune gratuité commerciale durable.
|
||||
|
||||
## 16. Validations exécutées dans le sandbox
|
||||
|
||||
```text
|
||||
inspection archive/version/rel/prompt PASS
|
||||
inspection absence metadata .git PASS
|
||||
inspection absence ksp-offchain-transport-lib PASS
|
||||
inventaire workspace dependencies PASS
|
||||
python3 scripts/audit_rust_workspace_rules.py PASS / clean / 0 candidate export
|
||||
audit Markdown ciblé des 12 fichiers touchés PASS / 16 tables
|
||||
audit Markdown scope session complet PASS / 115 tables / 100 files
|
||||
```
|
||||
|
||||
Le sandbox ne fournit ni `cargo` ni `rustc`. Aucun `cargo fmt/check/clippy/test` n'est donc déclaré exécuté localement. Aucun smoke provider live KSP n'est déclaré PASS dans `pre.001` puisque la crate n'existe pas encore.
|
||||
|
||||
## 17. Validations non exécutées dans `pre.001`
|
||||
|
||||
```text
|
||||
cargo fmt --all non exécuté, Cargo absent du sandbox
|
||||
cargo check --workspace non exécuté, Cargo absent du sandbox
|
||||
cargo clippy --workspace --all-targets non exécuté, Cargo absent du sandbox
|
||||
cargo test --workspace non exécuté, Cargo absent du sandbox
|
||||
aucun test adapter provider code absent
|
||||
aucun smoke live provider KSP code absent
|
||||
aucun test Config Off-chain document absent
|
||||
aucun build ksp-app-solprices-desk application hors scope
|
||||
```
|
||||
|
||||
## 18. Validation opérateur attendue avant commit
|
||||
|
||||
```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 réseau provider n'est attendu pour cette tranche documentaire de cadrage.
|
||||
|
||||
## 19. Questions ouvertes
|
||||
|
||||
Les questions fonctionnelles majeures sont closes pour démarrer l'implémentation. Restent à fixer au niveau du code dans les prereleases prévues :
|
||||
|
||||
```text
|
||||
noms Rust exacts des descriptors/outcomes/status
|
||||
bornes exactes coefficient/scale du décimal KSP
|
||||
body limit et timeouts par défaut
|
||||
forme exacte du rate limiter générique
|
||||
noms des variables KSP_SECRET provider keyed
|
||||
pair address DexScreener opérateur à configurer et live-valider
|
||||
endpoint/version CMC exact à figer après canari live courant
|
||||
```
|
||||
|
||||
Ces points ne remettent pas en cause le gate de sizing.
|
||||
Reference in New Issue
Block a user