v0.2.11-pre.011
This commit is contained in:
192
deltas/0.2.11/pre.011.md
Normal file
192
deltas/0.2.11/pre.011.md
Normal file
@@ -0,0 +1,192 @@
|
||||
<!-- file: deltas/0.2.11/pre.011.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.2.11-pre.011` — Gate technique et live final
|
||||
|
||||
## 1. Base requise
|
||||
|
||||
Cette tranche s'applique exclusivement après `0.2.11-pre.010-fix.001`, dont le gate opérateur complet est PASS.
|
||||
|
||||
Version Cargo attendue à l'entrée :
|
||||
|
||||
```text
|
||||
0.2.11-pre.10.fix.1
|
||||
```
|
||||
|
||||
Version Cargo de sortie :
|
||||
|
||||
```text
|
||||
0.2.11-pre.11
|
||||
```
|
||||
|
||||
## 2. Mission
|
||||
|
||||
`pre.011` ne développe plus de fonctionnalité Off-chain Transport. Elle possède uniquement le gate technique/live final avant la réconciliation documentaire de `pre.012` :
|
||||
|
||||
```text
|
||||
réaudit officiel des huit providers V1
|
||||
harness live keyless durable
|
||||
harness live keyed durable
|
||||
validation de non-court-circuit du batch
|
||||
vérification finale dependency graph / absence SDK provider
|
||||
rejeu des gates workspace
|
||||
```
|
||||
|
||||
Aucun endpoint, DTO wire, parser, rate-limit, Config ou comportement de `MarketPriceService` n'est modifié.
|
||||
|
||||
## 3. Réaudit provider du `2026-08-26`
|
||||
|
||||
Les contrats codés restent compatibles avec la documentation provider courante :
|
||||
|
||||
```text
|
||||
CoinGecko public keyless + Demo ; Simple Price + last_updated_at ; Demo 100/min
|
||||
CoinMarketCap Simple Price V2 ; /public-api keyless ; Basic gratuit disponible
|
||||
CoinPaprika 10 requêtes/s/IP ; Free 20k/mois ; données pouvant dater jusqu'à 10 min
|
||||
Kraken Ticker public SOLUSD ; cadence sûre 1 appel/s ou moins
|
||||
Coinbase Exchange /products/SOL-USD/ticker ; 10 requêtes/s/IP, burst 15
|
||||
Jupiter Price V3 api.jup.ag ; keyless/Free ; usdPrice + blockId
|
||||
Birdeye Standard ; 1 RPS ; 30 000 CU ; Price Single 3 CU
|
||||
DexScreener direct pair endpoint ; 300 requêtes/min ; aucune discovery KSP
|
||||
```
|
||||
|
||||
La documentation CoinPaprika est contradictoire sur la fraîcheur Free : la référence ticker mentionne environ 5 minutes en moyenne alors que Plans/Pricing annonce jusqu’à 10 minutes. Cela ne modifie pas KSP : aucune cadence provider n'est présentée comme freshness authoritative et aucun scheduler V1 n'est dérivé de cette information.
|
||||
|
||||
## 4. Smoke keyless
|
||||
|
||||
Nouveau test ignoré :
|
||||
|
||||
```text
|
||||
crates/ksp-offchain-transport-lib/tests/market_price_live_smoke.rs
|
||||
keyless_market_price_providers_live_smoke
|
||||
```
|
||||
|
||||
Il couvre en une seule exécution séquentielle :
|
||||
|
||||
```text
|
||||
Coinbase Exchange
|
||||
CoinGecko keyless
|
||||
CoinMarketCap keyless
|
||||
CoinPaprika
|
||||
DexScreener
|
||||
Jupiter keyless
|
||||
Kraken
|
||||
```
|
||||
|
||||
DexScreener utilise exclusivement la paire publique explicite Orca SOL/USDC :
|
||||
|
||||
```text
|
||||
7qbRF6YsyGuLUVs6Y1q64bdVrfe4ZcUUz1JRdoVNUJnm
|
||||
```
|
||||
|
||||
Cette paire a été revalidée au `2026-08-26` avec WSOL comme base. Elle n'est ni une configuration runtime par défaut, ni une découverte de pool.
|
||||
|
||||
Le smoke valide uniquement des invariants non volatils :
|
||||
|
||||
```text
|
||||
une observation produite pour chaque provider
|
||||
provider_id identique à l'outcome
|
||||
MarketPricePair::SolUsd
|
||||
prix exact positif déjà validé par MarketPriceDecimal
|
||||
received_at >= request_started_at
|
||||
sémantique identique au descriptor du registry
|
||||
```
|
||||
|
||||
Aucun prix exact n'est figé.
|
||||
|
||||
Les sept outcomes sont collectés avant l'assertion finale. Un provider externe en défaut ne peut donc pas empêcher les providers suivants d'être tentés ; le smoke échoue ensuite en listant seulement les IDs et availability génériques en échec.
|
||||
|
||||
## 5. Smoke keyed
|
||||
|
||||
Second test ignoré :
|
||||
|
||||
```text
|
||||
keyed_market_price_providers_live_smoke
|
||||
```
|
||||
|
||||
Il couvre :
|
||||
|
||||
```text
|
||||
Birdeye Standard
|
||||
CoinGecko Demo
|
||||
CoinMarketCap Basic
|
||||
Jupiter Free
|
||||
```
|
||||
|
||||
Les quatre API keys sont lues depuis `stdin` dans cet ordre. Elles ne sont jamais des arguments CLI, ne sont jamais imprimées et ne sont jamais lues directement depuis l'environnement par `ksp-offchain-transport-lib`.
|
||||
|
||||
La provenance `KSP_SECRET_*` de la composition de production reste vérifiée séparément par les tests déterministes `ksp-config-lib`.
|
||||
|
||||
Si l'opérateur ne possède pas les quatre credentials gratuits, ce smoke doit être consigné `SKIP opérateur`; il ne doit pas être déclaré PASS sans exécution.
|
||||
|
||||
## 6. Gate opérateur déterministe
|
||||
|
||||
```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 -p ksp-offchain-transport-lib
|
||||
cargo test -p ksp-config-lib
|
||||
cargo test --workspace
|
||||
cargo tree -p ksp-offchain-transport-lib --edges normal
|
||||
```
|
||||
|
||||
Le `cargo tree` doit confirmer l'absence de SDK provider et l'absence de dépendance `ksp-offchain-transport-lib -> ksp-config-lib`.
|
||||
|
||||
## 7. Gate live keyless obligatoire
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Ce gate effectue des requêtes HTTPS externes réelles et doit être exécuté immédiatement avant `pre.012`.
|
||||
|
||||
## 8. Gate live keyed conditionnel
|
||||
|
||||
Si les quatre credentials sont disponibles dans le shell opérateur :
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Ne jamais coller les secrets dans le delta ou dans un log retourné. Si les quatre credentials ne sont pas disponibles, consigner `SKIP opérateur`.
|
||||
|
||||
## 9. Fichiers ajoutés/modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-offchain-transport-lib/tests/market_price_live_smoke.rs
|
||||
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.011.md
|
||||
```
|
||||
|
||||
## 10. Contrôles sandbox avant livraison
|
||||
|
||||
```text
|
||||
General Rust rule audit: clean
|
||||
Rust export completeness audit: 0 candidate(s)
|
||||
KSP workspace Rust rule audit: clean
|
||||
Markdown table audit: clean (125 tables / 120 files)
|
||||
Rust > 160 colonnes dans le nouveau smoke: 0
|
||||
```
|
||||
|
||||
Cargo n'est pas disponible dans l'environnement de construction ; les gates Cargo et live restent donc opérateur.
|
||||
|
||||
## 11. Sortie attendue
|
||||
|
||||
`pre.011` n'est close qu'après retour opérateur du gate déterministe, du `cargo tree` et du smoke keyless. Le smoke keyed est PASS s'il est exécuté avec les quatre credentials, sinon `SKIP opérateur` explicite.
|
||||
|
||||
Après ce gate seulement, `pre.012` peut porter la réconciliation documentaire finale.
|
||||
Reference in New Issue
Block a user