v0.2.1-pre.004-fix.002
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 101
|
# version: 102
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
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"]
|
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]
|
[workspace.package]
|
||||||
version = "0.2.1-pre.4.fix.1"
|
version = "0.2.1-pre.4.fix.2"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-onchain-transport-lib/tests/dependency_boundary.rs
|
// 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`.
|
//! 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::Ok(value) => value,
|
||||||
std::result::Result::Err(_) => return,
|
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");
|
assert!(workspace_dependencies.is_some(), "workspace dependencies section must exist");
|
||||||
let workspace_dependencies = match workspace_dependencies {
|
let workspace_dependencies = match workspace_dependencies {
|
||||||
std::option::Option::Some(value) => value,
|
std::option::Option::Some(value) => value,
|
||||||
std::option::Option::None => return,
|
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");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
40
deltas/0.2.1/pre.004-fix.002.md
Normal file
40
deltas/0.2.1/pre.004-fix.002.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<!-- file: deltas/0.2.1/pre.004-fix.002.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# 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.
|
||||||
Reference in New Issue
Block a user