diff --git a/Cargo.toml b/Cargo.toml index 615f7a5..5f37bed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 101 +# version: 102 [workspace] resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib"] [workspace.package] -version = "0.2.1-pre.4.fix.1" +version = "0.2.1-pre.4.fix.2" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-onchain-transport-lib/tests/dependency_boundary.rs b/crates/ksp-onchain-transport-lib/tests/dependency_boundary.rs index 8ba6fdf..51784e6 100644 --- a/crates/ksp-onchain-transport-lib/tests/dependency_boundary.rs +++ b/crates/ksp-onchain-transport-lib/tests/dependency_boundary.rs @@ -1,5 +1,5 @@ // file: crates/ksp-onchain-transport-lib/tests/dependency_boundary.rs -// version: 4 +// version: 5 //! Integration canary for the direct dependency firewall of `ksp-onchain-transport-lib`. @@ -34,11 +34,26 @@ fn workspace_dependency_table_does_not_activate_consumer_features() { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; - let workspace_dependencies = manifest.split("[workspace.dependencies]").nth(1).and_then(|tail| tail.split("[workspace.lints.rust]").next()); + let workspace_dependencies = match manifest.split("[workspace.dependencies]").nth(1) { + std::option::Option::Some(tail) => tail.split("[workspace.lints.rust]").next(), + std::option::Option::None => std::option::Option::None, + }; assert!(workspace_dependencies.is_some(), "workspace dependencies section must exist"); let workspace_dependencies = match workspace_dependencies { std::option::Option::Some(value) => value, std::option::Option::None => return, }; - assert!(!workspace_dependencies.contains("features ="), "consumer feature activation must stay in member manifests"); + for line in workspace_dependencies.lines() { + let content = match line.split('#').next() { + std::option::Option::Some(value) => value, + std::option::Option::None => continue, + }; + for inline_field in content.split(',') { + let key = match inline_field.split('=').next() { + std::option::Option::Some(value) => value.trim().trim_start_matches('{').trim(), + std::option::Option::None => continue, + }; + assert_ne!(key, "features", "consumer feature activation must stay in member manifests"); + } + } } diff --git a/deltas/0.2.1/pre.004-fix.002.md b/deltas/0.2.1/pre.004-fix.002.md new file mode 100644 index 0000000..8c40d03 --- /dev/null +++ b/deltas/0.2.1/pre.004-fix.002.md @@ -0,0 +1,40 @@ + + + +# Delta `v0.2.1-pre.004-fix.002` + +## Objet + +Corriger la canarie de frontière Cargo introduite par `v0.2.1-pre.004-fix.001` sans modifier la politique de features adoptée par ce fix. + +Le test `workspace_dependency_table_does_not_activate_consumer_features` recherchait naïvement la sous-chaîne `features =` dans `[workspace.dependencies]`. Cette recherche détectait aussi `default-features = false`, alors que `default-features` est précisément une option de résolution commune autorisée au niveau workspace par les règles KSP. + +## Modifications + +- `workspace.package.version` passe de `0.2.1-pre.4.fix.1` à `0.2.1-pre.4.fix.2` ; +- la canarie Cargo analyse désormais les champs des tables inline et interdit uniquement la clé exacte `features` dans `[workspace.dependencies]` ; +- `default-features` reste explicitement autorisé au niveau workspace ; +- suppression de la closure qui déclenchait `clippy::implicit-return` dans cette même canarie ; +- aucune modification des features réellement activées dans les manifests membres ; +- aucune modification du graphe fonctionnel Transport ; +- aucune modification du `ROADMAP.md`. + +## Politique KSP conservée + +La politique introduite par `v0.2.1-pre.004-fix.001` reste inchangée : + +- le workspace centralise les versions et les options communes de résolution telles que `default-features` ; +- chaque crate consommatrice active localement les `features = [...]` dont elle a réellement besoin ; +- les features requises uniquement par les tests sont placées dans les `dev-dependencies` du consumer concerné. + +## Validation attendue + +```bash +cargo fmt --all +cargo check --workspace +cargo clippy --workspace --all-targets +cargo test -p ksp-onchain-transport-lib +cargo test --workspace +``` + +Les `cargo tree` n'ont pas besoin d'être rejoués pour ce fix : aucune dépendance, aucun `default-features` et aucune activation locale de feature ne changent.