# Delta `0.2.5-pre.004-fix.001` — activation `alloc` pour Argon2id raw KDF ## Base requise ```text livraison : 0.2.5-pre.004 workspace.package.version = "0.2.5-pre.4" ``` La base opérateur conserve les réorganisations déjà appliquées dans `crates/ksp-wallet-lib/src/constants.rs` et `crates/ksp-wallet-lib/src/lib.rs`. Ce fix ne touche pas ces fichiers. ## Motif La validation opérateur de `pre.004` échoue à la compilation de `ksp-wallet-lib` : ```text error[E0599]: no method named `hash_password_into` found for struct `Argon2<'key>` crates/ksp-wallet-lib/src/crypto.rs:177 ``` Le `cargo tree -e features -p ksp-wallet-lib` fourni par l'opérateur montre que `argon2 0.5.3` est activé uniquement avec : ```text argon2 feature "zeroize" ``` Or l'API `Argon2::hash_password_into` utilisée par la tranche est disponible dans `argon2 0.5.3` avec la feature `alloc`. La livraison `pre.004` avait donc correctement désactivé les default-features au niveau workspace mais omis d'activer localement la feature nécessaire à l'API effectivement consommée. Ce défaut de feature-set empêche : ```text cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-wallet-lib ``` avant l'exécution des tests Wallet. ## Correction Le manifest Wallet passe de : ```toml argon2 = { workspace = true, features = ["zeroize"] } ``` à : ```toml argon2 = { workspace = true, features = ["alloc", "zeroize"] } ``` La déclaration commune reste inchangée dans le `Cargo.toml` racine : ```toml argon2 = { version = "^0.5", default-features = false } ``` Cela respecte la politique KSP : la version reste possédée par `[workspace.dependencies]`, tandis que la crate membre active uniquement les features nécessaires à sa consommation locale. Aucune API crypto, aucun paramètre Argon2, aucun wire `.kspwallet`, aucun vecteur et aucune sémantique de sécurité ne changent. ## Canary de dépendances `crates/ksp-wallet-lib/tests/dependency_boundary.rs` est mis à jour afin d'exiger explicitement : ```text argon2 = { workspace = true, features = ["alloc", "zeroize"] } ``` Le canary continue d'interdire les dépendances directes Wallet vers Config, Transport, ExecutionPolicy, Store, Tauri, `tracing` et `solana-pubkey`. ## Version Cargo Le correctif modifie le graphe de features participant à la compilation et un test Rust : ```text 0.2.5-pre.4 -> 0.2.5-pre.4.fix.1 ``` ## Fichiers modifiés ```text Cargo.toml crates/ksp-wallet-lib/Cargo.toml crates/ksp-wallet-lib/tests/dependency_boundary.rs ``` ## Fichiers ajoutés ```text deltas/0.2.5/pre.004-fix.001.md ``` ## Fichiers supprimés Aucun. ## Audit `cargo tree` pré-fix enregistré Les sorties opérateur de `pre.004` confirment : ```text argon2 0.5.3 -> Wallet direct chacha20poly1305 0.11.0 -> Wallet direct getrandom 0.4.3 -> Wallet direct + uuid/Tauri ailleurs dans le workspace base64 0.23.1 -> Wallet direct uniquement pour cette génération zeroize 1.9.0 -> partagé par Wallet et plusieurs branches crypto/TLS ``` Le sous-arbre Wallet présente plusieurs générations transitives de briques RustCrypto (`block-buffer`, `cpufeatures`, `crypto-common`) provenant respectivement de la pile Argon2 `0.5.3` et de la pile XChaCha20-Poly1305 `0.11.0`. Elles sont transitives et correspondent aux générations stables actuellement retenues ; ce fix ne tente pas de les forcer ou de les unifier artificiellement. ## 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 ``` Audit du sous-arbre Wallet : ```bash cargo tree -p ksp-wallet-lib cargo tree -p ksp-wallet-lib -d cargo tree -e features -p ksp-wallet-lib cargo tree -i argon2@0.5.3 cargo tree -i chacha20poly1305@0.11.0 cargo tree -i getrandom@0.4.3 cargo tree -i base64@0.23.1 cargo tree -i zeroize@1.9.0 ``` Le contrôle feature doit notamment faire apparaître : ```text argon2 feature "alloc" argon2 feature "zeroize" ``` Une fois les validations normales propres, le benchmark opérateur de `pre.004` peut enfin être exécuté : ```bash cargo test -p ksp-wallet-lib benchmark_argon2_creation_candidates -- --ignored --nocapture --test-threads=1 ``` Son résultat reste nécessaire avant de figer le profil Argon2 de création dans la tranche suivante. ## Décisions - activer `alloc` localement dans `ksp-wallet-lib` plutôt que réactiver les default-features Argon2 globalement ; - conserver `zeroize` ; - ne modifier ni `crypto.rs`, ni les paramètres Argon2, ni le format V1 ; - renforcer le canary de manifest pour empêcher une régression identique ; - ne pas élargir le périmètre fonctionnel de `pre.004`. ## Questions ouvertes Aucune nouvelle question fonctionnelle introduite par ce correctif. Le choix du profil Argon2 de création reste volontairement ouvert jusqu'au benchmark opérateur prévu par `pre.004`. ## Commit attendu ```text v0.2.5-pre.004-fix.001 ```