# Delta `0.2.11-pre.010-fix.001` — Canari ownership logging du hardening ## 1. Base requise Ce correctif s'applique exclusivement après `0.2.11-pre.010`. Version Cargo attendue à l'entrée : ```text 0.2.11-pre.10 ``` Version Cargo de sortie : ```text 0.2.11-pre.10.fix.1 ``` ## 2. Motif du correctif Le gate opérateur du `2026-08-26` a produit : ```text cargo fmt --all exécuté audit Rust workspace PASS audit Markdown PASS, 124 tables / 118 files cargo check --workspace PASS cargo clippy --workspace --all-targets PASS cargo test -p ksp-offchain-transport-lib PASS cargo test -p ksp-config-lib PASS cargo test --workspace FAIL ``` L'échec workspace provient du canari global : ```text ksp-logging-lib/tests/ownership.rs workspace_crates_do_not_bypass_ksp_logging_facade ``` Le nouveau `tests/security_hardening.rs` de `pre.010` contenait lui-même le chemin lexical interdit dans une assertion destinée à vérifier son absence dans les modules `market_price_*`. Le scanner global inspectant tous les fichiers Rust, il a correctement détecté ce littéral dans le test et l'a interprété comme un bypass. ## 3. Correction Le canari local Off-chain ne duplique plus la vérification de ownership logging. `tests/security_hardening.rs` continue de vérifier ses invariants propres : ```text redaction des API keys dans Debug absence de lecture directe de std::env dans market_price_* absence de as_f64 comme vérité canonique de prix absence d'URL provider libre dans Config absence de rate-limit provider libre dans Config ``` L'autorité unique pour interdire les chemins logging directs dans les crates du workspace reste : ```text crates/ksp-logging-lib/tests/ownership.rs ``` Il n'est ni nécessaire ni souhaitable de contourner ce scanner en fragmentant ou construisant dynamiquement la chaîne interdite dans un autre test. ## 4. Scope fonctionnel inchangé Ce fix ne modifie pas : ```text les huit providers V1 HTTP commun rate limits / cooldowns MarketPriceService refresh / refresh_many / refresh_all Config Off-chain Transport numeric safety parsing timestamps provenance redaction runtime API publique #[non_exhaustive] endpoints ou credentials smoke live ``` Aucune nouvelle dépendance n'est ajoutée. ## 5. Fichiers modifiés ```text Cargo.toml crates/ksp-offchain-transport-lib/tests/security_hardening.rs docs/plans/018-V0_2_11_OFFCHAIN_PRICE_TRANSPORT_PLAN.md docs/validation/014-V0_2_11_OFFCHAIN_PRICE_TRANSPORT.md ``` ## 6. Fichier ajouté ```text deltas/0.2.11/pre.010-fix.001.md ``` ## 7. Gate opérateur requis ```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 ``` `pre.011` ne doit commencer qu'après ce gate propre.