# Delta `0.2.5-pre.004-fix.002` — faux positif du canari global Logging sur le canari Wallet ## Base requise ```text livraison : 0.2.5-pre.004-fix.001 workspace.package.version = "0.2.5-pre.4.fix.1" ``` La base conserve les réorganisations opérateur déjà acquises dans `crates/ksp-wallet-lib/src/constants.rs` et `crates/ksp-wallet-lib/src/lib.rs`. Ce fix ne touche pas ces fichiers. ## Motif Les validations opérateur de `pre.004-fix.001` donnent : ```text cargo fmt --all OK cargo check --workspace OK cargo clippy --workspace --all-targets OK cargo test -p ksp-wallet-lib OK : 22 passés, 1 benchmark ignoré + intégration/API/doctests cargo test --workspace ECHEC : 1 canari Logging ``` L'unique échec est : ```text ksp-logging-lib/tests/ownership.rs workspace_crates_do_not_bypass_ksp_logging_facade crates/ksp-wallet-lib/tests/dependency_boundary.rs bypasses ksp-logging-lib via tracing ``` Le canari global Logging scanne tous les fichiers Rust des crates, tests compris, à la recherche d'un chemin direct `tracing::`. Le canari Wallet contenait lui-même ce motif littéral afin de vérifier son absence dans `crates/ksp-wallet-lib/src/**` : ```rust assert!(!all_source.contains("tracing::")); ``` Le canari global détectait donc la chaîne de test elle-même. Il s'agit d'un faux positif de composition entre deux canaris corrects pris isolément, et non d'une dépendance ou d'un appel direct à `tracing` dans le code Wallet. ## Correction Le canari Wallet conserve exactement la même vérification mais construit le motif interdit à l'exécution : ```rust let direct_tracing_path = ["tracing", "::"].concat(); assert!(!all_source.contains(direct_tracing_path.as_str())); ``` Le fichier source du test ne contient ainsi plus le token contigu recherché par le canari global, tandis que le contrôle Wallet continue de détecter toute apparition réelle de ce chemin dans `src/**`. Le correctif ne : - retire aucun canari ; - n'ajoute aucun `#[allow]` ; - ne modifie pas `ksp-logging-lib` ; - ne modifie aucune API Wallet ; - ne modifie aucune primitive crypto, aucun wire `.kspwallet`, aucun paramètre Argon2 et aucun vecteur. ## Benchmark Argon2 enregistré Le benchmark opérateur de `pre.004-fix.001`, exécuté après les validations Wallet, donne : ```text memory_kib=65536 iterations=3 parallelism=1 elapsed_ms=1742 memory_kib=131072 iterations=3 parallelism=1 elapsed_ms=3459 memory_kib=262144 iterations=3 parallelism=1 elapsed_ms=6925 ``` Ces mesures sont enregistrées comme entrée du gate `pre.005`. Elles ne figent pas le profil de création dans ce fix. ## Version Cargo Le correctif modifie un test Rust participant au build : ```text 0.2.5-pre.4.fix.1 -> 0.2.5-pre.4.fix.2 ``` ## Fichiers modifiés ```text Cargo.toml crates/ksp-wallet-lib/tests/dependency_boundary.rs ``` ## Fichiers ajoutés ```text deltas/0.2.5/pre.004-fix.002.md ``` ## Fichiers supprimés Aucun. ## Fichiers volontairement inchangés ```text crates/ksp-wallet-lib/src/** crates/ksp-wallet-lib/Cargo.toml deltas/0.2.5/pre.004.md deltas/0.2.5/pre.004-fix.001.md docs/** ROADMAP.md CHANGELOG.md ``` ## Validation attendue après application ```bash cargo fmt --all cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-wallet-lib cargo test --workspace ``` Le test de régression déterminant pour ce fix est : ```bash cargo test -p ksp-logging-lib --test ownership ``` Il doit confirmer simultanément : ```text dependency_scanner_distinguishes_tauri_plugin_tracing_from_tracing OK workspace_crates_do_not_bypass_ksp_logging_facade OK ``` ## Décisions - conserver le canari Wallet interdisant le chemin direct vers `tracing` ; - ne pas affaiblir le canari global Logging ; - éliminer uniquement la représentation littérale auto-détectée dans le test Wallet ; - ne pas modifier le périmètre fonctionnel de `pre.004` ; - reporter la décision sur le profil Argon2 de création à `pre.005`, à partir des mesures opérateur déjà obtenues. ## Questions ouvertes Aucune nouvelle question fonctionnelle introduite par ce correctif. Le profil Argon2 de création reste la décision d'ouverture de `pre.005`. ## Commit attendu ```text v0.2.5-pre.004-fix.002 ```