3.6 KiB
Delta 0.2.13-pre.005-fix.001 — faux positif du scanner Logging
1. Déclencheur
Le gate opérateur de pre.005 confirme :
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 :
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 :
ksp-logging-lib/tests/ownership.rs
workspace_crates_do_not_bypass_ksp_logging_facade
avec :
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 :
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 :
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 :
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 :
0.2.13-pre.5.fix.1
Commit attendu après validation :
v0.2.13-pre.005-fix.001
Aucun tag prerelease.
5. Frontières
Inchangés :
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
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
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.