v0.2.11-pre.011

This commit is contained in:
2026-08-26 14:37:59 +02:00
parent 98708df6e0
commit 251f9f9ad8
5 changed files with 461 additions and 46 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md -->
<!-- version: 17 -->
<!-- version: 18 -->
# Validation `0.2.11` — Off-chain price transport SOL/USD
@@ -315,42 +315,64 @@ La tranche n'ajoute aucune URL provider configurable, aucun SDK provider et aucu
## 3.13 Gate `0.2.11-pre.010`
| Critère | Statut | Preuve |
|------------------------------------------------------------------------|---------|-----------------------------------------------------|
| version workspace `0.2.11-pre.10.fix.1` | PASS | `Cargo.toml` racine |
| enums publiques évolutives marquées `#[non_exhaustive]` | PASS | provider/access modes/setup + canari completeness |
| adapter Config future-safe face aux access modes non exhaustifs | PASS | branches wildcard vers erreur effective sûre |
| inventaire exact des huit providers et sémantiques verrouillé | PASS | `tests/release_completeness.rs` |
| aucun environnement lu par les modules `market_price_*` | PASS | `tests/security_hardening.rs` |
| aucun `as_f64` utilisé comme vérité de prix `market_price` | PASS | `tests/security_hardening.rs` |
| aucun bypass logging direct dans le workspace | PASS | scanner global `ksp-logging-lib/tests/ownership.rs` |
| Debug keyed settings/service ne divulgue pas les API keys | PASS | canari secret déterministe |
| Config rejette URL provider et override de rate limit | PASS | schema strict + test Config adversarial |
| timestamps RFC3339/pre-epoch/overflow durcis | PASS | unit test `market_price_adapter` |
| JSON numeric pathologique/null/non-numérique rejeté | PASS | unit test `market_price_decimal` |
| provenance accepte la borne et rejette trim/control/oversize | PASS | unit test `market_price_observation` |
| `refresh_many` / `refresh_all` V1 documentés séquentiels/déterministes | PASS | plan + `README.md` / `USAGE.md` Off-chain |
| README/USAGE techniques créés sans usurper la réconciliation finale | PASS | crate Off-chain + compléments Config |
| audit Rust sandbox | PASS | clean, 0 candidate export |
| audit Markdown sandbox | PASS | clean sur le fix |
| gate brut `pre.010` | FAIL | workspace ownership logging : 1 canari FAIL |
| fix `pre.010-fix.001` statique | PASS | doublon lexical retiré, audits sandbox |
| gate Cargo complet du fix | PLANNED | à rejouer avant `pre.011` |
| Critère | Statut | Preuve |
|------------------------------------------------------------------------|--------|-----------------------------------------------------|
| version workspace `0.2.11-pre.10.fix.1` | PASS | `Cargo.toml` racine |
| enums publiques évolutives marquées `#[non_exhaustive]` | PASS | provider/access modes/setup + canari completeness |
| adapter Config future-safe face aux access modes non exhaustifs | PASS | branches wildcard vers erreur effective sûre |
| inventaire exact des huit providers et sémantiques verrouillé | PASS | `tests/release_completeness.rs` |
| aucun environnement lu par les modules `market_price_*` | PASS | `tests/security_hardening.rs` |
| aucun `as_f64` utilisé comme vérité de prix `market_price` | PASS | `tests/security_hardening.rs` |
| aucun bypass logging direct dans le workspace | PASS | scanner global `ksp-logging-lib/tests/ownership.rs` |
| Debug keyed settings/service ne divulgue pas les API keys | PASS | canari secret déterministe |
| Config rejette URL provider et override de rate limit | PASS | schema strict + test Config adversarial |
| timestamps RFC3339/pre-epoch/overflow durcis | PASS | unit test `market_price_adapter` |
| JSON numeric pathologique/null/non-numérique rejeté | PASS | unit test `market_price_decimal` |
| provenance accepte la borne et rejette trim/control/oversize | PASS | unit test `market_price_observation` |
| `refresh_many` / `refresh_all` V1 documentés séquentiels/déterministes | PASS | plan + `README.md` / `USAGE.md` Off-chain |
| README/USAGE techniques créés sans usurper la réconciliation finale | PASS | crate Off-chain + compléments Config |
| audit Rust sandbox | PASS | clean, 0 candidate export |
| audit Markdown sandbox | PASS | clean sur le fix |
| gate brut `pre.010` | FAIL | workspace ownership logging : 1 canari FAIL |
| fix `pre.010-fix.001` statique | PASS | doublon lexical retiré, audits sandbox |
| gate Cargo complet du fix | PASS | gate opérateur complet du 2026-08-26 |
`pre.010` ne fait aucun smoke live, ne change aucun endpoint provider et n'introduit ni fallback, ni consensus, ni scheduler. Les documents crate créés ici sont des brouillons techniques courants ; `pre.012` reste seule propriétaire de la réconciliation documentaire finale après le gate technique/live de `pre.011`. Le gate brut de `pre.010` a passé audits, `cargo check`, Clippy et tests ciblés, puis `cargo test --workspace` a échoué dans `ksp-logging-lib/tests/ownership.rs` parce que `tests/security_hardening.rs` contenait littéralement le chemin logging interdit dans une assertion destinée à le bannir. `pre.010-fix.001` supprime ce scanner local redondant et conserve `ksp-logging-lib/tests/ownership.rs` comme autorité workspace unique.
`pre.010` ne fait aucun smoke live, ne change aucun endpoint provider et n'introduit ni fallback, ni consensus, ni scheduler. Les documents crate créés ici sont des brouillons techniques courants ; `pre.012` reste seule propriétaire de la réconciliation documentaire finale après le gate technique/live de `pre.011`. Le gate brut de `pre.010` a passé audits, `cargo check`, Clippy et tests ciblés, puis `cargo test --workspace` a échoué dans `ksp-logging-lib/tests/ownership.rs` parce que `tests/security_hardening.rs` contenait littéralement le chemin logging interdit dans une assertion destinée à le bannir. `pre.010-fix.001` supprime ce scanner local redondant et conserve `ksp-logging-lib/tests/ownership.rs` comme autorité workspace unique. Le gate rejoué sur `0.2.11-pre.10.fix.1` est ensuite intégralement PASS : audits Rust/Markdown, `cargo check --workspace`, Clippy, 58 unitaires + 6 boundary + 7 public API + 2 completeness + 3 hardening Off-chain, 120 unitaires Config et `cargo test --workspace`.
## 3.14 Gate `0.2.11-pre.011`
| Critère | Statut | Preuve / condition opérateur |
|--------------------------------------------------------------|---------|---------------------------------------------------------------|
| version workspace `0.2.11-pre.11` | PASS | `Cargo.toml` racine |
| réaudit officiel des huit providers au `2026-08-26` | PASS | sources provider courantes, aucun contrat wire à modifier |
| CoinPaprika fraîcheur contradictoire sans faux scheduler | PASS | référence ~5 min / plans jusquà 10 min, runtime conservateur |
| smoke keyless durable sur sept providers | PASS | test ignoré `keyless_market_price_providers_live_smoke` |
| smoke keyed durable sur quatre modes gratuits | PASS | test ignoré `keyed_market_price_providers_live_smoke` |
| secrets keyed lus sur `stdin`, jamais en argument CLI | PASS | `tests/market_price_live_smoke.rs` |
| DexScreener utilise une paire publique explicite sans search | PASS | Orca SOL/USDC canari, WSOL base |
| un échec provider ne court-circuite pas le batch live | PASS | outcomes collectés avant assertion finale |
| aucun prix exact live figé | PASS | validation identité/pair/sémantique/prix positif uniquement |
| audit Rust sandbox | PASS | clean, 0 candidate export |
| audit Markdown sandbox | PASS | clean, 125 tables / 120 fichiers |
| gate Cargo déterministe complet | PENDING | opérateur |
| `cargo tree` Off-chain | PENDING | opérateur, aucun SDK provider / aucune dépendance Config |
| smoke keyless réel | PENDING | obligatoire avant `pre.012` |
| smoke keyed réel | PENDING | exécuter si les quatre credentials gratuits sont disponibles |
La tranche `pre.011` ne change aucune logique réseau de production. Elle rend uniquement le gate live durable et réaudite les contrats externes avant stable. Le smoke keyless est le gate live sans credential obligatoire. Le smoke keyed peut être `SKIP opérateur` si les quatre clés ne sont pas disponibles ; ce statut doit être consigné explicitement dans la validation finale et ne doit jamais être transformé en PASS fictif.
## 4. 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 | PASS | PLANNED | IMPLEMENTED |
| CoinMarketCap | Oui | Oui | keyless ou Basic key | PASS | PLANNED | IMPLEMENTED |
| CoinPaprika | Oui | Oui | aucune | PASS | PLANNED | IMPLEMENTED |
| Kraken | Oui | Oui | aucune | PASS | PLANNED | IMPLEMENTED |
| Coinbase Exchange | Oui | Oui | aucune | PASS | PLANNED | IMPLEMENTED |
| Jupiter Price V3 | Oui | Oui | keyless ou Free key | PASS | PLANNED | IMPLEMENTED |
| Birdeye | Oui | Oui | API key Standard | PASS | PLANNED | IMPLEMENTED |
| DexScreener | Oui | Oui | aucune | PASS | PLANNED | IMPLEMENTED |
| CoinGecko | Oui | Oui | keyless ou Demo key | PASS | PENDING | IMPLEMENTED |
| CoinMarketCap | Oui | Oui | keyless ou Basic key | PASS | PENDING | IMPLEMENTED |
| CoinPaprika | Oui | Oui | aucune | PASS | PENDING | IMPLEMENTED |
| Kraken | Oui | Oui | aucune | PASS | PENDING | IMPLEMENTED |
| Coinbase Exchange | Oui | Oui | aucune | PASS | PENDING | IMPLEMENTED |
| Jupiter Price V3 | Oui | Oui | keyless ou Free key | PASS | PENDING | IMPLEMENTED |
| Birdeye | Oui | Oui | API key Standard | PASS | PENDING | IMPLEMENTED |
| DexScreener | Oui | Oui | aucune | PASS | PENDING | IMPLEMENTED |
`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.
@@ -482,10 +504,10 @@ Cette section valide l'architecture préparée par `0.2.11`; l'application elle-
| `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 |
| 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 |
## 13. Hors scope validé