119 lines
3.2 KiB
Markdown
119 lines
3.2 KiB
Markdown
<!-- file: deltas/0.2.11/pre.010-fix.001.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# 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.
|