# Delta `0.2.13-pre.005-fix.001` — faux positif du scanner Logging ## 1. Déclencheur Le gate opérateur de `pre.005` confirme : ```text cargo fmt --all PASS python3 scripts/audit_rust_workspace_rules.py PASS / clean python3 scripts/audit_markdown_tables.py ... PASS / clean cargo check --workspace PASS cargo clippy --workspace --all-targets PASS cargo test -p ksp-interface-lib PASS cargo test --workspace FAIL cargo tree -p ksp-interface-lib --edges normal Core-only confirmé cargo tree --duplicates fourni ``` Le test ciblé Interface est entièrement vert : ```text unit tests 10/10 manifest/source firewall 4/4 external consumer 1/1 public API 5/5 release completeness 3/3 ``` Le workspace échoue uniquement ici : ```text ksp-logging-lib/tests/ownership.rs workspace_crates_do_not_bypass_ksp_logging_facade ``` avec : ```text crates/ksp-interface-lib/tests/dependency_boundary.rs bypasses ksp-logging-lib via tracing ``` ## 2. Cause exacte Le scanner Logging recherche le chemin littéral : ```text tracing:: ``` sur le texte brut de tous les fichiers Rust des crates KSP, tests compris. Le hardening `pre.005` a ajouté ce même littéral dans `tests/dependency_boundary.rs` comme **pattern interdit à rechercher dans les sources de production**. Il ne s'agit donc ni d'un import, ni d'un appel runtime, ni d'une dépendance Interface vers Tracing : le scanner transversal détecte simplement la donnée de son canari voisin. Le graphe Cargo opérateur confirme toujours : ```text ksp-interface-lib └── ksp-core-lib └── solana-pubkey 4.3.0 ``` ## 3. Correction Le firewall Interface conserve strictement la même vérification, mais le token est écrit sans matérialiser `tracing::` contigu dans le source du test : ```rust concat!("tracing", "::") ``` La valeur produite à la compilation reste exactement `tracing::`. Le test Interface continue donc d'échouer si un module de production utilise directement ce chemin. Aucun `allow`, aucune exclusion de fichier et aucun affaiblissement du scanner Logging ne sont introduits. ## 4. Version Le fix modifie un test Rust ; la version workspace devient : ```text 0.2.13-pre.5.fix.1 ``` Commit attendu après validation : ```text v0.2.13-pre.005-fix.001 ``` Aucun tag prerelease. ## 5. Frontières Inchangés : ```text crates/ksp-interface-lib/src/** crates/ksp-interface-lib/Cargo.toml surface publique Interface ProgramAccountMeta ProgramInstruction bornes 255 / 10_240 Error/Result Core ksp-logging-lib absent d'Interface constants.rs absent TRACING_TARGET absent serde/borsh/bincode/wincode absents solana-instruction absent ``` ## 6. Fichiers modifiés ```text Cargo.toml crates/ksp-interface-lib/tests/dependency_boundary.rs docs/plans/020-V0_2_13_INTERFACE_PLAN.md docs/validation/016-V0_2_13_INTERFACE.md deltas/0.2.13/pre.005-fix.001.md ``` ## 7. Gate opérateur ```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.13 cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-interface-lib cargo test -p ksp-logging-lib --test ownership cargo test --workspace cargo tree -p ksp-interface-lib --edges normal cargo tree --duplicates ``` `pre.006` reste interdit tant que ce gate n'est pas intégralement vert.